前段时间遇到了这样一个问题:AutoCAD模型文件导入HFSS进行电磁仿真时,圆形金属孔的网格剖分比较复杂,仿真速度较慢。多层PCB中,孔的数目较多、种类较杂。
总体思路:利用python程序识别.dwg文件中的圆形并替换为圆内接六边形,再导入HFSS。
实现功能:可自由选择圆形的半径与图层进行替换。
效果展示:
(a)一堆圆形,白色圆为图层 '0',红色为图层 '1',底部四个圆半径为100。
(b)将所有的圆替换。
(c)将半径 r=100 的圆替换。
(d)将图层 '1' 的圆替换。
from pyautocad import Autocad, APoint, aDouble
acad = Autocad(create_if_not_exists=True)
All_PolyLine = []
result = []
n = 0
for circle in acad.iter_objects('Circle'):
r = circle.radius
Layer=circle.Layer
# if r == 100: # r为需要替换的圆形半径
# if Layer == '1': # Layer为需要替换的圆形图层
if 1 :
n += 1
xy = circle.Center
CircleLayer= acad.ActiveDocument.Layers.Add(circle.Layer)
acad.ActiveDocument.ActiveLayer = CircleLayer
p1 = APoint(xy[0]-r/2,xy[1]+r*3**0.5/2)
p2 = APoint(xy[0]+r/2,xy[1]+r*3**0.5/2)
p3 = APoint(xy[0]+r,xy[1])
p4 = APoint(xy[0]+r/2,xy[1]-r*3**0.5/2)
p5 = APoint(xy[0]-r/2,xy[1]-r*3**0.5/2)
p6 = APoint(xy[0]-r,xy[1])
rectangle = [p1, p2, p3, p4, p5, p6, p1]
rectangle = [j for i in rectangle for j in i]
rectangle = aDouble(rectangle)
acad.model.AddPolyLine(rectangle)
result.append((circle))
acad.prompt( '选中圆形总数: {}'.format(n))
for i in result:
i.Delete()
acad.prompt('替换完毕!')
在使用前需要安装库文件(pip install pyautocad)。
还是挺有意思的,感兴趣的小伙伴可以尝试一下。



