Sombreado de objetos en AutoCAD con pywin32

En nuestras publicaciones de blog anteriores, hemos discutido cómo crear objetos 2D y 3D y jugar con sus propiedades.

Ahora, en esta publicación de blog, vamos a aprender cómo sombrear objetos usando pywin32 en la plantilla de AutoCAD.

Configuración del entorno usando el módulo pywin32

En primer lugar, configuraremos nuestro entorno de trabajo para integrar python y AutoCAD utilizando el módulo pywin32 e importar algunos paquetes.

import win32com.client
import pythoncom
import math

acad = win32com.client.Dispatch("AutoCAD.Application")
acadModel = acad.ActiveDocument.ModelSpace 

Creando los constructores necesarios usando pywin32 y pythoncom

Al tratar con objetos sombreados en AutoCAD usando python, necesitamos ciertos tipos de una matriz de tipos de datos específicos.

Para tramar un objeto, necesitamos crear un bucle. Ese bucle es un grupo de objetos de dibujo que dan como resultado un área cerrada.

Puede haber múltiples objetos de este tipo que se pueden pasar a esta matriz de bucles. Por lo tanto, según la documentación de AutoCAD, necesitamos una serie de «Variantes» para crear este bucle.

Aquí, usaremos el tipo de datos VT_DISPATCH para obtener los objetos de dibujo de la plantilla de AutoCAD.

Además, necesitamos otros constructores como APoint y Double para dibujar objetos. Hemos discutido lo mismo en nuestros blogs anteriores.

def variants(object):
    return win32com.client.VARIANT(pythoncom.VT_ARRAY | pythoncom.VT_DISPATCH, (object))

Creación de bucle de objetos en AutoCAD

Ahora, necesitamos crear un espacio cerrado usando uno o varios objetos de dibujo y convertirlo en un bucle.

Esta matriz puede contener uno o más objetos de dibujo que forman un espacio cerrado.

out_loop = []
sq = acadModel.AddPolyline(ADouble([0,0,0,1000,0,0,1000,1000,0,0,1000,0]))
arc = acadModel.AddArc(APoint(0, 500, 0), 500, 90*pi/180, 270*pi/180)

out_loop.append(sq)
out_loop.append(arc)

outer = variants(out_loop)

Crear un objeto de sombreado y agregar el sombreado

Ahora que hemos creado el objeto cerrado para sombrear, crearemos un objeto de sombreado para agregarlo al bucle cerrado.

Para crear un objeto de sombreado, necesitamos el comando AddHatch con la siguiente sintaxis:

objeto.AddHatch( PatternType, PatternName, Asociativity )

Aquí, los tipos de patrón son 0 para tipos de sombreado predefinidos, 1 para el patrón de líneas que utilizan el tipo de línea actual y 2 para el nombre de patrón de un archivo PAT que no sea el  archivo acad.pat  .

En el lugar del nombre del patrón del parámetro, podemos pasar el nombre del patrón proporcionado por AutoCAD o según los nombres de patrones personalizados.

La asociatividad contendrá un valor booleano para especificar si el sombreado es asociativo o no asociativo. Solo se puede configurar al crear el objeto de sombreado.

Un sombreado asociativo se actualiza cuando se modifican sus límites. Un sombreado no asociativo no se actualiza cuando se modifican sus límites.

Vamos a crear el objeto sombreado ahora.

hatch = acadModel.AddHatch(0, "ANSI37", True)

Ahora, para agregar este sombreado al bucle que hemos creado, usaremos el método AppendOuterLoop.

hatch.AppendOuterLoop(outer)
Figura 1: Sombreado del ciclo cerrado usando pywin32 en la plantilla de AutoCAD

Propiedades del objeto de sombreado de AutoCAD en Python

Como sabemos acerca de otros objetos de AutoCAD, utilizando diferentes métodos también podemos obtener o cambiar las propiedades de los objetos de sombreado.

print(hatch.HatchStyle)
print(hatch.PatternName)
print(hatch.AssociativeHatch)

print(round(hatch.Area,2))
print(hatch.PatternAngle)
print(hatch.PatternDouble)
print(hatch.PatternScale)
print(hatch.PatternSpace)
print(hatch.PatternType)
print(hatch.NumberOfLoops)

O/p:
0
ANSI37
True

1392699.08
0.0
False
1.0
1.0
1
1

Ahora, cambiemos la escala del patrón a 10.

hatch.PatternScale = 10
Figura 2: Escala de patrón modificada usando pywin32

Agregar bucle interno al bucle de objeto de AutoCAD sombreado

Si queremos que la escotilla esté ahí alrededor del objeto interior, tenemos que hacer el trabajo inverso al que estamos haciendo aquí.

Hemos tramado un objeto exterior. Ahora agregaremos un objeto interno que no quiero tramar.

De manera similar, podemos agregar múltiples bucles internos de este tipo al área sombreada uno por uno.

in_loop = []
in_loop.append(acadModel.AddCircle(APoint(250, 250, 0), 100))
inner = variants(in_loop)
hatch.AppendInnerLoop(inner)
Figura 3: Se agregó un bucle interno dentro del área sombreada usando pywin32

Ahora, revisemos el área sombreada después de agregar este bucle interno.

print(round(hatch.Area,2))

O/p:
1361283.16

Como podemos ver en el resultado del código y en la Figura 3, el área se ha reducido en 31415,92 (área del círculo) desde que agregamos el bucle interno al área sombreada existente.

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.