Objeto de documento de AutoCAD

En mi artículo anterior hablé de la clase de objeto de la aplicación de AutoCAD . La parte más importante de cualquier aplicación de AutoCAD es el objeto Documento. Esto se debe a que los usuarios realizan todas sus acciones en este objeto Documento. En consecuencia, estoy escribiendo esta nueva publicación de blog, que cubre la clase de objeto Documento de AutoCAD.

El módulo pyautcad y sus alternativas

En primer lugar, permítanme mencionar los módulos que voy a utilizar y qué otras opciones están disponibles.

Como habrás adivinado por el título de este artículo, estoy usando el módulo pyautocad para este tutorial. Además, para poder acceder al documento en sí, estoy usando acad.doc. Verá esto en el siguiente código:

from pyautocad import Autocad, APoint, aDouble

acad = Autocad(create_if_not_exists=True)

print(acad.doc.Name)

O/p:
Drawing1.dwg

Sin embargo, también puedo usar módulos de comunicación. Es decir, otros módulos además de pyautocad. En el siguiente ejemplo, uso pythoncom y win32com , los llamados módulos de comunicación, para acceder a la clase de objeto Documento de AutoCAD.

from win32com.client import *
import pythoncom
import win32com

acad1 = win32com.client.Dispatch("AutoCAD.Application")
print(acad1.ActiveDocument.Name)

O/p:
Drawing1.dwg

Propiedades de la clase de objeto Documento de AutoCAD

Para comenzar con este tema, presento algunas propiedades importantes del objeto Documento de AutoCAD. Considero que estas propiedades son importantes porque se pueden usar para varios fines de automatización.

Por ejemplo, AutoCAD trabaja con un documento a la vez. Un objeto de documento de AutoCAD contiene muchos objetos, como capas, diseños, estilos de cota, ventana gráfica, UCS y otros tipos de objetos. Entre estos objetos, solo uno puede estar activo en un momento dado.

Por ejemplo, un objeto Documento puede contener n número de capas. Sin embargo, solo una de estas capas puede estar activa a la vez.

Para verificar si el documento presente es realmente el documento actualmente activo, puedo usar el método Activo. Este método devuelve un valor booleano. Puedes ver esto en el siguiente ejemplo:

# determine if the document is the active document
print(acad.doc.Active)

O/p:
True

De manera similar, para verificar otros subobjetos activos, puedo usar los métodos con nombres de métodos en el formato Active<ObjectName>. Algunos ejemplos podrían ser ActiveLayout, ActiveLayer, ActiveViewport, etc.

Los nombres de objetos que se pueden utilizar se enumeran a continuación:

  • DimStyle
  • Capa
  • Diseño
  • Tipo de línea
  • Material
  • PViewport
  • SelecciónConjunto
  • Espacio
  • Estilo de texto
  • UCS
  • vista

Mostraré cómo se pueden usar algunos de estos objetos.

print(acad.doc.ActiveDimStyle.Name)
print(acad.doc.ActiveLayer.Name)
print(acad.doc.ActiveLayout.Name)

O/p:
ISO-25
0
Model
Documentación de la clase de objeto del documento de AutoCAD, figura 1.1: ActiveDimStyle
ActiveDimStyle
Documentación de la clase de objeto de documento de AutoCAD, figura 1.2: ActiveLayer
Capa activa
Documentación de clase de objeto de documento de AutoCAD, figura 1.3: ActiveLayout
ActiveLayout

De la misma manera, puedo usar otras propiedades también. Estas propiedades devuelven los objetos respectivos que pueden tratarse más adelante. Publicaré artículos más detallados sobre esto en el futuro.

Acceso a la propiedad Bloques del objeto Documento de AutoCAD

Avanzando, para obtener los objetos Blocks que están contenidos en el objeto Document, puedo usar la propiedad Blocks. Esto devuelve una colección de los diversos objetos de bloque de AutoCAD que están presentes en el objeto de documento de AutoCAD.

print(acad.doc.Blocks)
for i in (acad.doc.Blocks):
    print(i.Name)

O/p:
<comtypes.client.lazybind.Dispatch object at 0x00000209E60C1D60>
*Model_Space
*Paper_Space
*Paper_Space

Si quiero devolver la base de datos a la que pertenece el objeto, puedo usar el objeto Base de datos. En pocas palabras, esto devuelve el objeto de la base de datos. No tiene ningún atributo de nombre.

acad.doc.Database

O/p:

<comtypes.client.lazybind.Dispatch object at 0x0000024FA64175B0>

Subobjetos contenidos en el objeto Documento de AutoCAD

Anteriormente mencioné que un objeto de documento de AutoCAD contiene varios subobjetos. Estos objetos están presentes en forma de su propio tipo específico de objetos, por ejemplo, capas, materiales, tipos de línea, etc.

Para señalar las colecciones, simplemente puedo usar los métodos con sus propios nombres. Y si quiero acceder a cada uno de los objetos presentes dentro de la colección, entonces puedo iterar sobre el mismo. De manera similar a como lo hice en el caso de Blocks.

La lista de colecciones de objetos se proporciona a continuación:

  • Diccionarios
  • DimStyles
  • Capas
  • Diseños
  • tipos de línea
  • Materiales
  • ModeloEspacio
  • PapelEspacio
  • Configuraciones de parcela
  • Aplicaciones registradas
  • SelecciónConjuntos
  • Estilos de texto
  • Sistemas de coordenadas de usuario
  • ventanas gráficas
  • Puntos de vista

Ahora que he enumerado todas las colecciones de objetos, permítanme presentarles un ejemplo de cómo usar estos métodos.

print(acad.doc.DimStyles)
for i in (acad.doc.DimStyles):
    print(i.Name)

O/p:
<comtypes.client.lazybind.Dispatch object at 0x00000209F4F11D00>
Standard
Annotative
ISO-25

De la misma manera, también se pueden obtener otras propiedades importantes como se indica en el código a continuación.

# height of document window
print(acad.doc.Height)

# width of document window
print(acad.doc.Width)

# lower Left to Upper Right Limits
print(acad.doc.Limits)

# return a boolean value for ObjectSnapMode to check if it is on/off
print(acad.doc.ObjectSnapMode)

# path of Document
print(acad.doc.Path)

# return if Document is ReadOnly/Read-Write using boolean value
print(acad.doc.ReadOnly)

# check if document contains any unsaved changes using boolean value
print(acad.doc.Saved)

# returns SummaryInfo objects which contains document metadata (Title, subject, author, keywords)
print(acad.doc.SummaryInfo)

# returns if window is Minimized, Maximized or in a Normal state
print(acad.doc.WindowState)

# returns the document title
print(acad.doc.WindowTitle)

O/p:

818
1517
(0.0, 0.0, 420.0, 297.0)
False
C:\Users\91998\OneDrive\Documents
False
False
<comtypes.client.lazybind.Dispatch object at 0x000001C227C460D0>
3
Drawing1.dwg

Métodos de la clase de objeto Documento en AutoCAD

Ahora que he cubierto las diversas propiedades del objeto Documento de AutoCAD, avanzaré a algunos de los métodos importantes de la clase Documento de AutoCAD.

De hecho, el primer método del que hablo es el método Activate(). Para activar cualquier documento puedo utilizar este método.

acad.doc.Activate

A partir de entonces, para evaluar la integridad de cualquier dibujo, puedo usar el método AuditInfo(). Aquí, puedo pasar verdadero o falso como parámetros para determinar si quiero o no que AutoCAD solucione los problemas que encuentre.

acad.doc.AuditInfo(True)

Ciertamente, también hay algunos métodos para regenerar, guardar y cerrar.

# regenerate drawing
acad.doc.Regen

# save drawing
acad.doc.Save

# while closing pass boolean to save changes or not followed by drawing name
acad.doc.Close(False, "Drawing2.dwg")3

Finalmente, para eliminar referencias con nombre no utilizadas como bloques o capas del documento, puedo usar el comando PurgeAll.

acad.doc.PurgeAll

Resumen y observaciones finales

Finalmente, concluyo lo siguiente: Usando los métodos de la clase Documento de AutoCAD documentados en este artículo, puedo automatizar diferentes tareas relacionadas con el objeto Documento. Esto se puede aplicar para automatizar y optimizar los flujos de trabajo relacionados con AutoCAD.

Por último, en caso de dudas, no dude en comentar a continuación en la sección de comentarios. También estoy abierto a consultas técnicas para lo cual puedes contactarme a través de nuestro formulario de contacto . Consulte mis otros blogs que cubren varios aspectos de los módulos Python pyautocadpywin32 para la automatización de AutoCAD .

Referencias a la documentación de automatización de AutoCAD relacionada

Y ahora, una lista de enlaces a varias publicaciones de automatización de AutoCAD publicadas por mí en este blog:

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.