Estructura de árbol para AutoCAD (Python)

En una de mis publicaciones de blog anteriores, discutí cómo podemos usar listas y diccionarios para almacenar los objetos de AutoCAD creados. En esta publicación quiero presentar algunas estructuras de datos más eficientes que podemos usar para organizar objetos de AutoCAD de acuerdo con sus propiedades. Uno de ellos es una estructura de datos de árbol.

Estructura de datos de árbol para organizar objetos de AutoCAD

Una estructura de datos de árbol es una estructura de datos no lineal porque no almacena datos de manera secuencial. Es una estructura jerárquica ya que los elementos de un árbol se organizan en varios niveles y adoptan la forma de nodos. Los nodos pueden contener cualquier tipo de datos. En el caso de pyautocad, tendré que buscar cadenas, enteros, flotantes, etc.

Cada nodo contiene unos datos y el enlace o referencia de otros nodos. Estos nodos asociados son nodos principales o secundarios, según su posición en la jerarquía de datos en forma de árbol.

Árbol
Figura 1: estructura de datos de árbol

Por ejemplo, como se ilustra en la figura anterior, el nodo A es el nodo raíz. El nodo raíz es el nodo superior del árbol y representa el primer nodo del árbol. En este caso, el nodo raíz A tiene tres (3) nodos secundarios: B, F y J. En otras palabras, el nodo A es un nodo principal de estos nodos.

La organización de objetos de AutoCAD en una estructura de datos jerárquica con forma de árbol ayuda al almacenamiento, mantenimiento, seguimiento y manipulación de datos.

Aplicar estructuras de datos de árbol cuando se trabaja con pyautocad en Python

A veces necesitamos interconectar datos mientras creamos o editamos dibujos. Por ejemplo, consideremos un ejemplo en el que estoy diseñando un pequeño marco de piso de concreto que contiene vigas y columnas.

Podría almacenar cada objeto como un nodo separado. En el ejemplo de codificación que se muestra a continuación, creo un nodo llamado Columna, que tiene 4 hijos. Estos hijos contienen los datos de un elemento estructural de AutoCAD como sus propios hijos respectivos.

    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))))

El árbol de datos anterior estructura los elementos de columna que se crearon y agregaron al dibujo de AutoCAD. Los elementos se crean y agregan con pyautocad, un módulo para secuencias de comandos de flujos de trabajo de AutoCAD en Python . Puedo estructurar elementos de vigas de la misma manera. De esa manera, combino ambos en una estructura de datos general en forma de árbol que organiza y almacena los datos de todo el edificio.

Para este ejemplo, procedo implementando un método de nodo para imprimir el contenido de un nodo y sus hijos. El método se puede llamar para el nodo raíz. Además, el método también imprimirá el área de superficie asociada con cada contenido, viga o columna de nodo secundario. Aquí está el código para esto:

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()  

En este ejemplo, trabajo con el marco estructural de AutoCAD que se muestra en la siguiente figura.

Figura 2.1: Marco estructural usando pyautocad

Para este ejemplo, el método «print_tree» creó el siguiente resultado:

Figura 2.2: Salida del árbol de datos creado en Python usando pyautocad

Ventajas de usar la estructura de datos de árbol mientras se trabaja con pyautocad

Debido a algunos problemas técnicos o debido a la necesidad de diseño estructural, es posible que deba cambiar las dimensiones de una estructura. En tal caso, algunos miembros interconectados se verán afectados. Por lo tanto, las dimensiones de estos miembros deben ajustarse en consecuencia. Para evitar un gran esfuerzo manual, simplemente puedo ajustar las dimensiones de un miembro y otros miembros se cambiarán en consecuencia.

Esto se puede lograr usando una combinación de un árbol de datos y una lista enlazada. Por ejemplo, si cambio la dimensión de un objeto, puedo buscar la propiedad de dimensión de ese objeto en particular en la lista vinculada. Este objeto también debe vincularse con los objetos de conexión, que pueden modificarse automáticamente en función de los cambios realizados con las dimensiones del elemento de conexión. De esta manera, puedo mantener la jerarquía de los objetos y también vincularlos entre sí.

Otro caso de uso es en términos de blockchain, es decir, podemos rastrear el lugar donde se han realizado los cambios si hacemos un hash de los datos almacenados en cada nodo. O podemos codificar todo el documento y rastrear los cambios realizados en el mismo.

Puede haber múltiples casos de uso de este tipo según la industria, el dominio o el trabajo realizado en AutoCAD. Para obtener más información sobre AutoCAD, también puede consultar la documentación oficial de AutoCAD.

You May Also Like

Leave a Reply

Leave a Reply

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.