AutoCAD 中的 SelectionSet 对象与 Python

在本文中,我将讨论 AutoCAD 中的 SelectionSet 对象以及使用 Python 自动执行相同操作的方法。除此之外,我还将添加一个涵盖 Group 对象的简短介绍。

准备此 AutoCAD 示例的代码

对于这个编码示例,我使用的是 pythoncom 和win32com模块。这些模块启动我的应用程序并执行各种不同的任务。

import win32comu.client
import pythoncom

acad = win32com.client.Dispatch("AutoCAD.Application")
doc = acad.ActiveDocument
acadModel = doc.ModelSpace


def APoint(x, y, z = 0):
    return win32com.client.VARIANT(pythoncom.VT_ARRAY | pythoncom.VT_R8, (x, y, z))

def aDouble(xyz):
    return win32com.client.VARIANT(pythoncom.VT_ARRAY | pythoncom.VT_R8, (xyz))

def aVariant(vObject):
    return win32com.client.VARIANT(pythoncom.VT_ARRAY | pythoncom.VT_DISPATCH, (vObject))

SelectionSet AutoCAD 对象

首先,让我解释一下 AutoCAD 中的 SelectionSet 对象。SelectionSet 对象只是指我在 AutoCAD 中选择的项目集。在使用 AutoCAD 时,我通常通过在要从图形中选择的对象周围创建一个窗口来选择项目。在这种情况下,我通常使用鼠标来完成。不同的对象需要 SelectionSet 作为参考对象来执行不同的活动。让我们了解如何在 Python 中创建 SelectionSet 对象。

在 Python 中创建 SelectionSet AutoCAD 对象

在这个编码示例中,我将尝试使用 AddLine 方法创建两条线。我将这两行添加到一个 SelectionSet 对象。

l1 = acadModel.AddLine(APoint(0, 0, 0),APoint(1000, 1000, 0))
l2 = acadModel.AddLine(APoint(1000, 1000, 0),APoint(2000, 0, 0))

现在,我可以使用 Add 方法创建一个名为“SS1”的 SelectionSet 对象。我在 SelectionSets 对象上使用该方法。此 SelectionSets 对象是 Document 对象中存在的所有 SelectionSet 对象的集合。

要了解有关 Document 对象和其他 AutoCAD 对象的更多信息,请查看我的其他博客文章。

ss1 = doc.SelectionSets.Add("SS1")

SelectionSet 对象将对象数组作为输入参数。这些是要添加到 SelectionSet 的对象。为此,我使用 SelectionSet 对象上的 AddItems 方法将创建的行作为输入值传递。请参见下面的代码。

ss1.AddItems(aVariant([l1, l2]))

要确认是否创建了 SelectionSet 以及这两个对象是否存在于 SelectionSet 中,我可以使用两种方法:名称和计数。

print(s1.Name)
print(s1.Count)


O/p:

SS1
2

SelectionSet AutoCAD 对象的方法

还有一些其他方法可用于对 SelectionSet 对象执行各种不同的任务。例如,Clear、Delete、Erase、Highlight、Item、RemoveItems、SelectOnScreen。

从上面提到的方法中,Item 方法可用于获取存在于 Collection、Group 或 SelectionSet 中给定索引处的 Item。

print(ss1.Item(0).ObjectName)

O/p:

AcDbLine

要从 SelectionSet 中删除 SelectionSet 或项目,我可以使用 Clear、Delete、Erase 或 Remove Items 方法。这些方法的功能如下所述:

  • Clear: 此方法清空 SelectionSet。SelectionSet 对象仍将存在,但不会包含任何项目。以前驻留在选择中的项目仍然存在,但它们不再驻留在 SelectionSet 中。
  • RemoveItems: 此方法有助于从 SelectionSet 中删除一个或多个项目。删除的项目仍然存在,但它们不再驻留在 SelectionSet 中。
  • Erase: 此方法删除 SelectionSet 中的所有项目。SelectionSet 对象仍然存在,但不会包含任何项目。以前驻留在 SelectionSet 中的项目不再存在。
  • Delete: 删除 SelectionSet 对象,但不删除 SelectionSet 中的对象。虽然在调用 Delete 方法后 SelectionSet 本身将不存在,但 SelectionSet 先前包含的项目仍然存在。

从上面列出的方法中,只有 RemoveItems 方法需要传递参数。例如,从我添加到 SelectionSet 的行中,我想删除 Line2 (l2)。我必须将 l2 作为要从 SelectionSet 中删除的 Items 列表的数组的元素传递。

ss1.RemoveItems(aVariant([l2]))
print(ss1.Count)

O/p:

1

有时我只想使用常规方法选择对象。即在我想使用鼠标选择的对象周围拖动/绘制一个窗口。Python 还允许我使用 SelectOnScreen 方法来执行此操作。

ss1.SelectOnScreen()

一旦我应用了如上所示的方法,代码就会等待 AutoCAD 用户选择对象。选择对象后,AutoCAD 用户需要按键盘上的 Enter。这将完成选择。然后代码最终会继续前进。

使用 Python 在 AutoCAD 中对对象进行分组

Group 对象是一个命名的 SelectionSet 对象。由于它不包含任何特殊方法,因此我添加了这个小介绍部分,以讨论 Group 对象。

我可以像添加 SelectionSet 对象一样添加 Group 对象。即通过使用Add 方法。显然,这里我需要使用 Groups 集合对象来添加一个 Group。

此外,要将项目添加到创建的 Group 对象,我可以使用 AppendItems 方法。我可以像使用 SelectionSet 对象的 AddItems 方法一样执行该任务。

除此之外,下面列出了可用于在 AutoCAD 组对象上执行活动的各种不同方法和属性:

  • 删除
  • 获取扩展字典
  • 强调
  • 物品
  • 移除物品
  • 更新
  • 数数
  • 文档
  • 处理
  • 有扩展字典
  • 线型
  • 线型比例
  • 线宽
  • 材料
  • 姓名
  • 对象 ID
  • 对象名
  • 所有者 ID
  • 绘图样式名称
  • 本色
  • 可见的

结束语

使用 SelectionSet 对象,我可以在其他 AutoCAD 对象上执行不同的活动。要了解有关在 AutoCAD 中使用 Python 自动执行不同任务的更多信息,请查看我的其他博客文章。如有任何疑问或疑问,请随时使用下面的评论部分提出您可能有的任何问题。此外,对于任何类型的技术咨询,请通过此博客上的 SCDA联系表与我联系。

You May Also Like

Leave a Reply

Leave a Reply

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

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