Ejemplo de secuencia de comandos de API: generación de puntos COGO

Crea nuevos nodos en Autodesk Dynamo para Civil 3D para crear puntos, añadir puntos a un grupo de puntos y crear una superficie a partir de un grupo de puntos.

Ejemplo de secuencia de comandos de Dynamo: CoGoPoints.dyn

Proyecto de ejemplo: CoGoPoints.dwg

  1. Cree un nuevo proyecto de C# denominado CoGoPoints Class Library(.Net Framework) con .NET Framework 4.7.
  2. Añada al proyecto los archivos: Point.cs, PointGroup.cs y Surface.cs.
  3. Añada referencias para estos archivos, como por ejemplo AeccDbMgd.dll, y así sucesivamente, desde la ruta del instalador de Civil 3D.
  4. Genere la solución y, a continuación, genere CoGoPoints.dll.
  5. Ejecute Civil 3D y abra CoGoPoints.dwg.
  6. Haga clic en la ficha Administrar grupo Programación visual Dynamo .
  7. Seleccione Archivo Importar biblioteca y seleccione el archivo CoGoPoints.dll.

    Los nodos que se han creado al importar CoGoPoints.dll se muestran en la siguiente ilustración.

  8. Abra y ejecute la secuencia de comandos CoGoPoints.dyn.

    Se crean puntos COGO en el dibujo, se añaden a un grupo de puntos y se crea una superficie a partir del grupo de puntos.

Se proporcionan dos clases en Dynamo para crear nodos nuevos y añadir un mecanismo de rastreo para los nuevos nodos.
  1. Autodesk.AutoCAD.DynamoNodes.ObjectBase: facilita el encapsulado de Autodesk.AutoCAD.DatabaseServices.DBObject
  2. Autodesk.AutoCAD.DynamoNodes.Object: derivado de Autodesk.AutoCAD.DynamoNodes.ObjectBase para ampliar las propiedades o funciones de acuerdo con Autodesk.AutoCAD.DatabaseServices.Object

Dynamo ofrece dos maneras de conseguir un mecanismo de rastreo. Una es utilizar el método existente (CommonConstruct) al crear nodos. La otra forma es escribir código de rastreo con una plantilla.

Para conseguir un mecanismo de rastreo para nodos nuevos, las clases deben derivarse de Autodesk.AutoCAD.DynamoNodes.ObjectBase o Autodesk.AutoCAD.DynamoNodes.Object. Un nodo rastreado debe tener una salida de la clase creada del nodo para hacer que el rastreo sea válido.

Uso del método de rastreo (CommonConstruct)

La función CommonConstruct se crea tanto en Autodesk.AutoCAD.DynamoNodes.ObjectBase como en Autodesk.AutoCAD.DynamoNodes.Object.

Autodesk.AutoCAD.DynamoNodes.ObjectBase Autodesk.AutoCAD.DynamoNodes.Object

Puede crear clases para heredar Autodesk.AutoCAD.DynamoNodes.ObjectBase o Autodesk.AutoCAD.DynamoNodes.Object. Se puede llamar a los métodos anteriores al crear nuevos nodos según la relación heredada. Por ejemplo, observe el siguiente nodo PointGroup.CreateFromPoints.

El nodo crea un grupo de puntos en Civil 3D a partir de una lista de puntos.

Autodesk.Civil.DatabaseServices.PointGroup define un grupo de puntos en Civil 3D derivado de Autodesk.AutoCAD.DatabaseServices.Object. Debe crearse una clase nueva con el nombre PointGroup y que deriva de Autodesk.AutoCAD.DynamoNodes.Objectbase para encapsular el tipo de grupo de puntos de Civil 3D. Se puede añadir el atributo DynamoServices.RegisterForTrace a la clase PointGroup para conseguir un mecanismo de rastreo. No es imprescindible porque Dynamo lo admite por defecto, pero es una buena convención de codificación.

El nodo CreateFromPoints ahora puede definirse en PointGroup. Debido a la relación inherente, se puede llamar a CommonConstruct en Autodesk.AutoCAD.DynamoNodes.ObjectBase.

El método TNode es el tipo del nodo y es necesario para heredar Autodesk.AutoCAD.DynamoNodes.ObjectBase.

En este ejemplo:
TNode = CogoPoints.PointGroup
TObject es el tipo del objeto de AutoCAD necesario para heredar Autodesk.AutoCAD.DatabaseServices.DBObject.
En este ejemplo:
TObject = Autodesk.Civil.DatabaseServices.PointGroup
La función objectCreator crea un objeto. En este ejemplo, se define como la creación de un nuevo grupo de puntos.

La función objectUpdater actualiza un objeto. En este ejemplo, se define como la actualización de un nuevo grupo de puntos existente.

La función CommonConstruct intenta encontrar los objetos existentes del identificador trazado. Si los encuentra, se actualiza con la llamada objectUpdater, con isExisting==true. Si falla la actualización, objectCreator llama para crear un objeto nuevo y, a continuación, objectUpdater llama a isExisting==false.

La función CommonConstruct intenta actualizar los objetos existentes de la base de datos con el mismo valor del identificador trazado. Si falla, creará un objeto. Si el objeto no admite actualizaciones, puede devolver isExisting==false. Esto implica que creará otro objeto y eliminará el anterior. CommonConstruct intentará mantener el mismo valor de identificador en este caso.

Los códigos de ejemplo completos se muestran en PointGroup.cs y el método CommonConstruct en Autodesk.AutoCAD.DynamoNodes.Object es tal como se ha descrito anteriormente.

Utilizar una plantilla de código de rastreo

Puede escribir código de rastreo con la siguiente plantilla. Sin embargo, la clase para los nuevos nodos aún necesita heredar Autodesk.AutoCAD.DynamoNodes.Object o Autodesk.AutoCAD.DynamoNodes.Entity.

Puede completar tanto el código de creación como el de actualización para conseguir el código de rastreo en la plantilla anterior.

Acerca de DocumentContext

DocumentContext garantiza que el bloqueo del documento se obtenga para acceso de lectura/escritura de la base de datos y al hacer una transacción para abrir los objetos de la base de datos. Cualquier nodo que quiera leer objetos de base de datos o escribir en ellos debe utilizar el método anterior.