Objeto de região no AutoCAD com Python

Neste post eu mostro como criar e manipular qualquer objeto de região no AutoCAD com pyautocad. Farei isso usando o método AddRegion() em pyautocad. pyautocad é um dos vários módulos Python para AutoCAD. Eu já abordei extensivamente os scripts do AutoCAD em Python neste blog.

Objeto de região no AutoCAD

O objeto de região do AutoCAD representa áreas fechadas em 2D. Os objetos de região do AutoCAD podem ser polilinhas, círculos, arcos, splines, retângulos etc., desde que estejam conectados e, assim,
formem uma entidade fechada.

Os objetos de região do AutoCAD podem ser combinados e usados como regiões únicas. Isso pode ser feito utilizando alguns métodos. Isso inclui métodos como União, Interseção ou Subtração.

Coletivamente, esses métodos são chamados de métodos booleanos do AutoCAD.

Criando um objeto de região no AutoCAD (win32com etc.)

Não é possível criar um objeto de região no AutoCAD usando pyautocad. Isso se deve a algumas limitações do módulo. Portanto, neste artigo, usarei o método AddRegion() usando os módulos Python win32com e pythoncom.

Na figura abaixo, mostro um objeto de polilinha do AutoCAD fechado com um círculo sobreposto.

Creating a region object in AutoCAD

Eu criei os objetos na figura acima usando o código abaixo:

 # polilinha fechada
pl1 = acad.AddPolyline(ad(0,0,0,1000,0,0,1000,500,0,750,500,0,750,1000,0,250,1000,0,250,500,0,0,500,0,0,0,0))

# círculo
c1 = acad.AddCircle(ap(500, 1000, 0), 250)

Agora, para criar uma região, eu devo passar uma matriz de objetos AutoCAD incluídos para o método AddRegion(). Faço isso abaixo:

# sintaxe:
#object.AddRegion(array_of_enclosed_objects)
#Aqui o objeto pode ser Block, ModelSpace ou PaperSpace

acad.AddRegion(win32com.client.VARIANT(VT_ARRAY | VT_DISPATCH, (pl1, c1)))
Adjusting region object in AutoCAD

Aqui eu posso ver que o objeto é convertido em uma região. O mesmo vale para a polilinha. A região objeto do original.

Executando operações booleanas em objetos de região

As operações booleanas podem ser executadas em sólidos 3D, bem como em objetos da região do AutoCAD.

Para usar o objeto de região, preciso buscar o mesmo do modelo do AutoCAD usando a iteração. Isso ocorre porque o método AddRegion() não retorna nada além de uma matriz de objetos do AutoCAD.

No exemplo de codificação Python mostrado abaixo, uso um dicionário para salvar objetos de região do AutoCAD que crio.

regions = {}
i=0
for l in acad1.iter_objects_fast(object_name_or_list="Region"):
    print(str(l.ObjectID) + ": " + l.ObjectName)
    key = "reg" + str(i)
    regions[key] = l
    i+=1

Como mencionado por mim anteriormente neste post, posso realizar três tipos de operações booleanas para criar uma única união de regiões:

  • União (0)
  • Cruzamento (1)
  • Subtração (2).

Usarei os números mencionados entre colchetes dos métodos listados acima como parâmetros de entrada. Ao chamar o método Boolean(), eles declaram o tipo de operação booleana que eu quero executar. Ao mesmo
tempo, vou mover o objeto de região para a direita. Isso tornará a diferença mais clara.

# syntax:
#object1.Boolean(operation_id, object2)
# aqui os objetos podem ser 3DSolids ou Regiões

regions["reg1"].Boolean(2, regions["reg0"])

for l in acad1.iter_objects_fast(object_name_or_list="Region"):
    print(str(l.ObjectID) + ": " + l.ObjectName)
    l.Move(APoint(0, 0, 0), APoint(1500, 0, 0))
Final step of adjusting region object in AutoCAD

É claro que o novo objeto é criado como uma única região unificada de suas regiões pai.

Considerações finais e conteúdo relacionado

Para mais postagens de blog sobre a automação do AutoCAD, verifique minhas outras postagens de blog relacionadas ao pyautocad e ao pywin32. Por favor, deixe qualquer dúvida que você possa ter como um comentário abaixo. Sinta-se à vontade para entrar em contato comigo para qualquer assistência técnica. Pode fazê-lo através do nosso formulário de contacto.

You May Also Like

Leave a Reply

Leave a Reply

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

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