Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Хотя программа Dynamo изначально разрабатывалась с прицелом на совместимость с Revit, ее можно использовать как универсальное средство визуального программирования и за пределами Revit. Программа Dynamo также интегрирована в Civil 3D, благодаря чему пользователи могут разрабатывать эффективные процедуры автоматизации для инфраструктурных проектов. Это очень полезный инструмент для решения разных задач, от типовых до самых сложных, который помогает экономить время, оптимизировать проекты и принимать более обоснованные проектные решения. Dynamo включает в себя набор узлов, разработанных специально для Civil 3D, а также библиотеки от сторонних разработчиков из числа участников сообщества пользователей.
В этой главе данного руководства мы рассмотрим Dynamo for Civil 3D, начиная с самых базовых понятий и заканчивая расширенными процессами.
Теперь, когда вы получили общее представление об этой программе, перейдем к созданию вашего первого графика Dynamo в Civil 3D.
Это простой пример, демонстрирующий основные функции Dynamo. Рекомендуем работать с ним в новом, пустом документе Civil 3D.
Сначала откройте пустой документ в Civil 3D. Перейдите на вкладку Управление на ленте Civil 3D и найдите панель Визуальное программирование.
Нажмите кнопку Dynamo, чтобы запустить Dynamo в отдельном окне.
В чем разница между Dynamo и проигрывателем Dynamo
Dynamo — это приложение, используемое для построения и выполнения графиков. Проигрыватель Dynamo — это инструмент для легкого запуска графиков без необходимости открывать их в Dynamo.
Если вы хотите опробовать проигрыватель в действии, см. раздел Проигрыватель Dynamo.
После открытия Dynamo отобразится начальный экран. Нажмите кнопку Создать, чтобы открыть пустое рабочее пространство.
Где найти примеры
Dynamo for Civil 3D содержит несколько готовых графиков, которые помогут понять, как именно можно использовать Dynamo. Рекомендуем ознакомиться с ними, а также с разделом Примеры рабочих процессов данного руководства.
Сейчас перед вами должно быть пустое рабочее пространство. Давайте посмотрим, как работает Dynamo. Вот наша цель:
Звучит несложно, правда? Но прежде чем начать, рассмотрим несколько основных понятий.
Основные компоновочные блоки графика Dynamo называются узлами. Каждый узел подобен маленькому компьютеру: мы вводим в него данные, он их обрабатывает и выводит результат. В Dynamo for Civil 3D есть библиотека узлов, которые можно соединять друг с другом проводами для получения графика. График позволяет решать более масштабные задачи, чем отдельный узел.
Если вы никогда не работали с Dynamo
Некоторые понятия могут быть вам незнакомы, и это нормально. Следующие разделы помогут вам во всем разобраться.
Пользовательский интерфейс Узлы и провода Основные узлы и понятия
Итак, приступим к построению графика. Вот все узлы, которые нам понадобятся.
Чтобы найти эти узлы, введите их имена в строке поиска в библиотеке либо щелкните правой кнопкой мыши в любом месте рабочей области и выполните поиск там.
Как узнать, какие узлы нужно использовать и где их найти
Узлы в библиотеке группируются по логическим категориям в зависимости от назначения. Подробную информацию см. в разделе Библиотека узлов.
Итоговый график должен выглядеть следующим образом.
Подведем итог выполненной работе.
Мы выбрали документ, в котором будем работать. В данном случае (и во многих других) мы работаем с активным документом в Civil 3D.
Мы определили целевой блок, в котором должен быть создан текстовый объект (в данном случае — пространство модели).
Мы использовали узел String, чтобы указать, на каком слое должен находиться текст.
Мы создали точку с помощью узла Point.ByCoordinates, чтобы определить положение, в котором должен быть размещен текст.
Мы задали координаты X и Y точки вставки текста с помощью двух узлов Number Slider.
Мы использовали дополнительный узел String для определения содержимого текстового объекта.
Наконец, мы создали текстовый объект.
Давайте посмотрим, какие результаты выдает наш новый график.
Вернитесь в Civil 3D и убедитесь, что выбрана вкладка Модель. На ней должен отобразиться новый текстовый объект, созданный в Dynamo.
Если текст не отображается, возможно, нужно выполнить команду ПОКАЗАТЬ -> ГРАНИЦЫ, чтобы увеличить изображение.
Отлично! Теперь внесем в этот текст некоторые изменения.
Вернемся к графику Dynamo и изменим некоторые входные значения, например текстовую строку, координаты точки вставки и т. д. Текст в Civil 3D должен автоматически обновиться. Кроме того, обратите внимание, что при отключении одного из входных портов текст удаляется. Если снова подключить все элементы, текст будет создан повторно.
Почему Dynamo не вставляет новый текстовый объект при каждом запуске графика
По умолчанию программа Dynamo «запоминает» объекты, которые создает. При изменении входных значений узлов объекты в Civil 3D обновляются, а не создаются заново. Подробные сведения об этом механизме см. в разделе Привязка объекта.
В этом примере рассматривается лишь малая доля возможностей Dynamo for Civil 3D. Чтобы узнать больше, перейдите к следующему разделу.
Ранее мы упомянули, что узлы являются основными компоновочными блоками графика Dynamo. Узлы хранятся в библиотеке, где они сгруппированы по логическим признакам. В Dynamo for Civil 3D в библиотеке есть две категории (или полки), содержащие специальные узлы для работы с объектами AutoCAD и Civil 3D, такими как трассы, профили, коридоры, вхождения блоков и т. д. Прочие разделы библиотеки содержат универсальные узлы, одинаковые во всех версиях Dynamo (например, в Dynamo для Revit, Dynamo Sandbox и т. д.).
Подробные сведения об организации узлов в корневой библиотеке Dynamo см. в разделе .
Специальные узлы для работы с объектами AutoCAD и Civil 3D
Узлы общего назначения
Узлы из пакетов сторонних разработчиков, которые можно установить отдельно
График Dynamo, в котором используются узлы из разделов AutoCAD и Civil 3D библиотеки, будет работать только в Dynamo for Civil 3D. Если открыть такой график Dynamo for Civil 3D в другой версии программы (например, в Dynamo для Revit), эти узлы будут помечены предупреждением и не будут запускаться.
Зачем нужны отдельные полки для AutoCAD и Civil 3D
Такой подход позволяет отделить узлы для собственных объектов AutoCAD (линии, полилинии, вхождения блоков и т. д.) от узлов для объектов Civil 3D (трассы, коридоры, поверхности и т. д.). С технической точки зрения, AutoCAD и Civil 3D — это два разных инструмента. AutoCAD — это базовое приложение, а Civil 3D — приложение, созданное на его основе.
Для работы с узлами AutoCAD и Civil 3D важно иметь четкое представление об иерархии объектов на каждой полке. Помните таксономические ранги, которые проходят на уроках биологии? Согласно им, все организмы в природе делятся на царства, типы, классы, порядки, семейства, рода и виды. Объекты AutoCAD и Civil 3D классифицируются аналогичным образом. Рассмотрим несколько примеров.
Рассмотрим в качестве примера трассу.
Допустим, требуется изменить имя трассы. Для этого добавим к имеющемуся графику узел CivilObject.SetName.
Поначалу все это может показаться довольно сложным. Что это за CivilObject и почему в библиотеке нет узла Alignment.SetName? Все дело в стремлении к возможности многократного использования и простоте. Если подумать, процесс изменения имени объекта Civil 3D всегда одинаков, будь то трасса, коридор, профиль или любой другой объект. Поэтому, вместо того чтобы создавать несколько узлов (например, Alignment.SetName, Corridor.SetName, Profile.SetName и т. д.), по сути выполняющих одну и ту же работу, все эти функции были заложены в один узел. В нашем случае это узел CivilObject.SetName.
Кроме того, к этому вопросу можно подойти со стороны связей между объектами. И трасса, и коридор являются типами объектов Civil, так же как и картофель, и морковь являются типами овощей. Узлы Civil.Object можно применять к объектам любого типа, точно так же как одну и ту же овощечистку можно применять и для очистки картофеля, и для очистки моркови. Представьте, какой хаос царил бы на кухне, если бы для чистки каждого вида овощей или фруктов использовался отдельный инструмент. В этом смысле библиотека узлов Dynamo похожа на кухню.
Идем дальше. Предположим, требуется изменить слой трассы. Для этого нам понадобится узел Object.SetLayer.
Почему он называется не CivilObject.SetLayer? Причина все та же: принципы простоты и возможности повторного использования, которые мы обсуждали ранее. Свойство layer есть у любого объекта AutoCAD, который можно нарисовать или вставить, например у линии, полилинии, текста, вхождения блока и т. д. Такие объекты Civil 3D, как трассы и коридоры, относятся к той же категории, поэтому любой узел, который применяется к категории Object, можно также использовать с любым объектом Civil.
Создание графика Dynamo для вставки текста в пространство модели
Миссия выполнена!
Разработка кинематических границ для проверки зазора — важная часть проектирования железной дороги. С помощью Dynamo можно создавать тела для определения таких границ без необходимости в создании сложных элементов конструкции коридора и управления ими.
Работа с характерными линиями коридора
Преобразование геометрии при переходе между системами координат
Создание тел путем лофтинга
Управление поведением узла с помощью параметров переплетения.
Этот график будет работать в Civil 3D 2020 и более поздних версиях.
Сначала скачайте файлы примеров ниже, а затем откройте файл DWG и график Dynamo.
Ниже представлен обзор логики, используемой в этом графике.
Получение характерных линий из заданной базовой линии коридора.
Создание систем координат вдоль характерной линии коридора с требуемым интервалом.
Преобразование геометрии блока профиля в соответствии с системой координат.
Лофтинг тела между профилями.
Создание тел в Civil 3D.
Приступим!
Сначала необходимо получить данные коридора. Выберем модель коридора по имени, получим нужную базовую линию в коридоре, а затем извлечем характерную линию в пределах базовой линии по коду точки.
Теперь создадим системы координат вдоль характерных линий коридора между заданным начальным и конечным пикетами. Эти системы координат будут использоваться для выравнивания геометрии блока профиля транспортного средства по коридору.
Если вы еще не знакомы с системами координат, см. раздел Вектор, плоскость и система координат.
Обратите внимание на XXX в правом нижнем углу узла. Это означает, что для параметров переплетения узла задано значение Векторное произведение. Это необходимо для создания систем координат с одинаковыми значениями пикетов для обеих характерных линий.
Если вы еще не знакомы с переплетением узлов, см. раздел Что такое список.
Теперь необходимо каким-то образом создать массив профилей транспортных средств вдоль характерных линий. Для этого преобразуем геометрию из определения блока профиля транспортного средства с помощью узла Geometry.Transform. Эту концепцию сложно представить визуально, так что прежде чем перейти к узлам, посмотрим на график, чтобы понять, что именно произойдет.
По сути, мы извлекаем геометрию Dynamo из одного определения блока, а затем перемещаем и поворачиваем ее, в процессе создавая массив вдоль характерной линии. Неплохо, да? Ниже представлена последовательность узлов.
Здесь выполняется получение определения блока из документа.
Эти узлы извлекают геометрию Dynamo для объектов в блоке.
Эти узлы, по сути, определяют исходную систему координат, в которой геометрия находится до преобразования.
Наконец, в этом узле выполняется собственно преобразование геометрии.
Обратите внимание на длинное переплетение в этом узле.
Вот что мы получаем в Dynamo.
У нас для вас хорошая новость. Самое сложное позади! Все, что осталось сделать, — создать тела между профилями. Это можно легко сделать с помощью узла Solid.ByLoft.
Результат можно посмотреть здесь. Помните, что это тела Dynamo, а значит, их все еще нужно создать в Civil 3D.
Последний шаг — вывод сгенерированных тел в пространство модели. Кроме того, мы присвоим им цвет, чтобы сделать их более заметными.
Ниже приведен пример запуска графика с помощью проигрывателя Dynamo.
Если вы еще не знакомы с проигрывателем Dynamo, см. раздел Проигрыватель Dynamo.
Вот несколько вариантов того, как можно расширить возможности этого графика.
Добавление возможности использования разных диапазонов пикетов отдельно для каждого пути.
Разбивка тел на более мелкие сегменты, которые можно проанализировать отдельно на предмет конфликтов.
Проверка того, не пересекаются ли тела границы с элементами, и выделение цветом тех, которые пересекаются.
Один из многих примеров эффективного применения Dynamo — динамическое размещение отдельных объектов вдоль модели коридора. Часто объекты требуется размещать в местах, не зависящих от вставленных сборок вдоль коридора. Если эту задачу выполнять вручную, она может быть очень утомительной. Кроме того, много приходится переделывать при изменении горизонтальной или вертикальной геометрии коридора.
Чтение данных из внешнего файла (в данном случае Excel)
Организация данных в словарях
Использование систем координат для управления положением, масштабом и поворотом
Размещение вхождений блоков
Визуализация геометрии в Dynamo
Этот график будет работать в Civil 3D 2020 и более поздних версиях.
Сначала скачайте файлы примеров ниже, а затем откройте файл DWG и график Dynamo.
Рекомендуем сохранить файл Excel в одной папке с графиком Dynamo.
Ниже представлен обзор логики, используемой в этом графике.
Чтение файла Excel и импорт данных в Dynamo.
Получение характерных линий из заданной базовой линии коридора.
Создание систем координат вдоль характерной линии коридора на требуемых пикетах.
Использование систем координат для размещения вхождений блоков в пространстве модели.
Приступим!
При работе с этим примером графика мы используем файл Excel для хранения данных, на основе которых Dynamo будет размещать вхождения блоков осветительных столбов. Вот как выглядит наша таблица.
Использование Dynamo для чтения данных из внешнего файла (например, файла Excel) — это отличная стратегия, особенно если эти данные необходимо предоставить другим участникам группы.
Данные 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.
Однако нужно учесть еще кое-что. Тела относятся к довольно «тяжелому» типу геометрии. Это значит, что данная операция замедлит работу графика. Здесь нам бы пригодился механизм, позволяющий выбрать, должны тела отображаться или нет. Очевидное решение — просто отключить узел Corridor.GetSolids. Однако это приведет к отображению предупреждений для всех последующих узлов, что сделает просмотр неудобным. В данной ситуации идеальным решением будет узел ScopeIf.
Обратите внимание на серую полосу в нижней части узла Object.Geometry. Она означает, что предварительный просмотр узла отключен (его можно вызвать, щелкнув узел правой кнопкой мыши). Это позволяет узлу GeometryColor.ByGeometryColor избежать «конкуренции» с другой геометрией за приоритет отображения в фоновом просмотре.
По сути, узел ScopeIf позволяет выборочно запускать целую ветвь узлов. Если входной порт test получает значение false, то все узлы, подключенные к узлу ScopeIf, при запуске выполняться не будут.
Так выглядит результат в фоновом просмотре Dynamo.
Вот несколько вариантов того, как можно расширить возможности этого графика.
Добавление столбца rotation в файл Excel и его использование для поворота систем координат.
Добавление значений смещения по горизонтали или по вертикали в файл Excel, чтобы при необходимости осветительные столбы могли отклоняться от характерной линии коридора.
Создание значений пикетов непосредственно в Dynamo (вместо использования файла Excel со значениями пикетов) на основе начального пикета и типового интервала.
Разработка проекта стандартного жилого здания подразумевает работу с определенными подземными коммуникациями, такими как канализация, ливневая канализация, водопровод и т. п. В этом примере демонстрируется использование Dynamo для подключения того или иного участка застройки к распределительной магистрали. Обычно подключение к магистрали требуется на каждом участке, и потому размещение всех коммуникаций отнимает много времени. Dynamo позволяет ускорить этот процесс за счет автоматического создания точных геометрических объектов, а также гибкого ввода данных с возможностью настройки в соответствии со стандартами местных надзорных органов.
Использование узла Select Object для ввода данных пользователем
Работа с системами координат
Использование геометрических операций, таких как Geometry.DistanceTo и Geometry.ClosestPointTo
Создание вхождений блоков
Управление параметрами привязки объектов
Этот график будет работать в Civil 3D 2020 и более поздних версиях.
Сначала скачайте файлы примеров ниже, а затем откройте файл DWG и график Dynamo.
Ниже представлен обзор логики, используемой в этом графике.
Получение геометрии кривой для распределительной магистрали.
Получение геометрии кривой для выбранной пользователем линии участка (при необходимости с обращением ее направления).
Создание точек вставки для счетчиков
Получение точек на распределительной магистрали, ближайших к местоположениям счетчиков
Создание вхождений блоков и линий в пространстве модели
Приступим!
Сначала необходимо добавить геометрию для распределительной магистрали в Dynamo. Вместо того чтобы выбирать отдельные линии или полилинии, мы извлечем все объекты на определенном слое и объединим их в сложную кривую Dynamo.
Теперь необходимо перенести геометрию выбранной линии участка в Dynamo, чтобы с ней можно было работать. Для этого нам понадобится узел Select Object, с помощью которого пользователь график может выбрать определенный объект в Civil 3D.
Нам также необходимо решить одну потенциальную проблему. Линия участка имеет начальную и конечную точки, а это значит, что у нее есть направление. Чтобы график давал последовательные результаты, все линии участка должны иметь одинаковое направление. Это условие можно задать непосредственно в логике графика, что сделает наш график более стабильным.
Получаем начальную и конечную точки линии участка.
Измеряем расстояние от каждой точки до распределительной магистрали, а затем определяем, какое расстояние больше.
Нужно, чтобы начальная точка линии находилась ближе к распределительной магистрали. Если это не так, требуется обратить направление линии участка. Если все правильно, то мы просто возвращаем исходную линию участка.
Теперь нужно решить, где будут размещены счетчики. Обычно их расположение определяется местными органами власти, поэтому мы просто укажем входные значения, которые можно изменить в соответствии с теми или иными условиями. В качестве основы для создания точек используем систему координат, расположенную вдоль линии участка. Это позволит с легкостью определить смещения относительно линии участка независимо от ее ориентации.
Теперь нужно получить точки на распределительной магистрали, которые находятся ближе всего к счетчикам. Это позволит нам нарисовать линии подключения в пространстве модели так, чтобы они всегда были перпендикулярны к распределительной магистрали. Для этого идеально подойдет узел Geometry.ClosestPointTo.
Сложная кривая распределительной магистрали.
Точки вставки счетчиков.
Наконец, последний шаг — создание объектов в пространстве модели. Сначала мы используем созданные ранее точки вставки для создания вхождений блоков, а затем — точки на распределительной магистрали для построения линий подключения коммуникаций.
При запуске графика в пространстве модели должны отображаться новые вхождения блоков и линии подключения коммуникаций. Попробуйте изменить входные данные, чтобы увидеть, как программа автоматически обновит результаты.
Вы могли заметить, что после размещения объектов для одной линии участка эти объекты «перемещаются» при выборе другой линии участка.
Это стандартное поведение Dynamo, которое является желанным и полезным во многих случаях. Однако иногда может потребоваться разместить несколько последовательных подключений к коммуникациям так, чтобы программа Dynamo создавала при каждом запуске сценария новые объекты, а не изменяла исходные. Этим поведением можно управлять, изменив параметры привязки объекта.
Изменив этот параметр, мы заставляем программу Dynamo «забывать» объекты, создаваемые при каждом запуске графика. Ниже приведен пример запуска графика с отключенной привязкой объектов в проигрывателе Dynamo.
Вот несколько вариантов того, как можно расширить возможности этого графика.
Размещение нескольких подключений к коммуникациям одновременно вместо выбора каждой линии участка по отдельности.
Изменение входных данных, чтобы вместо водопроводных счетчиков были размещены прочистные люки канализации.
Добавление переключателя, позволяющего разместить подключение к коммуникациям на конкретной стороне линии участка, а не на обеих ее сторонах.
При добавлении труб и колодцев в трубопроводную сеть Civil 3D назначение имен выполняется автоматически по шаблону. Обычно этого достаточно при первом размещении, однако в будущем по мере развития проекта эти имена потребуется изменить. Кроме того, существует множество разных шаблонов именования, таких как последовательное именование колодцев на участке трубопровода, начиная с самого дальнего, или именование в соответствии со схемой данных, принятой местными надзорными органами. В этом примере показано, как с помощью Dynamo можно определить стратегию именования и придерживаться ее.
Работа с ограничивающими рамками
Фильтрация данных с помощью узла List.FilterByBoolMask
Сортировка данных с помощью узла List.SortByKey
Создание и изменение текстовых строк
Этот график будет работать в Civil 3D 2020 и более поздних версиях.
Сначала скачайте файлы примеров ниже, а затем откройте файл DWG и график Dynamo.
Ниже представлен обзор логики, используемой в этом графике.
Выбор колодцев по слою.
Получение местоположений колодцев.
Фильтрация колодцев по смещению с последующей сортировкой по пикетам.
Создание новых имен.
Переименование колодцев.
Приступим!
Сначала необходимо выбрать все колодцы, с которыми мы планируем работать. Для этого просто выберем все объекты на определенном слое. Это означает, что мы сможем выбрать колодцы из разных трубопроводных сетей (при условии, что они находятся на одном слое).
Этот узел позволяет избежать случайного извлечения нежелательных типов объектов, которые могут находиться на том же слое, что и колодцы.
Теперь, когда мы выбрали все колодцы, нужно определить их положение в пространстве, чтобы рассортировать их по местоположению. Для этого воспользуемся ограничивающей рамкой каждого объекта. Ограничивающая рамка объекта — это рамка минимального размера, которая полностью включает геометрические границы этого объекта. Вычислив центр ограничивающей рамки, мы получим приближенное значение точки вставки колодца.
Мы используем эти точки для получения пикетов и смещений колодцев относительно выбранной трассы.
Здесь начинаются сложности. На данный момент у нас есть большой список всех колодцев на слое, который мы указали, и мы также выбрали трассу, вдоль которой их требуется отсортировать. Проблема в том, что в списке могут быть колодцы, которые не нужно переименовывать. Например, такие колодцы могут не принадлежать к интересующей нас ветви.
Выбранная трасса.
Колодцы, которые требуется переименовать.
Колодцы, которые следует игнорировать.
Нужно отфильтровать список колодцев, чтобы проигнорировать те из них, чье смещение от трассы превышает определенное значение. Для этого лучше всего подойдет узел List.FilterByBoolMask. Отфильтровав список колодцев, используем узел List.SortByKey для их сортировки по значениям пикетов.
Проверка значения смещения колодца относительно порогового значения.
Замена всех нулевых значений на false.
Фильтрация списка колодцев и пикетов.
Сортировка колодцев по пикетам.
Последний шаг — создание новых имен для колодцев. Мы используем следующий формат: <alignment name>-STRC-<number>
. Здесь есть несколько дополнительных узлов, которые при необходимости добавляют дополнительные нули (например, 01 вместо 1).
Наконец, мы может переименовать колодцы.
Ниже приведен пример запуска графика с помощью проигрывателя Dynamo.
Вместо того чтобы сразу переходить к итоговому результату, можно использовать фоновый просмотр 3D в Dynamo для визуализации промежуточных результатов графика. Например, можно с легкостью отобразить ограничивающие рамки колодцев. Кроме того, в документе этого набора данных есть коридор, так что мы можем добавить геометрию характерных линий коридора в Dynamo, чтобы создать контекст для размещения колодцев в пространстве. Если применить этот график к набору данных, в котором нет коридоров, эти узлы просто не будут выполнять никаких действий.
Теперь мы можем наглядно увидеть, как работает процесс фильтрации колодцев по смещениям.
Вот несколько вариантов того, как можно расширить возможности этого графика.
Переименование колодцев на основе ближайшей трассы вместо выбора конкретной трассы.
Переименование труб в дополнение к переименованию колодцев.
Задание слоев для колодцев на основе их ветвей.
Использование блока профиля транспортного средства для создания 3D-тел, определяющих границы зазора, вдоль коридора.
Миссия выполнена!
Размещение вхождений блока осветительных столбов вдоль коридора со значениями пикетов, заданными в файле Excel.
Если вы еще не знакомы со словарями, см. раздел .
Если вы еще не знакомы с системами координат, см. раздел .
Если вы еще не знакомы с элементами Code Block, см. раздел .
Для получения подробностей о режимах выполнения графиков см. раздел .
Если вы еще не знакомы с проигрывателем Dynamo, см. раздел .
Миссия выполнена!
Размещение вхождений блоков водомера на заданном смещении от линии участка и нанесение линии для каждого подключения перпендикулярно к распределительной магистрали.
Если вы еще не знакомы с кривыми Dynamo, см. раздел .
Если вы еще не знакомы с системами координат, см. раздел .
Дополнительные сведения см. в разделе .
Если вы еще не знакомы с проигрывателем Dynamo, см. раздел .
Миссия выполнена!
Переименование колодцев трубопроводной сети в порядке, соответствующем пикетажу трассы.
Если вы еще не знакомы со списками, см. раздел .
Если вы еще не знакомы с проигрывателем Dynamo, см. раздел .
Миссия выполнена!
Возможно, со временем, когда базовых возможностей Dynamo станет недостаточно, вы захотите погрузиться в изучение внутреннего устройства этой программы. Информация в этом разделе поможет вам научиться работать с расширенными возможностями Dynamo for Civil 3D, которые позволят вам создавать графики наивысшего уровня.
Dynamo for Civil 3D предоставляет возможности визуального программирования инженерам и проектировщикам, работающим над инфраструктурными проектами. Dynamo можно рассматривать как цифровой швейцарский нож для пользователей Civil 3D: какая бы задача перед вами ни стояла, вы сможете найти подходящее решение. Интуитивно понятный интерфейс позволяет создавать эффективные настраиваемые процедуры без написания кода. Для использования Dynamo не нужно быть программистом, но нужно уметь думать, как программист. В этой главе, а также в других главах этого руководства представлены сведения, которые помогут вам развить ваши логические навыки, что позволит вам применять принципы машинного проектирования для решения любых задач.
Программа Dynamo была впервые представлена в составе Civil 3D 2020, и с тех пор ее возможности постоянно расширялись и улучшались. Изначально она устанавливалась отдельно как обновление программного обеспечения. Теперь же она поставляется в пакете со всеми версиями Civil 3D. В зависимости от используемой версии Civil 3D интерфейс Dynamo может немного отличаться от приведенных в этой главе примеров. Это связано с существенными изменениями в интерфейсе Civil 3D 2023.
Для получения наиболее актуальной информации о разработке Dynamo рекомендуем посетить блог Dynamo. В таблице ниже приведены ключевые этапы развития Dynamo for Civil 3D.
2024.1
2.18
2024
2.17
Обновление пользовательского интерфейса проигрывателя Dynamo
2023.2
2.15
2023
2.13
Обновление пользовательского интерфейса Dynamo
2022.1
2.12
Добавлены параметры хранения данных привязки объектов
Новые узлы для управления привязкой объектов
2022
2.10
Программа включена в основной пакет установки Civil 3D
Переход с IronPython на Python.NET
2021
2.5
2020.2
2.4
2020 Update 2
2.4
Добавлены новые узлы
2020.1
2.2
2020
2.1
Исходная версия
С помощью проигрывателя Dynamo можно легко запускать графики Dynamo в Civil 3D. Используя проигрыватель, можно запустить любой созданный в Dynamo график. Опыт работы с Dynamo для этого не требуется. Это упрощает обмен графиками с другими пользователями, которые могут быть не заинтересованы в глубоком изучении узлов и проводов.
Дополнительные сведения о проигрывателе Dynamo в Civil 3D см. в документации на странице справки по Civil 3D.
Работа с точками COGO и группами точек в Civil 3D является ключевым элементом многих процессов, связанных с завершением обработки полевых данных. Dynamo отлично подходит для управления данными. В этом примере мы рассмотрим один из возможных примеров использования.
Работа со списками
Группировка схожих объектов с помощью узла List.GroupByKey
Отображение пользовательских выходных данных в проигрывателе Dynamo
Этот график будет работать в Civil 3D 2020 и более поздних версиях.
Сначала скачайте файлы примеров ниже, а затем откройте файл DWG и график Dynamo.
Ниже представлен обзор логики, используемой в этом графике.
Получение всех точек COGO в документе.
Группировка точек COGO по описанию.
Создание групп точек.
Вывод сводных данных в проигрывателе Dynamo.
Приступим!
Сначала необходимо получить все группы точек в документе, а затем все точки COGO в каждой группе. В результате мы получим вложенный список, или список списков. Если мы выровняем все элементы в один список с помощью узла List.Flatten, это упростит дальнейшую работу.
Если вы еще не знакомы со списками, см. раздел Работа со списками.
Теперь, когда мы получили все точки COGO, необходимо разделить их на группы на основе их описаний. С этой задаче блестяще справится узел List.GroupByKey. По сути, он группирует все элементы с одинаковым ключом.
Самое сложное позади. Последний шаг — создание новой группы точек Civil 3D на основе сгруппированных точек COGO.
При запуске графика в области фонового просмотра Dynamo не отображается ничего, поскольку у нас нет никакой геометрии. Так что единственный способ убедиться, что график выполняется правильно, — проверить область инструментов или выполнить предварительный просмотр выходных данных узла. Однако если запустить график с помощью проигрывателя Dynamo, можно получить дополнительную информацию о результатах за счет вывода сводки по созданным группам точек. Для этого щелкнем узел правой кнопкой мыши и установим для него значение Является выводом. В данном случае для просмотра результатов используется переименованный узел Watch.
Ниже приведен пример запуска графика с помощью проигрывателя Dynamo.
Если вы еще не знакомы с проигрывателем Dynamo, см. раздел Проигрыватель Dynamo.
Вот несколько вариантов того, как можно расширить возможности этого графика.
Изменение принципа группировки точек, чтобы она выполнялась по полному описанию, а не по исходному.
Группировка точек по другим готовым категориям (например, «Базовые снимки», «Геодезические знаки» и т. д.).
Автоматическое создание поверхностей TIN для точек в определенных группах.
Пакеты Dynamo — это наборы инструментов, созданные сторонними разработчиками и призванные расширить основные функции Dynamo. Они доступны для всех, и их можно загрузить одним щелчком.
Дополнительные сведения по началу работы с пакетами см. в разделе Пакеты.
Ниже приведен список самых популярных пакетов, которые помогут вам создавать графики Dynamo for Civil 3D высшего уровня.
Civil 3D Toolkit — это пакет Dynamo for Civil 3D, который позволяет значительно усовершенствовать возможности Dynamo, поскольку содержит множество дополнительных узлов.
Camber — это пакет Dynamo for Civil 3D с открытым исходным кодом, который включает сотни узлов для работы с метками, внешними ссылками, быстрыми ссылками на данные, стилями и другими элементами.
CivilConnection — это пакет Dynamo для Revit с открытым исходным кодом, который поддерживает обмен данными между Civil 3D, Dynamo и Revit.
Arkance Systems Nodes — это пакет Dynamo for Civil 3D с широким спектром полезных узлов для работы с размерами, таблицами, видами, управлением сверлением и другими элементами.
Автомобильные и железные дороги, землеустройство, инженерные сети, топосъемка, ГИС...
Работа с объектами инфраструктуры включает в себя все это и многое другое. В этом разделе приведено несколько реалистичных и актуальных примеров графиков, которые помогут вам достичь высокого уровня владения Dynamo и раскрыть весь потенциал Dynamo for Civil 3D. Каждый график сопровожден подробным описанием логики, которая применялась при его создании, благодаря чему вы сможете не только использовать его, но и понять, зачем нужен каждый из его компонентов.
Кроме того, эти примеры основаны на проверенных временем передовых рекомендациях по построению эффективных графиков. При работе с примерами рекомендуется также ознакомиться с разделом Практические советы, в котором можно найти дополнительные идеи по созданию мощных, гибких и простых в сопровождении графиков.
Данное руководство призвано помочь вам начать работу с Dynamo for Civil 3D. Для получения дополнительных знаний вы можете обратиться к активному сообществу пользователей Dynamo. Приведенные ниже ресурсы помогут вам в процессе изучения программы.
Dynamo — это чрезвычайно мощный инструмент визуального программирования, однако его можно использовать не только для работы с узлами и проводами, но и для написания кода в текстовом формате. Сделать это можно двумя способами.
Написать код DesignScript с помощью Code Block.
Написать код Python с помощью узла Python.
В этом разделе рассматривается использование Python в среде Civil 3D для работы с .NET API программ AutoCAD и Civil 3D.
Общие сведения об использовании Python в Dynamo см. в разделе Python.
В AutoCAD и Civil 3D есть несколько API-интерфейсов, которые позволяют разработчикам расширять базовые возможности этих программ за счет пользовательских функций. В отношении Dynamo для этого применяются управляемые .NET API. По ссылкам ниже можно ознакомиться со сведениями, необходимыми для понимания структуры API-интерфейсов и принципа их работы.
Руководство разработчика .NET API AutoCAD (англ.)
Справочное руководство по .NET API AutoCAD (англ.)
Руководство разработчика .NET API Civil 3D (англ.)
Справочное руководство по .NET API Civil 3D (англ.)
В этом разделе могут встречаться незнакомые вам понятия, такие как базы данных, транзакции, методы, свойства и т. д. Многие из этих понятий необходимо знать для работы с .NET API, и они не относятся исключительно к Dynamo или Python. Мы не будем подробно рассматривать эти понятия в данном руководстве и потому рекомендуем обратиться к приведенным выше ссылкам для получения дополнительной информации.
Когда вы впервые откроете новый узел Python для его редактирования, он будет по умолчанию заполнен шаблонным кодом. Ниже приводится описание данного шаблона с пояснениями по каждому блоку.
Импорт модулей
sys
иclr
, необходимых для правильной работы интерпретатора Python. В частности, модульclr
позволяет обрабатывать пространства имен .NET как пакеты Python.Загрузка стандартных сборок (например, файлов DLL) для работы с управляемыми .NET API для AutoCAD и Civil 3D.
Добавление ссылок на стандартные пространства имен AutoCAD и Civil 3D. Эквивалентно директивам
using
иImports
в C# и VB.NET, соответственно.Доступ к входным портам узла осуществляется с помощью предварительно определенного списка
IN
. Для доступа к данным в определенном порте можно использовать его порядковый номер, например:dataInFirstPort = IN[0]
.Получение активных документа и редактора.
Блокировка документа и запуск транзакции базы данных.
Здесь размещается основная часть логики сценария.
Раскомментируйте эту строку, чтобы зафиксировать транзакцию после выполнения основного объема работы.
Если требуется вывести какие-либо данные из узла, назначьте их переменной
OUT
в конце сценария.
Хотите адаптировать шаблон?
Шаблон Python по умолчанию можно изменить, отредактировав файл PythonTemplate.py
, расположенный в папке C:\ProgramData\Autodesk\C3D <version>\Dynamo
.
Чтобы ознакомиться с некоторыми из основных понятий, относящихся к написанию сценариев Python в Dynamo for Civil 3D, рассмотрим пример.
Ниже приведены файлы примеров, которые можно использовать в этом упражнении.
Ниже представлен обзор логики, используемой в этом графике.
Изучить документацию по API Civil 3D.
Выбрать все водосборы в документе по имени слоя.
«Развернуть» объекты Dynamo для доступа ко внутренним элементам API Civil 3D.
Создать точки Dynamo на основе точек AutoCAD.
Создать сложные кривые по точкам.
Приступим!
Прежде чем приступить к созданию графика и написанию кода, ознакомьтесь с документацией по API Civil 3D, чтобы получить представление о доступных возможностях. В данном случае нас интересует свойство в классе Catchment, которое возвращает точки контура водосбора. Обратите внимание, что это свойство возвращает объект Point3dCollection
, но программа Dynamo не умеет обрабатывать такие объекты. Другими словами, мы не сможем создать сложную кривую на основе Point3dCollection
, поэтому нам придется преобразовать все полученные данные в точки Dynamo. Позже мы рассмотрим этот процесс подробнее.
Теперь можно приступить к выстраиванию логики графика. Сначала необходимо получить список всех водосборов в документе. Для решения этой задачи можно использовать узлы, поэтому мы не будем включать ее в сценарий Python. Использование узлов упрощает визуальное восприятие графика (не нужно пробираться через большой объем кода Python), а также позволяет посвятить сценарий Python выполнению одной задачи: получение точек контура водосборов.
Обратите внимание, что выходные данные узла All Objects on Layer представляют собой список элементов CivilObjects. Это связано с тем, что в Dynamo for Civil 3D в данный момент нет узлов для работы с водосборами, и именно поэтому нам требуется получить доступ к API через Python.
Прежде чем продолжить, кратко рассмотрим одну важную концепцию. В разделе Библиотека узлов была рассмотрена взаимосвязь элементов Object и CivilObject. Если рассмотреть эту взаимосвязь чуть глубже, можно увидеть, что каждый элемент Object Dynamo представляет собой оболочку для элемента Entity AutoCAD. Аналогичным образом, элемент CivilObject Dynamo представляет собой оболочку для элемента Entity Civil 3D. Эту оболочку можно снять, «развернув» элемент Object путем доступа к его свойствам InternalDBObject
или InternalObjectId
.
Object Autodesk.AutoCAD.DynamoNodes.Object
Entity Autodesk.AutoCAD.DatabaseServices.Entity
CivilObject Autodesk.Civil.DynamoNodes.CivilObject
Entity Autodesk.Civil.DatabaseServices.Entity
На практике в большинстве случаев надежнее сначала получить идентификатор объекта с помощью свойства InternalObjectId
, а затем получить доступ к объекту-оболочке в транзакции. Причина в том, что свойство InternalDBObject
возвращает элемент DBObject AutoCAD, недоступный для записи.
Вот полный сценарий Python, который обращается к внутренним объектам водосбора и получает их точки контура. В сценарии выделены строки, содержащие измененный шаблонный код или новый пользовательский код.
Для просмотра пояснений щелкните подчеркнутые строки сценария.
На практике основной объем логики сценария рекомендуется размещать внутри транзакции. Это обеспечивает безопасный доступ к объектам, которые сценарий считывает или записывает. Если пропустить транзакцию, во многих случаях это может привести к неустранимой ошибке.
На этом этапе сценарий Python должен вывести список точек Dynamo, который можно увидеть в фоновом просмотре. Нам осталось просто создать сложных кривые на основе этих точек. Обратите внимание, что сделать это можно напрямую в сценарии Python, однако мы намеренно размещаем эту операцию за пределами сценария, в узле, чтобы сделать ее более заметной. Вот как выглядит итоговый график.
А вот итоговая геометрия Dynamo.
Небольшой комментарий перед завершением данного раздела. Настройка узла Python может выполняться по-разному в зависимости от используемой версии Civil 3D. В Civil 3D 2020 и 2021 в Dynamo использовался инструмент IronPython, который позволял переносить данные между объектами .NET и сценариями Python. Однако в Civil 3D 2022 в Dynamo применяется стандартный встроенный интерпретатор Python (CPython), в котором используется Python 3. Переход на этот вариант обеспечивает ряд преимуществ, в том числе доступ к популярным современным библиотекам и новым возможностям платформы, а также установку обновлений и исправлений для системы безопасности.
Подробные сведения об этом переходе и обновлении сценариев предыдущих версий можно найти в блоге Dynamo. Если вы хотите и дальше работать с IronPython, установите пакет DynamoIronPython2.7 с помощью Dynamo Package Manager.
Эта строка позволяет нам получить определенный класс из библиотеки геометрии Dynamo. Обратите внимание, что здесь мы указываем import Point as DynPoint
, а не import *
. Это нужно, чтобы избежать конфликтов имен.
Здесь мы указали, какой именно порт ввода содержит нужные данные, вместо того чтобы использовать значение по умолчанию IN
, которое ссылается на список всех портов ввода.
[^13: Входной список объектов может содержать не только водосборы, но и другие элементы. Необходимо проверить, так ли это, и принять соответствующие меры (итерация цикла продолжается только в том случае, если элемент действительно является водосбором).
Здесь мы получаем точки контура водосбора с помощью соответствующего свойства, которое мы нашли ранее в документации по API. Как уже упоминалось, в результате мы получим объект Point3dCollection
, который по сути является списком точек AutoCAD. Чтобы использовать эти точки, нам потребуется преобразовать их в точки Dynamo.
Запускаем цикл для каждого объекта Point3d
в Point3dCollection
.
Dynamo for Civil 3D содержит эффективный механизм «запоминания» объектов, создаваемых каждым узлом. Этот механизм называется привязкой объекта, и он позволяет получать последовательные результаты при каждом запуске графика Dynamo в определенном документе. Во многих случаях подобное поведение программы является желательным, однако в определенных ситуациях пользователям требуется возможность управлять аспектами работы Dynamo более детально. В этом разделе описывается, как работает функция привязки объектов и как ее можно использовать.
Рассмотрим данный график, который позволяет создать окружность в пространстве модели на текущем слое.
Посмотрим, что произойдет при изменении радиуса.
Это функция привязки объекта в действии. По умолчанию программа Dynamo изменяет радиус существующей окружности, а не создает новую окружность при каждом новом входном значении радиуса. Это происходит потому, что при каждом запуске графика узел Object.ByGeometry «вспоминает», что он создал эту конкретную окружность. Кроме того, эта информация сохраняется в Dynamo, чтобы в следующий раз при открытии документа Civil 3D и запуске графика поведение программы было аналогичным.
Рассмотрим пример, в котором требуется изменить стандартное поведение функции привязки объекта в Dynamo. Предположим, требуется создать график, позволяющий разместить текст внутри окружности. При этом предполагается, что график будет запускаться многократно, и при каждом его запуске новый текст должен вставляться в конкретную выбранную окружность. Вот как может выглядеть этот график.
Однако вот что происходит при выборе разных окружностей.
Изменив данный параметр, мы получаем нужное поведение.
Dynamo for Civil 3D позволяет изменить поведение привязки объектов по умолчанию с помощью параметров Binding Data Storage (Хранение данных привязки) в меню Dynamo.
Обратите внимание, что параметры хранения данных привязки доступны в Civil 3D 2022.1 и более поздних версиях.
По умолчанию все параметры включены. Ниже приведен обзор каждого параметра.
Если этот параметр включен, Dynamo будет «забывать» объекты, созданные при последнем запуске того или иного графика. Этот график можно запускать в любом чертеже и в любых условиях, и каждый раз при его запуске будут создаваться новые объекты.
Рекомендации по использованию
Используйте этот параметр, если требуется, чтобы программа Dynamo «забывала» сделанное при предшествующих запусках графика и каждый раз создавала новые объекты.
Если этот параметр выбран, метаданные привязки объекта будут проиндексированы в графике (файл DYN) при его сохранении. Если закрыть и заново открыть график, а затем запустить его в том же чертеже, он должен работать точно таким же образом, что и до закрытия. При запуске этого же графика в другом чертеже данные привязки будут из него удалены, и в чертеже будут созданы новые объекты. Это означает, что при открытии исходного чертежа и повторном запуске в нем графика в дополнение к старым объектам будут созданы новые.
Рекомендации по использованию
Используйте этот параметр, если требуется, чтобы программа Dynamo «запоминала» объекты, созданные при последнем запуске графика в конкретном чертеже.
Этот параметр оптимален для ситуаций, когда определенный график Dynamo используется только в конкретном чертеже и больше нигде. Параметры 1 и 3 больше подходят для графиков, предназначенных для использования в нескольких чертежах.
Этот параметр похож на параметр 2, однако при его выборе данные привязки объекта индексируются не в графике (файл DYN), а в чертеже. Если закрыть и заново открыть график, а затем запустить его в том же чертеже, он должен работать точно таким же образом, что и до закрытия. Если запустить этот график в другом чертеже, данные привязки будут по-прежнему доступны в исходном чертеже, поскольку они сохраняются в нем, а не в графике.
Рекомендации по использованию
Используйте этот параметр, если требуется, чтобы программа Dynamo «запоминала» все полученные результаты при запуске определенного графика в нескольких чертежах.
Первое, что следует учесть при выборе этого параметра, — это то, он не влияет на взаимодействие графика с чертежом при запуске графика через основной интерфейс Dynamo. Этот параметр применяется только при запуске графика с помощью проигрывателя Dynamo.
Если запустить график в основном интерфейсе Dynamo, а затем закрыть и запустить его снова, но уже в проигрывателе Dynamo, то в дополнение к созданным изначально объектам будут созданы новые. Однако после того, как график будет выполнен в проигрывателе Dynamo, данные привязки объектов будут индексированы в чертеже. Таким образом, если запустить один и тот же график несколько раз в проигрывателе Dynamo, то вместо создания новых объектов будут обновляться уже существующие. Если запустить этот же график через проигрыватель Dynamo в другом чертеже, данные привязки будут по-прежнему доступны в исходном чертеже, поскольку они сохраняются в нем, а не в графике.
Рекомендации по использованию
Используйте этот параметр, если требуется, чтобы проигрыватель Dynamo «запоминал» все полученные результаты при запуске определенного графика в нескольких чертежах.
Создание группы точек для каждого уникального описания точки COGO.
Миссия выполнена!
Получение геометрии границ всех водосборов на чертеже.
Миссия выполнена!
Может показаться, что при каждом запуске графика текст удаляется и создается заново. На самом деле программа изменяет положение текста в зависимости от того, какая окружность выбрана. Это тот же самый текст, который просто помещен в другое место. Чтобы текст создавался заново каждый раз при запуске графика, необходимо изменить параметры привязки объекта Dynamo так, чтобы данные привязки не сохранялись в программе (см. раздел ниже).
Если вы еще не знакомы с проигрывателем Dynamo, см. раздел .