使用 pywin32 在 AutoCAD 中填充对象

在我们之前的博文中,我们讨论了如何创建 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)
图 1:在 AutoCAD 模板上使用 pywin32 孵化闭环

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
图 2:使用 pywin32 更改模式比例

将内部循环添加到影线 AutoCAD 对象循环

如果我们想要内部对象周围有舱口,我们必须做我们在这里做的反向工作。

我们孵出了一个外部物体。现在我们将添加一个我不想孵化的内部对象。

同样,我们可以将多个这样的内循环一一添加到阴影区域。

in_loop = []
in_loop.append(acadModel.AddCircle(APoint(250, 250, 0), 100))
inner = variants(in_loop)
hatch.AppendInnerLoop(inner)
图 3:使用 pywin32 在阴影区域内添加了一个内部循环

现在,让我们检查添加此内部循环后的阴影区域。

print(round(hatch.Area,2))

O/p:
1361283.16

正如我们从代码输出和图 3 中看到的那样,自从我们将内部循环添加到现有的阴影区域后,该区域已经减少了 31415.92(圆的面积)。

You May Also Like

Leave a Reply

Leave a Reply

您的邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据