Размещение осветительных столбов

Один из многих примеров эффективного применения Dynamo — динамическое размещение отдельных объектов вдоль модели коридора. Часто объекты требуется размещать в местах, не зависящих от вставленных сборок вдоль коридора. Если эту задачу выполнять вручную, она может быть очень утомительной. Кроме того, много приходится переделывать при изменении горизонтальной или вертикальной геометрии коридора.
Цель
🎯 Размещение вхождений блока осветительных столбов вдоль коридора со значениями пикетов, заданными в файле Excel.
Основные этапы
Чтение данных из внешнего файла (в данном случае Excel)
Организация данных в словарях
Использование систем координат для управления положением, масштабом и поворотом
Размещение вхождений блоков
Визуализация геометрии в Dynamo
Совместимость версий
Этот график будет работать в Civil 3D 2020 и более поздних версиях.
Набор данных
Сначала скачайте файлы примеров ниже, а затем откройте файл DWG и график Dynamo.
Решение
Ниже представлен обзор логики, используемой в этом графике.
Чтение файла Excel и импорт данных в Dynamo.
Получение характерных линий из заданной базовой линии коридора.
Создание систем координат вдоль характерной линии коридора на требуемых пикетах.
Использование систем координат для размещения вхождений блоков в пространстве модели.
Приступим!
Получение данных Excel
При работе с этим примером графика мы используем файл Excel для хранения данных, на основе которых Dynamo будет размещать вхождения блоков осветительных столбов. Вот как выглядит наша таблица.

Данные Excel импортируются в Dynamo следующим образом.

Теперь, когда мы получили данные, нужно разделить их по столбцам — Corridor, Baseline, PointCode и т. д., — чтобы их можно было использовать в оставшейся части графика. Обычно для этого используется узел List.GetItemAtIndex и указывается порядковый номер каждого нужного столбца. Например, номер столбца Corridor — 0, столбца Baseline — 1 и т. д.
Пока все вроде бы в порядке. Однако при использовании такого подхода может возникнуть проблема. Что будет, если порядок столбцов в файле Excel впоследствии изменится? Или если между двумя столбцами будет вставлен третий? График перестанет работать должным образом, и его нужно будет изменить. Чтобы избежать этого, поместим данные в словарь, записав заголовки столбцов Excel в качестве ключей (keys), а остальные данные в качестве значений (values).

При таком подходе график будет более устойчивым, поскольку он сможет адаптироваться к изменению порядка столбцов в Excel. При условии что заголовки столбцов останутся неизменными, данные можно будет просто извлечь из словаря по ключу (заголовку столбца). Именно это мы и сделаем.

Получение характерных линий коридора
Итак, данные Excel импортированы и готовы к использованию. Начнем работать с ними, чтобы получить информацию о моделях коридоров из Civil 3D.

Выбор модели коридора по имени.
Получение нужной базовой линии в коридоре.
Получение характерной линии в пределах базовой линии по коду точки.
Создание систем координат
Теперь создадим системы координат вдоль характерных линий коридора на пикетах, значения которых заданы в файле Excel. Эти системы координат будут определять положение, поворот и масштаб вхождений блока осветительного столба.

Обратите внимание, что мы используем Code Block для поворота систем координат в зависимости от того, на какой стороне базовой линии они находятся. Добиться этого можно также с помощью последовательности из нескольких узлов, но в данном случае проще взять и написать код.
Создание вхождений блоков
Мы на финишной прямой. У нас есть вся необходимая информация для размещения вхождений блоков. Сначала необходимо получить нужные определения блоков из столбца BlockName в файле Excel.

Теперь все, что осталось сделать, — это создать вхождения блоков.

Результат
При запуске графика в пространстве модели вдоль коридора должны отобразиться новые вхождения блоков. И вот что здорово: если выбран автоматический режим выполнения графика, то при внесении изменений в файл Excel вхождения блоков обновляются автоматически.

Ниже приведен пример запуска графика с помощью проигрывателя Dynamo.

🎉 Миссия выполнена!
Бонус: визуализация в Dynamo
Иногда может быть полезно визуализировать геометрию коридора в Dynamo для получения контекста. В этой модели тела коридора уже извлечены в пространство модели, поэтому перенесем их в Dynamo.
Однако нужно учесть еще кое-что. Тела относятся к довольно «тяжелому» типу геометрии. Это значит, что данная операция замедлит работу графика. Здесь нам бы пригодился механизм, позволяющий выбрать, должны тела отображаться или нет. Очевидное решение — просто отключить узел Corridor.GetSolids. Однако это приведет к отображению предупреждений для всех последующих узлов, что сделает просмотр неудобным. В данной ситуации идеальным решением будет узел ScopeIf.

Обратите внимание на серую полосу в нижней части узла Object.Geometry. Она означает, что предварительный просмотр узла отключен (его можно вызвать, щелкнув узел правой кнопкой мыши). Это позволяет узлу GeometryColor.ByGeometryColor избежать «конкуренции» с другой геометрией за приоритет отображения в фоновом просмотре.
По сути, узел ScopeIf позволяет выборочно запускать целую ветвь узлов. Если входной порт test получает значение false, то все узлы, подключенные к узлу ScopeIf, при запуске выполняться не будут.
Так выглядит результат в фоновом просмотре Dynamo.

Идеи
Вот несколько вариантов того, как можно расширить возможности этого графика.
Last updated