指定和检索扩展数据
From AutoCAD ActiveX/VBA
本例提示用户选择图形中的对象,选定的对象将被置于选择集中,并且指定的扩展数据将附着到该选择集中的所有对象
Sub Ch10_AttachXDataToSelectionSetObjects()
' 创建选择集
Dim sset As Object
Set sset = ThisDrawing.SelectionSets.Add("SS1")
' 提示用户选择对象sset.SelectOnScreen' 定义扩展数据Dim appName As String, xdataStr As StringappName = "MY_APP"xdataStr = "This is some xdata"Dim xdataType(0 To 1) As IntegerDim xdata(0 To 1) As Variant' 为每个数组定义值' 1001 指示 appNamexdataType(0) = 1001xdata(0) = appName' 1000 指示字符串值xdataType(1) = 1000xdata(1) = xdataStr' 遍历选择集中的所有图元' 将扩展数据设置和指定给每个图元Dim ent As ObjectFor Each ent In ssetent.SetXData xdataType, xdataNext entEnd Sub
本例显示上例所附着的扩展数据。如果附着的扩展数据不是字符串(类型 1000)类型,则需要修改此代码
Sub Ch10_ViewXData()
' 查找上例中创建的选择集
Dim sset As Object
Set sset = ThisDrawing.SelectionSets.Item("SS1")
' 定义扩展数据变量以保存扩展数据信息Dim xdataType As VariantDim xdata As VariantDim xd As Variant' 定义索引计数器Dim xdi As Integerxdi = 0' 遍历选择集中的对象' 并检索对象的扩展数据Dim msgstr As StringDim appName As StringDim ent As AcadEntityappName = "MY_APP"For Each ent In ssetmsgstr = ""xdi = 0' 检索 appName 扩展数据类型和值ent.GetXData appName, xdataType, xdata' 如果未初始化 xdataType 变量,' 则没有可供该图元检索的 appName 扩展数据If VarType(xdataType) <> vbEmpty ThenFor Each xd In xdatamsgstr = msgstr & vbCrLf & xdataType(xdi) _& ": " & xdxdi = xdi + 1Next xdEnd If' 如果 msgstr 变量为 NULL,则没有扩展数据If msgstr = "" Then msgstr = vbCrLf & "NONE"MsgBox appName & " xdata on " & ent.ObjectName & _":" & vbCrLf & msgstrNext entEnd Sub