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.
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)))
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))
É 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.
Leave a Reply