Создание новых узлов в Autodesk Dynamo для Civil 3D, чтобы создавать точки, добавлять точки к группам и создавать поверхности из групп точек.
Пример сценария Dynamo: CoGoPoints.dyn
Пример проекта: CoGoPoints.dwg
Узлы, созданные при импорте файла CoGoPoints.dll, показаны на рисунке ниже.
Точки COGO будут созданы в чертеже и добавлены к группе точек. Кроме того, из группы точек будет создана поверхность.
![]() |
![]() |
Dynamo позволяет внедрить механизм трассировки двумя способами. Первый подразумевает применение существующего метода (CommonConstruct) при создании узлов. Второй подразумевает запись кода трассировки через шаблон.
Чтобы применить механизм трассировки к новым узлам, классы должны быть производными от Autodesk.AutoCAD.DynamoNodes.ObjectBase или Autodesk.AutoCAD.DynamoNodes.Object. Чтобы трассировка работала, отслеживаемый узел должен иметь вывод создаваемого класса узла.
Функция CommonConstruct создана в Autodesk.AutoCAD.DynamoNodes.ObjectBase и Autodesk.AutoCAD.DynamoNodes.Object.
Autodesk.AutoCAD.DynamoNodes.ObjectBase | Autodesk.AutoCAD.DynamoNodes.Object |
---|---|
![]() |
![]() |
Можно создать классы, которые будут наследовать свойства Autodesk.AutoCAD.DynamoNodes.ObjectBase или Autodesk.AutoCAD.DynamoNodes.Object. Указанные выше методы можно вызывать при создании узлов в соответствии с наследуемыми взаимосвязями. Например, обратите внимание на следующий узел PointGroup.CreateFromPoints.
Узел создает группу точек в Civil 3D на основе списка точек.
Autodesk.Civil.DatabaseServices.PointGroup определяет группу точек в Civil 3D, которая является производной от Autodesk.AutoCAD.DatabaseServices.Object. Необходимо создать класс PointGroup из Autodesk.AutoCAD.DynamoNodes.Objectbase, который будет содержать тип группы точек Civil 3D. Для применения механизма трассировки к классу PointGroup можно добавить атрибут DynamoServices.RegisterForTrace. Это не обязательно, так как Dynamo поддерживает данную возможность по умолчанию, но это хороший способ оформить код.
Теперь в PointGroup можно определить узел CreateFromPoints. Наследуемые взаимосвязи позволяют вызвать метод CommonConstruct в Autodesk.AutoCAD.DynamoNodes.ObjectBase.
Метод TNode — тип узла, необходимый для наследования Autodesk.AutoCAD.DynamoNodes.ObjectBase.
TNode = CogoPoints.PointGroupTObject — тип объекта AutoCAD, необходимый для наследования Autodesk.AutoCAD.DatabaseServices.DBObject.
TObject = Autodesk.Civil.DatabaseServices.PointGroupФункция objectCreator создает объект. В этом примере этот процесс определяется как создание группы точек.
Функция objectUpdater обновляет объект. В этом примере этот процесс определяется как обновление существующей группы точек.
Функция CommonConstruct пытается найти существующие объекты из отслеживаемого дескриптора. Если объекты найдены, она обновляется с вызовом objectUpdater и использованием значения isExisting==true. Если функцию не удается обновить, выполняется вызов objectCreator для создания нового объекта, после чего происходит вызов objectUpdater isExisting==false.
Функция CommonConstruct пытается обновить существующие объекты в базе данных с использованием того же значения отслеживаемого дескриптора. Если не удастся это сделать, будет создан новый объект. Если объект не поддерживает обновления, можно вернуть значение isExisting==false. Таким образом, будет создан новый объект и удален старый. В этом случае метод CommonConstruct попытается сохранить то же значение дескриптора.
Полные примеры кодов отображаются в PointGroup.cs, а метод CommonConstruct в Autodesk.AutoCAD.DynamoNodes.Object работает, как описано выше.
Следующий шаблон позволяет записать код трассировки. Однако класс для новых узлов по-прежнему должен наследовать свойства Autodesk.AutoCAD.DynamoNodes.Object или Autodesk.AutoCAD.DynamoNodes.Entity.
Чтобы применить код трассировки в указанном выше шаблоне, можно записать и код создания, и код обновления.
DocumentContext обеспечивает блокировку документов при доступе для записи/чтения к базе данных, а также при транзакции открытия объектов базы данных. Любому узлу, которому требуется считывать или записывать объекты базы данных, необходимо использовать способ выше.