Baumstruktur für AutoCAD und Pyautocad

In einem meiner vorherigen Blogbeiträge habe ich erläutert, wie wir Listen und Wörterbücher zum Speichern von erstellten AutoCAD-Objekten verwenden können. In diesem Beitrag möchte ich einige effizientere Datenstrukturen vorstellen, die wir zum Organisieren von AutoCAD-Objekten gemäß ihren Eigenschaften verwenden können. Eine davon ist eine Baumdatenstruktur.

Baumdatenstruktur zum Organisieren von AutoCAD-Objekten

Eine Baumdatenstruktur ist eine nichtlineare Datenstruktur, da sie Daten nicht sequentiell speichert. Es handelt sich um eine hierarchische Struktur, da Elemente in einem Baum auf mehreren Ebenen angeordnet sind und die Form von Knoten haben. Knoten können beliebige Datentypen enthalten. Im Fall von Pyautocad muss ich Zeichenfolgen, Ganzzahlen, Gleitkommazahlen usw. abrufen.

Jeder Knoten enthält einige Daten und die Verknüpfung oder Referenz anderer Knoten. Diese zugeordneten Knoten sind Eltern- oder Kindknoten, je nach ihrer Position in der baumförmigen Datenhierarchie.

Baum
Abbildung 1: Baumdatenstruktur

Wie in der obigen Abbildung dargestellt, ist Knoten A beispielsweise der Wurzelknoten. Der Wurzelknoten ist der obere Knoten im Baum und repräsentiert den ersten Knoten im Baum. In diesem Fall hat der Wurzelknoten A drei (3) Kindknoten: B, F und J. Mit anderen Worten, Knoten A ist ein Elternknoten für diese Knoten.

Das Organisieren von AutoCAD-Objekten in einer solchen baumförmigen hierarchischen Datenstruktur unterstützt die Speicherung, Wartung, Verfolgung und Bearbeitung von Daten.

Anwenden von Baumdatenstrukturen beim Arbeiten mit pyautocad in Python

Manchmal müssen wir beim Erstellen oder Bearbeiten von Zeichnungen Daten miteinander verknüpfen. Betrachten wir zum Beispiel ein Beispiel, in dem ich einen kleinen Betonbodenrahmen entwerfe, der Balken und Stützen enthält.

Ich könnte jedes Objekt als separaten Knoten speichern. In dem unten angezeigten Codierungsbeispiel erstelle ich einen Knoten namens Column mit 4 untergeordneten Elementen. Diese untergeordneten Elemente enthalten die Daten eines strukturellen AutoCAD-Elements als jeweils eigene untergeordnete Elemente.

    column = TreeNode("Column")

    c1 = TreeNode("Column1")
    c2 = TreeNode("Column2")
    c3 = TreeNode("Column3")
    c4 = TreeNode("Column4")

    column.add_child(c1)
    column.add_child(c2)
    column.add_child(c3)
    column.add_child(c4)   

    c1.add_child(TreeNode(acad.model.AddPolyline(aDouble(0, 0, 0, 100, 0, 0, 100, 100, 0, 0, 100, 0, 0, 0, 0))))
    c2.add_child(TreeNode(acad.model.AddPolyline(aDouble(500, 0, 0, 600, 0, 0, 600, 100, 0, 500, 100, 0, 500, 0, 0))))
    c3.add_child(TreeNode(acad.model.AddPolyline(aDouble(500, 500, 0, 600, 500, 0, 600, 600, 0, 500, 600, 0, 500, 500, 0))))
    c4.add_child(TreeNode(acad.model.AddPolyline(aDouble(0, 500, 0, 100, 500, 0, 100, 600, 0, 0, 600, 0, 0, 500, 0))))

Der obige Datenbaum strukturiert die Stützenelemente, die erstellt und der AutoCAD-Zeichnung hinzugefügt wurden. Die Elemente werden mit pyautocad erstellt und hinzugefügt, einem Modul für die Skripterstellung von AutoCAD-Workflows in Python . Ich kann Balkenelemente auf die gleiche Weise strukturieren. Auf diese Weise kombiniere ich beides zu einer baumförmigen Gesamtdatenstruktur, die die Daten für das gesamte Gebäude organisiert und speichert.

Für dieses Beispiel fahre ich fort, indem ich eine Knotenmethode zum Drucken des Inhalts eines Knotens und seiner Kinder implementiere. Die Methode kann für den Wurzelknoten aufgerufen werden. Das Verfahren druckt außerdem auch den Oberflächenbereich, der jedem Kindknoteninhalt, Träger oder Stütze zugeordnet ist. Hier ist der Code dafür:

def print_tree(self):
        space = "   " * self.get_level()
        prefix = space + "|--" if self.parent else ""
        print(prefix, end="")
        try:
            print("Area = " +  str(round(self.data.Area,2)))
        except:
            print(self.data)
        if self.children:
            for child in self.children:
                child.print_tree()  

In diesem Beispiel arbeite ich mit dem strukturellen AutoCAD-Framework, das in der folgenden Abbildung dargestellt ist.

Abbildung 2.1: Strukturelles Framework mit Pyautocad

Für dieses Beispiel hat die Methode „print_tree“ die folgende Ausgabe erstellt:

Abbildung 2.2: Ausgabe für den in Python mit pyautocad erstellten Datenbaum

Vorteile der Verwendung der Baumdatenstruktur beim Arbeiten mit Pyautocad

Aufgrund einiger technischer Probleme oder aufgrund der Notwendigkeit des strukturellen Designs kann es erforderlich sein, die Abmessungen einer Struktur zu ändern. In einem solchen Fall sind einige miteinander verbundene Mitglieder betroffen. Daher müssen die Abmessungen für diese Elemente entsprechend angepasst werden. Um großen manuellen Aufwand zu vermeiden, kann ich einfach die Abmessungen eines Mitglieds anpassen und andere Mitglieder werden entsprechend geändert.

Dies kann durch die Verwendung einer Kombination aus einem Datenbaum und einer verketteten Liste erreicht werden. Wenn ich beispielsweise die Dimension eines Objekts ändere, kann ich in der verknüpften Liste nach der Dimensionseigenschaft dieses bestimmten Objekts suchen. Dieses Objekt muss auch mit den Verbindungsobjekten verknüpft werden, die aufgrund von Änderungen an den Abmessungen des Verbindungselements automatisch weiter modifiziert werden können. Auf diese Weise kann ich die Hierarchie der Objekte beibehalten und sie auch miteinander verknüpfen.

Ein weiterer Anwendungsfall betrifft die Blockchain, dh wir können den Ort zurückverfolgen, an dem die Änderungen vorgenommen wurden, wenn wir die in jedem Knoten gespeicherten Daten hashen. Oder wir können das gesamte Dokument hashen und die daran vorgenommenen Änderungen nachverfolgen.

Je nach Branche, Domäne oder Arbeit, die in AutoCAD ausgeführt wird, kann es mehrere solcher Anwendungsfälle geben. Weitere Informationen zu AutoCAD finden Sie auch in der offiziellen Dokumentation zu AutoCAD.

You May Also Like

Leave a Reply

Leave a Reply

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.