在我们之前的博文中,我们讨论了如何创建 2D 和 3D 对象以及使用它们的属性。
现在,在这篇博文中,我们将学习如何在 AutoCAD 模板中使用 pywin32 来填充对象。
使用pywin32模块设置环境
首先,我们将设置我们的工作环境以使用 pywin32 模块集成 python 和 AutoCAD 并导入一些包。
import win32com.client
import pythoncom
import math
acad = win32com.client.Dispatch("AutoCAD.Application")
acadModel = acad.ActiveDocument.ModelSpace
使用 pywin32 和 pythoncom 创建必要的构造函数
在使用 Python 处理 AutoCAD 中的阴影对象时,我们需要特定数据类型数组的特定类型。
要孵化一个对象,我们需要创建一个循环。该循环是一组绘图对象,形成一个封闭区域。
可以有多个这样的对象可以传递到这个循环数组中。因此,根据 AutoCAD 文档,我们需要一组“变体”来创建此循环。
在这里,我们将使用 VT_DISPATCH 数据类型从 AutoCAD 模板中获取绘图对象。
此外,我们还需要其他构造函数,例如 APoint 和 Double 来绘制对象。我们在之前的博客中讨论过相同的内容。
def variants(object):
return win32com.client.VARIANT(pythoncom.VT_ARRAY | pythoncom.VT_DISPATCH, (object))
在 AutoCAD 中创建对象循环
现在,我们需要使用单个或多个绘图对象创建一个封闭空间,并将其转换为循环。
该数组可以包含一个或多个构成封闭空间的绘图对象。
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)
创建影线对象并附加影线
现在我们已经创建了要孵化的封闭对象,我们将创建一个孵化对象以将其添加到闭环中。
要创建填充对象,我们需要使用以下语法的 AddHatch 命令:
object.AddHatch( PatternType, PatternName, Associativity )
此处,图案类型对于预定义填充类型为 0,对于使用当前线类型的线图案为 1,对于来自 PAT 文件而非 acad.pat 文件的图案名称为 2。
在参数模式名称处,我们可以传递 AutoCAD 提供的模式名称或根据自定义模式名称。
关联性将包含一个布尔值来指定影线是关联的还是非关联的。它只能在创建图案填充对象时设置。
当边界被修改时,关联影线会更新。非关联图案填充在其边界被修改时不会更新。
现在让我们创建填充对象。
hatch = acadModel.AddHatch(0, "ANSI37", True)
现在要将此舱口添加到我们创建的循环中,我们将使用 AppendOuterLoop 方法。
hatch.AppendOuterLoop(outer)
Python 中 AutoCAD 填充对象的属性
正如我们对其他 AutoCAD 对象的了解,我们也可以使用不同的方法获取或更改图案填充对象的属性。
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
现在,让我们将图案比例更改为 10。
hatch.PatternScale = 10
将内部循环添加到影线 AutoCAD 对象循环
如果我们想要内部对象周围有舱口,我们必须做我们在这里做的反向工作。
我们孵出了一个外部物体。现在我们将添加一个我不想孵化的内部对象。
同样,我们可以将多个这样的内循环一一添加到阴影区域。
in_loop = []
in_loop.append(acadModel.AddCircle(APoint(250, 250, 0), 100))
inner = variants(in_loop)
hatch.AppendInnerLoop(inner)
现在,让我们检查添加此内部循环后的阴影区域。
print(round(hatch.Area,2))
O/p:
1361283.16
正如我们从代码输出和图 3 中看到的那样,自从我们将内部循环添加到现有的阴影区域后,该区域已经减少了 31415.92(圆的面积)。
Leave a Reply