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

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

Цель

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

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

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

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

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

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

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

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

Набор данных

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

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

Решение

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

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

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

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

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

Приступим!

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

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

Структура таблицы в файле Excel

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

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

Импорт данных Excel в Dynamo

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

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

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

Преобразование данных Excel в словарь

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

Получение данных из словаря

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

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

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

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

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

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

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

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

Получение систем координат, расположенных вдоль характерных линий коридора

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

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

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

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

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

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

Создание вхождений блоков в пространстве модели

Результат

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

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

Обновление файла Excel и быстрое визуальное представление результатов в Civil 3D

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

Запуск графика с помощью проигрывателя Dynamo и просмотр результатов в Civil 3D

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

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

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

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

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

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

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

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

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

Идеи

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

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

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

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

Last updated