API-Beispielskript: Erstellen eines Koordinatenpunkts

Erstellt neue Blöcke in Autodesk Dynamo for Civil 3D zum Erstellen von Punkten, Hinzufügen von Punkten zu einer Punktgruppe und Erstellen einer Fläche aus einer Punktgruppe.

Dynamo-Beispielskript: CoGoPoints.dyn

Beispielprojekt: CoGoPoints.dwg

  1. Erstellen Sie ein neues C#-Projekt namens CoGoPoints Class Library(.Net Framework) mit .NET Framework 4.7.
  2. Fügen Sie die Dateien Point.cs, PointGroup.cs und Surface.cs zum Projekt hinzu.
  3. Fügen Sie Referenzen für diese Dateien wie AeccDbMgd.dll usw. aus dem Civil 3D-Installationspfad hinzu.
  4. Erstellen Sie die Lösung, und generieren Sie dann CoGoPoints.dll.
  5. Starten Sie Civil 3D, und öffnen Sie CoGoPoints.dwg.
  6. Klicken Sie auf Registerkarte Verwalten Gruppe Visuelle Programmierung Dynamo .
  7. Wählen Sie Datei Bibliothek importieren, und wählen Sie dann CoGoPoints.dll aus.

    Die Blöcke, die beim Importieren von CoGoPoints.dll erstellt werden, werden in der folgenden Abbildung dargestellt.

  8. Öffnen Sie das Skript CoGoPoints.dyn, und führen Sie es aus.

    Koordinatenpunkte werden in der Zeichnung erstellt und zu einer Punktgruppe hinzugefügt, und eine Fläche wird basierend auf der Punktgruppe erstellt.

In Dynamo stehen zwei Klassen zur Verfügung, mit denen neue Blöcke erstellt werden können und ein Verfolgungsmechanismus zu den neuen Blöcken hinzugefügt werden kann.
  1. Autodesk.AutoCAD.DynamoNodes.ObjectBase: Sorgt für die Ummantelung von Autodesk.AutoCAD.DatabaseServices.DBObject
  2. Autodesk.AutoCAD.DynamoNodes.Object: Abgeleitet von Autodesk.AutoCAD.DynamoNodes.ObjectBase, um die Eigenschaften oder Funktionen basierend auf Autodesk.AutoCAD.DatabaseServices.Object zu erweitern

Dynamo bietet zwei Möglichkeiten, einen Verfolgungsmechanismus umzusetzen. Eine davon ist, die vorhandene Methode (CommonConstruct) beim Erstellen neuer Blöcke zu verwenden. Alternativ können Sie mit einer Vorlage Verfolgungscode schreiben.

Um einen Verfolgungsmechanismus für neue Blöcke umzusetzen, müssen Klassen von Autodesk.AutoCAD.DynamoNodes.ObjectBase oder Autodesk.AutoCAD.DynamoNodes.Object abgeleitet werden. Ein verfolgter Block muss eine Ausgabe der erstellten Klasse des Blocks aufweisen, damit die Verfolgung gültig ist.

Verwenden der Verfolgungsmethode (CommonConstruct)

Die Funktion CommonConstruct wird in Autodesk.AutoCAD.DynamoNodes.ObjectBase und Autodesk.AutoCAD.DynamoNodes.Object erstellt.

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

Sie können Klassen erstellen, um entweder Autodesk.AutoCAD.DynamoNodes.ObjectBase oder Autodesk.AutoCAD.DynamoNodes.Object zu übernehmen. Die obigen Methoden können aufgerufen werden, wenn Sie neue Blöcke entsprechend der übernommenen Beziehung erstellen. Beachten Sie beispielsweise den Block PointGroup.CreateFromPoints.

Der Block erstellt eine Punktgruppe in Civil 3D aus einer Liste von Punkten.

Autodesk.Civil.DatabaseServices.PointGroup definiert eine Punktgruppe in Civil 3D, die von Autodesk.AutoCAD.DatabaseServices.Object abgeleitet ist. Eine neue Klasse namens PointGroup, abgeleitet von Autodesk.AutoCAD.DynamoNodes.Objectbase, muss erstellt werden, um den Civil 3D-Punktgruppentyp zu ummanteln. Das Attribut DynamoServices.RegisterForTrace kann zur Klasse PointGroup hinzugefügt werden, um einen Verfolgungsmechanismus umzusetzen. Dies ist nicht erforderlich, da Dynamo vorgabemäßig Unterstützung dafür bietet. Allerdings ist es eine übliche Coding-Praxis.

Der Block CreateFromPoints kann jetzt in PointGroup definiert werden. Aufgrund der inhärenten Beziehung kann CommonConstruct in Autodesk.AutoCAD.DynamoNodes.ObjectBase aufgerufen werden.

Die TNode-Methode ist der Blocktyp und erforderlich, um Autodesk.AutoCAD.DynamoNodes.ObjectBase zu übernehmen.

In diesem Beispiel:
TNode = CogoPoints.PointGroup
TObject ist der Typ des AutoCAD-Objekts, der zur Übernahme von Autodesk.AutoCAD.DatabaseServices.DBObject erforderlich ist.
In diesem Beispiel:
TObject = Autodesk.Civil.DatabaseServices.PointGroup
Die Funktion objectCreator erstellt ein Objekt. In diesem Beispiel ist es definiert als das Erstellen einer neuen Punktgruppe.

Die Funktion objectUpdater aktualisiert ein Objekt. In diesem Beispiel ist es definiert als das Aktualisieren einer vorhandenen Punktgruppe.

Die Funktion CommonConstruct sucht vorhandene Objekte für die verfolgte Referenz. War die Suche erfolgreich, erfolgt das Update mit dem Aufruf objectUpdater über isExisting==true. Wenn die Aktualisierung fehlschlägt, führt objectCreator einen Aufruf durch, um ein neues Objekt zu erstellen. Dann ruft objectUpdater isExisting==false auf.

Die Funktion CommonConstruct versucht, bestehende Objekte in der Datenbank mit demselben verfolgten Referenzwert zu aktualisieren. Wenn dies fehlschlägt, wird ein neues Objekt erstellt. Wenn das Objekt die Aktualisierung nicht unterstützt, wird isExisting==false zurückgegeben. Das bedeutet, dass ein neues Objekt erstellt und das alte Objekt gelöscht wird. CommonConstruct versucht, auch in diesem Fall denselben Referenzwert beizubehalten.

Die vollständigen Beispielcodes werden in PointGroup.cs angezeigt, und die CommonConstruct-Methode in Autodesk.AutoCAD.DynamoNodes.Object ist wie oben beschrieben.

Verwenden einer Verfolgungscode-Vorlage

Mithilfe der folgenden Vorlage können Sie Verfolgungscode schreiben. Die Klasse für neue Blöcke muss jedoch trotzdem Autodesk.AutoCAD.DynamoNodes.Object oder Autodesk.AutoCAD.DynamoNodes.Entity übernehmen.

Sie können sowohl den Code zum Erstellen als auch den Code zum Aktualisieren ausfüllen, um den Verfolgungscode in der obigen Vorlage umzusetzen.

Informationen zu DocumentContext

DocumentContext stellt sicher, dass die Dokumentsperre für den Lese-/Schreibzugriff auf die Datenbank und für eine Transaktion zum Öffnen von Datenbankobjekten abgerufen wird. Alle Blöcke, die Datenbankobjekte lesen oder schreiben, müssen die oben beschriebene Methode verwenden.