Создание новых узлов в Autodesk Dynamo для Civil 3D, чтобы создавать точки, добавлять точки к группам и создавать поверхности из групп точек.
Пример сценария Dynamo: CoGoPoints.dyn
Пример проекта: CoGoPoints.dwg
панель «Визуальное программирование»
Dynamo
.
«Импорт библиотеки» и выберите CoGoPoints.dll.
Узлы, созданные при импорте файла 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 обеспечивает блокировку документов при доступе для записи/чтения к базе данных, а также при транзакции открытия объектов базы данных. Любому узлу, которому требуется считывать или записывать объекты базы данных, необходимо использовать способ выше.