Пример сценария API: создание точки COGO

Создание новых узлов в Autodesk Dynamo для Civil 3D, чтобы создавать точки, добавлять точки к группам и создавать поверхности из групп точек.

Пример сценария Dynamo: CoGoPoints.dyn

Пример проекта: CoGoPoints.dwg

  1. Создайте проект C# с именем CoGoPoints Class Library(.Net Framework) с помощью .NET Framework 4.7.
  2. Добавьте в проект файлы Point.cs, PointGroup.cs и Surface.cs.
  3. Добавьте ссылки для этих файлов (AeccDbMgd.dll и т. д.) из папок установщика Civil 3D.
  4. Сформируйте решение, затем создайте файл CoGoPoints.dll.
  5. Запустите программу Civil 3D и откройте файл CoGoPoints.dwg.
  6. Выберите вкладку «Управление»  панель «Визуальное программирование»  Dynamo .
  7. Нажмите «Файл»  «Импорт библиотеки» и выберите CoGoPoints.dll.

    Узлы, созданные при импорте файла CoGoPoints.dll, показаны на рисунке ниже.

  8. Откройте и запустите сценарий CoGoPoints.dyn.

    Точки COGO будут созданы в чертеже и добавлены к группе точек. Кроме того, из группы точек будет создана поверхность.

В Dynamo есть два класса, позволяющие создавать узлы и добавлять к ним механизм трассировки.
  1. Autodesk.AutoCAD.DynamoNodes.ObjectBase: заключает в себе Autodesk.AutoCAD.DatabaseServices.DBObject
  2. Autodesk.AutoCAD.DynamoNodes.Object: производный от Autodesk.AutoCAD.DynamoNodes.ObjectBase, расширяет свойства или функции в соответствии с Autodesk.AutoCAD.DatabaseServices.Object

Dynamo позволяет внедрить механизм трассировки двумя способами. Первый подразумевает применение существующего метода (CommonConstruct) при создании узлов. Второй подразумевает запись кода трассировки через шаблон.

Чтобы применить механизм трассировки к новым узлам, классы должны быть производными от Autodesk.AutoCAD.DynamoNodes.ObjectBase или Autodesk.AutoCAD.DynamoNodes.Object. Чтобы трассировка работала, отслеживаемый узел должен иметь вывод создаваемого класса узла.

Использование метода трассировки (CommonConstruct)

Функция 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.PointGroup
TObject — тип объекта 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

DocumentContext обеспечивает блокировку документов при доступе для записи/чтения к базе данных, а также при транзакции открытия объектов базы данных. Любому узлу, которому требуется считывать или записывать объекты базы данных, необходимо использовать способ выше.