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

Один из многих примеров эффективного применения Dynamo — динамическое размещение отдельных объектов вдоль модели коридора. Часто объекты требуется размещать в местах, не зависящих от вставленных сборок вдоль коридора. Если эту задачу выполнять вручную, она может быть очень утомительной. Кроме того, много приходится переделывать при изменении горизонтальной или вертикальной геометрии коридора.

Цель

🎯 Размещение вхождений блока осветительных столбов вдоль коридора со значениями пикетов, заданными в файле Excel.

Основные этапы

  • Чтение данных из внешнего файла (в данном случае Excel)

  • Организация данных в словарях

  • Использование систем координат для управления положением, масштабом и поворотом

  • Размещение вхождений блоков

  • Визуализация геометрии в Dynamo

Совместимость версий

Этот график будет работать в Civil 3D 2020 и более поздних версиях.

Набор данных

Сначала скачайте файлы примеров ниже, а затем откройте файл DWG и график Dynamo.

Рекомендуем сохранить файл Excel в одной папке с графиком Dynamo.

Решение

Ниже представлен обзор логики, используемой в этом графике.

  1. Чтение файла Excel и импорт данных в Dynamo.

  2. Получение характерных линий из заданной базовой линии коридора.

  3. Создание систем координат вдоль характерной линии коридора на требуемых пикетах.

  4. Использование систем координат для размещения вхождений блоков в пространстве модели.

Приступим!

Получение данных Excel

При работе с этим примером графика мы используем файл Excel для хранения данных, на основе которых Dynamo будет размещать вхождения блоков осветительных столбов. Вот как выглядит наша таблица.

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

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

Теперь, когда мы получили данные, нужно разделить их по столбцам — Corridor, Baseline, PointCode и т. д., — чтобы их можно было использовать в оставшейся части графика. Обычно для этого используется узел List.GetItemAtIndex и указывается порядковый номер каждого нужного столбца. Например, номер столбца Corridor — 0, столбца Baseline — 1 и т. д.

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

Если вы еще не знакомы со словарями, см. раздел Словари в Dynamo.

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

Получение характерных линий коридора

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

  1. Выбор модели коридора по имени.

  2. Получение нужной базовой линии в коридоре.

  3. Получение характерной линии в пределах базовой линии по коду точки.

Создание систем координат

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

Если вы еще не знакомы с системами координат, см. раздел Вектор, плоскость и система координат.

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

Если вы еще не знакомы с элементами Code Block, см. раздел Узлы Code Block и DesignScript.

Создание вхождений блоков

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

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

Результат

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

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

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

Если вы еще не знакомы с проигрывателем Dynamo, см. раздел Проигрыватель Dynamo.

🎉 Миссия выполнена!

Бонус: визуализация в Dynamo

Иногда может быть полезно визуализировать геометрию коридора в Dynamo для получения контекста. В этой модели тела коридора уже извлечены в пространство модели, поэтому перенесем их в Dynamo.

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

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

  2. По сути, узел ScopeIf позволяет выборочно запускать целую ветвь узлов. Если входной порт test получает значение false, то все узлы, подключенные к узлу ScopeIf, при запуске выполняться не будут.

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

Идеи

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

Добавление столбца rotation в файл Excel и его использование для поворота систем координат.

Добавление значений смещения по горизонтали или по вертикали в файл Excel, чтобы при необходимости осветительные столбы могли отклоняться от характерной линии коридора.

Создание значений пикетов непосредственно в Dynamo (вместо использования файла Excel со значениями пикетов) на основе начального пикета и типового интервала.

Last updated