怎样根据ObjectID得到 关联的 含有同样Xdata的所有实体
请大侠诊断一下,以下代码,不知为何,就是选不中关联的 含有同样Xdata的所有实体!请多指点!!
Dim doc As Document = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument
Dim db As Database = doc.Database
Dim ed As Editor = doc.Editor
‘############################### 根据实体ID获取实体
For Each odj As ObjectId In Path_EntObjID
Using tr As Transaction = db.TransactionManager.StartTransaction()
Dim poly_ent As Polyline = DirectCast(tr.GetObject(odj, OpenMode.ForRead), Polyline) '处理
Dim returnCADObj_ObjectID As Object
Dim DtHash As Object
Dim order_FinalPline As Object
Dim rbw As ResultBuffer = poly_ent.GetXDataForApplication("Vhelr")
For Each m_value As TypedValue In rbw
If m_value.TypeCode = 1040 Then
returnCADObj_ObjectID = m_value.Value
ElseIf m_value.TypeCode = 1071 Then
DtHash = m_value.Value
ElseIf m_value.TypeCode = 1070 Then
order_FinalPline = m_value.Value
End If
Next
MsgBox(returnCADObj_ObjectID.ToString + " " + DtHash.ToString + "" + order_FinalPline.ToString)
For path_EntN = 0 To poly_ent.NumberOfVertices - 1
Dim values2 As TypedValue = New TypedValue(DxfCode.ExtendedDataReal, returnCADObj_ObjectID)
Dim values3 As TypedValue = New TypedValue(DxfCode.ExtendedDataInteger32, DtHash)
Dim values4 As TypedValue = New TypedValue(DxfCode.ExtendedDataControlString, path_EntN)
Dim values() As TypedValue = { values2, values3, values4}
Dim filter As New SelectionFilter(values)
Dim resSel As PromptSelectionResult = ed.SelectAll(filter) '发生了Selectadded
If resSel.Status = PromptStatus.OK Then
'获取选择集中的Polyline对象
Dim sSet As SelectionSet = resSel.Value
Dim idsS As ObjectId() = sSet.GetObjectIds()
For Each M_id As ObjectId In idsS
Dim followedPolyline As Polyline = DirectCast(tr.GetObject(M_id, OpenMode.ForRead), Polyline)
Dim mrbw As ResultBuffer = followedPolyline.GetXDataForApplication("Cutting_path")
For Each m_value As TypedValue In mrbw
If m_value.TypeCode = 1071 Then
MsgBox("对应的路径的实体的ID是 " & followedPolyline.ObjectId.ToString)
End If
Next
Next M_id
Else
MsgBox("没有相应的实体被选")'############# 始终在这里 显示Msg,没有对象被选择
End If
Next
tr.Commit() '提交
End Using
End If
Next
请高人指正!!
贴个例图说明一下 图例不太好表达!
总的思路是: 点击一个含有 Xdata的实体,然后想得到文档中所有 包含与被点击实体相同Xdata的实体ID的集合!
以上代码可能思路上有什么问题!总也得不得到!
能否请大侠做个例程
另 请教一个问题.net开发时 XData和 Xrecord 分区域吗,1000 以上的是XData ?
谢谢!
以上代码
Dim values2 As TypedValue = New TypedValue(DxfCode.ExtendedDataReal, returnCADObj_ObjectID)
Dim values3 As TypedValue = New TypedValue(DxfCode.ExtendedDataInteger32, DtHash)
Dim values4 As TypedValue = New TypedValue(DxfCode.ExtendedDataControlString, path_EntN)
过滤条件,如果只用一个条件:
Dim values1 As TypedValue = New TypedValue(DxfCode.ExtendedDataRegAppName, "Awire")
就能够获得所用拥有相同“Awire”程序名的实体的ID 我怎么觉得你的前后xdata不是完全一样
第二个问题 看cad帮助的dxf部分 程序名+任何其他过滤条件都得不到,不知为何?请飞狐解惑!! 如果是pl可以用xdata的值过滤
其他实体只能用应用程序名过滤 曾经遇到过一个图 ssget 无法过滤 -3 组码,最后只好用图层过滤再 entget 检查 -3 部分 一般来说1001码都可以过滤
如果有特殊要求xdata中可用控制码包围1001码 雪山飞狐_lzh 发表于 2015-4-27 10:45
一般来说1001码都可以过滤
如果有特殊要求xdata中可用控制码包围1001码
lisp ssget 只能到 (-3(“test”))不能用1001
页:
[1]
2