En una publicación anterior ya presenté los conceptos básicos de AutoCAD y varios comandos de AutoCAD. Por ejemplo, he introducido AutoCAD LINE, AutoCAD MLINE, AutoCAD PLINE, AutoCAD XLINE, AutoCAD CIRCLE, AutoCAD RECTANG, AutoCAD OFFSET y muchos más. Se proporciona una descripción general completa en la pestaña AutoCAD de este blog, o como parte de mis tutoriales de AutoCAD.
En esta publicación quiero presentar un módulo disponible en Python para automatizar la creación de dibujos en AutoCAD. El módulo se llama pyautocad. Es compatible con pip install para una fácil instalación. El módulo pyautocad también le permitirá ajustar el dibujo existente, p. Ej. manipular objetos en el dibujo.
pyautocad reconoce el dibujo de AutoCAD actualmente abierto y también reconoce el espacio modelo actualmente activo. Antes de ejecutar el código de Python a continuación, abro un nuevo dibujo de AutoCAD.
Luego importo pyautocad. Creo una instancia de AutoCAD usando pyautocad.
# importando pyautocad import pyautocad # creando instancia de AutoCAD acad = pyautocad.Autocad()
Comprobemos que pyautocad realmente reconoce el dibujo de AutoCAD activo actualmente:
# imprimir el nombre del documento actualmente reconocido como activo en AutoCAD print(acad.doc.Name)
Drawing1.dwg
A continuación, puedo, por ejemplo, crea un círculo en el plano 2D.
# especificar las coordenadas xey del punto central del círculo from pyautocad import APoint point1 = APoint(100.0,100.0) # x and y coordinates of points # agregar círculo al dibujo circle1 = acad.model.AddCircle(point1,100)
Se ha agregado el siguiente círculo a mi dibujo de AutoCAD:
El cambio de color del círculo también es posible con pyautocad. Lo hago en el siguiente código:
# cambiar el color del círculo a rojo circle1.Color = 10 # 10 is a red color
El resultado en mi dibujo al ejecutar el código Python se ve así:
Los números de índice de color se pueden encontrar en AutoCAD. Vea la captura de pantalla a continuación.
También puedo verificar otros valores de propiedad actuales para el círculo que acabo de agregar al dibujo. A continuación se muestran algunos ejemplos:
# comprobar la asignación de capas print("current layer: " + str(circle1.Layer)) # comprobar el tipo de línea actual print("current linetype: " + str(circle1.Linetype)) # comprobar la escala del tipo de línea print("current linetype scale: " + str(circle1.LinetypeScale)) # comprobar el peso de la línea actual print("current line weight: " + str(circle1.Lineweight)) # comprobar el espesor actual print("current thickness: " + str(circle1.Thickness)) # comprobar el material actual print("current material:" + str(circle1.Material))
current layer: 0 current linetype: ByLayer current linetype scale: 1.0 current line weight: -1 current thickness: 0.0 current material:ByLayer
Puedo usar el comando PROPIEDADES de AutoCAD en AutoCAD para comprender los atributos de propiedad que puede tener un objeto:
Puedo usar los atributos de propiedad de p. Ej. el objeto circular para realizar ajustes. Por ejemplo, tengo la capa «círculos» a la que quiero asignar el círculo. Puedo hacer esto usando pyautocad:
circle1.Layer = "circles"
Ahora también podría ajustar la configuración de color para el objeto de círculo, de modo que el color sea especificado por la capa; el índice para esto es el número de índice de color 256:
circle1.Color = 256
A continuación, ve el resultado en AutoCAD:
Ahora creo dos círculos adicionales dentro de mi dibujo, usando pyautocad. Luego utilizo el método pyautocad iter_objects para recorrer todos los objetos en el dibujo, demostrando la opción de hacerlo si es necesario:
# agregar dos círculos al dibujo circle2 = acad.model.AddCircle(APoint(200.0,200.0),100) circle3 = acad.model.AddCircle(APoint(300.0,300.0),100) # recorriendo todos los objetos for obj in acad.iter_objects(): print(obj)
<POINTER(IAcadCircle) ptr=0x223f8ed65f8 at 223faa5c848> <POINTER(IAcadCircle) ptr=0x223f8ed6358 at 223faa5ca48> <POINTER(IAcadCircle) ptr=0x223f89ede28 at 223faa5c148>
Así es como se ve el resultado en mi dibujo de AutoCAD:
Esto completa mi introducción al trabajo con AutoCAD en Python, usando pyautocad. Para comprender mejor AutoCAD, me refiero a mis otros entrenamientos de AutoCAD y recomiendo verificar la documentación de pyautocad.
Puede encontrar algunos ejemplos más sobre el uso de pyautocad en Youtube. P.ej. Encontré un ejemplo más detallado aquí: https://www.youtube.com/watch?v=AwDL8p2OG-c&t=20s
Ingeniero industrial especializado en optimización y simulación (R, Python, SQL, VBA)
5 comments
Gracias excelente material
Ingeniero, agradecere mucho ayudarme, dibujar una linea indicando el punto de inicio y fin en pantalla de autocad, todo por su puesto desde python
Usted tiene un script que nosotros podems mejorar por usted?
Linnart, dibujar desde python una linea en autocad, de modo que el punto de inicio y punto final se ingresen con el mous en pantalla de autocad
tengo un problema, puedo hacer un Código que abra el archivo cad que quiero pero no me deja interactuar con el, no puedo crear dibujos ni nada, hay que hacer algún tipo de configuración o dar permisos de algo? ya instale pyautocad y aún así no sirve, cada vez que intento dibujar me da múltiples errores, estoy creando el código en Visual Studio Code y esto son los errores Traceback (most recent call last):
File «c:\Users\Dibujo1\Desktop\prueba para archivo de CAD.py», line 6, in
print(acad.doc.Name)
File «C:\Users\Dibujo1\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\pyautocad\api.py», line 74, in doc
return self.app.ActiveDocument
File «C:\Users\Dibujo1\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\pyautocad\api.py», line 63, in app
self._app = comtypes.client.GetActiveObject(‘AutoCAD.Application’, dynamic=True)
File «C:\Users\Dibujo1\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\comtypes\client\__init__.py», line 185, in GetActiveObject
obj = comtypes.GetActiveObject(clsid, interface=interface)
File «C:\Users\Dibujo1\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\comtypes\__init__.py», line 994, in GetActiveObject
oledll.oleaut32.GetActiveObject(byref(clsid), None, byref(p))
File «_ctypes/callproc.c», line 993, in GetResult
OSError: [WinError -2147221021] Operation unavailable
PS C:\Users\Dibujo1>