在本文中,我将讨论 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联系表与我联系。
Leave a Reply