Hachurar objetos no modelo do AutoCAD usando pywin32 (Python)

Em nossos posts anteriores, discutimos como criar objetos 2D e 3D e brincar com suas propriedades.

Agora, nesta postagem do blog, vamos aprender como hachurar objetos usando pywin32 no modelo do AutoCAD.

Configurando o ambiente usando o módulo pywin32

Antes de tudo, vamos configurar nosso ambiente de trabalho para integrar python e AutoCAD usando o módulo pywin32 e importar alguns pacotes.

import win32com.client
import pythoncom
import math


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

Criando construtores necessários usando pywin32 e pythoncom

Ao lidar com objetos de hachura no AutoCAD usando python, precisamos de certos tipos de uma matriz de tipos de dados específicos.

Para hachurar um objeto, precisamos criar um loop. Esse loop é um grupo de objetos de desenho resultando em uma área fechada.

Pode haver vários desses objetos que podem ser passados para essa matriz de loops. Portanto, conforme a documentação do AutoCAD, precisamos de uma matriz de “Variantes” para criar esse loop.

Aqui, usaremos o tipo de dados VT_DISPATCH para buscar os objetos de desenho do modelo do AutoCAD.

Além disso, precisamos de outros construtores como A Point e Double para desenhar objetos. Discutimos o mesmo em nossos posts anteriores.

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

Criando loop de objetos no AutoCAD

Agora, precisamos criar um espaço fechado usando um ou vários objetos de desenho e converter o mesmo em um loop.

Essa matriz pode conter um ou mais objetos de desenho que formam um espaço fechado.

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)

Criando objeto de hachura e anexando a hachura

Agora que criamos o objeto fechado a ser hachurado, criaremos um objeto hachurado para adicioná-lo ao loop fechado.

Para criar um objeto de hachura, precisamos do comando AddHatch com a seguinte sintaxe:

object.AddHatch(PatternType, PatternName, Associativity)

Aqui, os Tipos de Padrão são 0 para tipos de hachura predefinidos, 1 para o padrão de linhas usando o tipo de linha atual e 2 para o nome do padrão de um arquivo PAT diferente do arquivo acad.pat.

No local do nome do padrão do parâmetro, podemos passar o nome do padrão conforme fornecido pelo AutoCAD ou conforme os nomes de padrão personalizados.

A associatividade conterá um valor booleano para especificar se a hachura é associativa ou não associativa. Ele só pode ser definido durante a criação do objeto de hachura.

Uma hachura associativa é atualizada quando seus limites são modificados. Uma hachura não associativa não é atualizada quando seus limites são modificados.

Vamos criar o objeto de hachura agora.

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

Agora para adicionar esta hachura ao loop que criamos, usaremos o método AppendOuterLoop.

hatch.AppendOuterLoop(outer)
Figura 1: Hachura o loop fechado usando pywin32 no modelo do AutoCAD

Propriedades do objeto de hachura do AutoCAD em Python

Como sabemos sobre outros objetos do AutoCAD, usando métodos diferentes, podemos buscar ou alterar as propriedades dos objetos de hachura também.

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

Agora, vamos alterar a escala do padrão para 10.

hatch.PatternScale = 10
Figura 2: Escala de padrão alterada usando pywin32

Adicionando loop interno ao loop de objeto do AutoCAD hachurado

Se quisermos que a hachura esteja ao redor do objeto interno, temos que fazer o trabalho inverso que estamos fazendo aqui.

Nós chocamos um objeto externo. Agora vamos adicionar um objeto interno que não quero chocar.

Da mesma forma, podemos adicionar vários loops internos à área hachurada, um por um.

in_loop = []
in_loop.append(acadModel.AddCircle(APoint(250, 250, 0), 100))
inner = variants(in_loop)
hatch.AppendInnerLoop(inner)
Figura 3: Adicionado um loop interno dentro da área hachurada
usando pywin32

Agora, vamos verificar a área hachurada após adicionar este loop interno.

print(round(hatch.Area,2))

O/p:
1361283.16

Como podemos ver na saída do código e na Figura 3, a área foi reduzida em 31.415,92 (área do círculo) desde que adicionamos o loop interno à área hachurada existente.

Leave a Reply

Deixe um comentário

O seu endereço de e-mail não será publicado.

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.

Close

Meta