Esempio di script API: generazione punti COGO

Crea nuovo nodi in Autodesk Dynamo per Civil 3D per creare punti, aggiungere punti ad un gruppo di punti e creare una superficie da un gruppo di punti.

Script Dynamo di esempio: CoGoPoints.dyn

Progetto di esempio: CoGoPoints.dwg

  1. Creare un nuovo progetto C# denominato CoGoPoints Class Library(.Net Framework) con .NET Framework 4.7.
  2. Aggiungere file: Point.cs, PointGroup.cs e Surface.cs al progetto.
  3. Aggiungere riferimenti per questi file ad esempio AeccDbMgd.dll e così via dal percorso di installazione di Civil 3D.
  4. Compilare la soluzione, quindi generare CoGoPoints.dll.
  5. Eseguire Civil 3D e aprire CoGoPoints.dwg.
  6. Fare clic sulla scheda Gestisci gruppo Programmazione visiva Dynamo .
  7. Selezionare File Importa libreria e scegliere CoGoPoints.dll.

    I nodi che vengono creati quando si importa CoGoPoints.dll vengono visualizzati nella figura seguente.

  8. Aprire ed eseguire lo script CoGoPoints.dyn.

    I punti COGO vengono creati nella Carta e aggiunti ad un gruppo di punti, da cui viene creata una superficie.

Sono disponibili due classi in Dynamo per creare nuovi nodi e aggiungere un meccanismo di traccia ai nuovi nodi.
  1. Autodesk.AutoCAD.DynamoNodes.ObjectBase: fornisce l'incapsulamento di Autodesk.AutoCAD.DatabaseServices.DBObject
  2. Autodesk.AutoCAD.DynamoNodes.Object: derivato da Autodesk.AutoCAD.DynamoNodes.ObjectBase per estendere le proprietà o le funzioni in base ad Autodesk.AutoCAD.DatabaseServices.Object

Dynamo offre due metodi per realizzare un meccanismo di traccia. Uno è utilizzare il metodo esistente (CommonConstruct) durante la creazione di nuovi nodi. L'altro è scrivere codice di traccia con un modello.

Per realizzare un meccanismo di traccia per nuovi nodi, le classi devono essere derivate da Autodesk.AutoCAD.DynamoNodes.ObjectBase o Autodesk.AutoCAD.DynamoNodes.Object. Un nodo tracciato deve avere un output della classe creata del nodo per rendere la traccia valida.

Uso del metodo di traccia(CommonConstruct)

La funzione CommonConstruct viene creata in Autodesk.AutoCAD.DynamoNodes.ObjectBase e Autodesk.AutoCAD.DynamoNodes.Object.

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

È possibile creare classi per ereditare Autodesk.AutoCAD.DynamoNodes.ObjectBase o Autodesk.AutoCAD.DynamoNodes.Object. I metodi precedenti possono essere chiamati quando si creano nuovi nodi in base alla relazione ereditata. Ad esempio, notare il seguente nodo PointGroup.CreateFromPoints.

Il nodo crea un gruppo di punti in Civil 3D da un elenco di punti.

Autodesk.Civil.DatabaseServices.PointGroup definisce un gruppo di punti in Civil 3D derivati da Autodesk.AutoCAD.DatabaseServices.Object. Una nuova classe denominata PointGroup derivata da Autodesk.AutoCAD.DynamoNodes.Objectbase deve essere creata per incapsulare il tipo di gruppo di punti Civil 3D. L'attributo DynamoServices.RegisterForTrace può essere aggiunto alla classe PointGroup per realizzare il meccanismo di traccia. Questo non è obbligatorio perché è supportato da Dynamo per impostazione predefinita, tuttavia è un'ottima convenzione di codifica.

Il nodo CreateFromPoints può ora essere definito in PointGroup. A causa della relazione intrinseca, può essere chiamato CommonConstruct in Autodesk.AutoCAD.DynamoNodes.ObjectBase.

Il metodo TNode è il tipo del nodo ed è richiesto per ereditare Autodesk.AutoCAD.DynamoNodes.ObjectBase.

In questo esempio:
TNode = CogoPoints.PointGroup
TObject è il tipo dell'oggetto AutoCAD richiesto per ereditare Autodesk.AutoCAD.DatabaseServices.DBObject.
In questo esempio:
TObject = Autodesk.Civil.DatabaseServices.PointGroup
La funzione objectCreator crea un oggetto. In questo esempio viene definita come la creazione di un nuovo gruppo di punti.

La funzione objectUpdater esegue l'aggiornamento di un oggetto. In questo esempio viene definita come l'aggiornamento di un gruppo di punti esistente.

Nella funzione CommonConstruct viene eseguito un tentativo per trovare oggetti esistenti dal gestore tracciato. Se trovati, viene eseguito l'aggiornamento con la chiamata objectUpdater con isExisting==true. Se l'aggiornamento non va a buon fine, objectCreator esegue una chiamata per creare un nuovo oggetto, quindi objectUpdater esegue la chiamata isExisting==false.

Nella funzione CommonConstruct viene eseguito un tentativo di aggiornamento degli oggetti esistenti nel database con lo stesso valore del gestore tracciato. Se questa operazione non va a buon fine, verrà creato un nuovo oggetto. Se l'oggetto non supporta gli aggiornamenti, è possibile restituire isExisting==false. Ciò significa che verrà creato un nuovo oggetto ed eliminato l'oggetto precedente. In CommonConstruct si cercherà ancora di mantenere lo stesso valore del gestore in questo caso.

I codici di esempio completi vengono visualizzati in PointGroup.cs e il metodo CommonConstruct in Autodesk.AutoCAD.DynamoNodes.Object è quello descritto in precedenza.

Utilizzo del modello di codice di traccia

È possibile scrivere il codice di traccia con il seguente modello. Tuttavia, la classe per nuovi nodi deve ancora ereditare da Autodesk.AutoCAD.DynamoNodes.Object o Autodesk.AutoCAD.DynamoNodes.Entity.

È possibile inserire in entrambi il codice di creazione e di aggiornamento per realizzare il codice di traccia nel modello precedente.

Informazioni su DocumentContext

DocumentContext consente di garantire il blocco del documento per l'accesso in lettura/scrittura al database e durante una transazione per aprire oggetti del database. Se in un nodo qualsiasi occorre leggere o scrivere oggetti database, è necessario utilizzare il metodo precedente.