带有 Python 的 AutoCAD 中的区域对象

在这篇博文中,我展示了如何使用 pyautocad 在 AutoCAD 中创建和操作任何区域对象。我将使用 pyautocad 中的 AddRegion() 方法来这样做。pyautocad 是 AutoCAD 的几个 Python 模块之一。我已经在此博客上广泛介绍了 Python 中的AutoCAD 脚本

AutoCAD 中的区域对象

AutoCAD 区域对象表示二维封闭区域。AutoCAD 面对象可以是多段线、圆、圆弧、样条、矩形等,只要它们相互连接形成一个封闭的实体即可。

AutoCAD 区域对象可以合并并用作单个区域。这可以通过使用一些方法来完成。这包括UnionIntersectionSubtraction等方法。

这些方法统称为 AutoCAD 布尔方法。

在 AutoCAD(win32com 等)中创建区域对象

无法使用 pyautocad 在 AutoCAD 中创建区域对象。这是由于某些模块的限制。因此,在本文中,我将使用 AddRegion() 方法,使用win32com和 pythoncom Python 模块。

在创建任何AutoCAD 区域对象之前,我启动了我的应用程序。这有助于连接到 AutoCAD。它还允许我获取模型空间。

在下图中,我显示了一个带有重叠圆圈的封闭AutoCAD 多段线对象。

在 AutoCAD 中创建区域对象

我使用下面的代码创建了上图中的对象:

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))

c1 = acad.AddCircle(ap(500, 1000, 0), 250)

现在,要创建一个区域,我必须将一个封闭的 AutoCAD 对象数组传递给 AddRegion() 方法。我在下面这样做:

acad.AddRegion(win32com.client.VARIANT(VT_ARRAY | VT_DISPATCH, (pl1, c1)))
在 AutoCAD 中调整区域对象

在这里我可以看到对象被转换成一个区域。折线也是如此。区域对象是原始对象。

对区域对象执行布尔运算

可以对 3D 实体和AutoCAD 区域对象执行布尔运算。

要使用区域对象,我需要使用迭代从 AutoCAD 模板中获取相同的对象。这是因为 AddRegion() 方法只返回一个 AutoCAD 对象数组。

在下面显示的Python 编码示例中,我使用字典来保存我创建的AutoCAD 区域对象。

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

正如我在本文前面提到的,我可以执行三种类型的布尔运算来创建一个区域联合:

  • 工会 (0)
  • 十字路口 (1)
  • 减法(2)。

我将使用上面列出的方法的括号中提到的数字作为输入参数。在调用 Boolean() 方法时,它们声明了我要执行的布尔运算类型。同时,我会将区域对象向右移动。这将使差异更加明显。

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))
在 AutoCAD 中调整区域对象的最后一步

很明显,新对象是作为其父区域的单个统一区域创建的。

结束语及相关内容

有关AutoCAD 自动化的更多博客文章,请查看我与 pyautocad 和pywin32相关的其他博客文章。请在下面留下您可能有的任何问题作为评论。如需任何技术帮助,请随时与我联系。您可以使用我们的联系表格来这样做。

以下是一些涉及AutoCAD 自动化和Python 中的AutoCAD 脚本的相关文章:

You May Also Like

Leave a Reply

Leave a Reply

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

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