slw7310 发表于 2015-4-27 06:20:20

怎样根据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

请高人指正!!

雪山飞狐_lzh 发表于 2015-4-27 06:46:15

贴个例图说明一下

slw7310 发表于 2015-4-27 07:08:24

图例不太好表达!

总的思路是: 点击一个含有 Xdata的实体,然后想得到文档中所有 包含与被点击实体相同Xdata的实体ID的集合!

以上代码可能思路上有什么问题!总也得不得到!
能否请大侠做个例程
另 请教一个问题.net开发时 XData和 Xrecord 分区域吗,1000 以上的是XData ?
谢谢!

slw7310 发表于 2015-4-27 07:25:28

以上代码
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

雪山飞狐_lzh 发表于 2015-4-27 07:26:43

我怎么觉得你的前后xdata不是完全一样
第二个问题 看cad帮助的dxf部分

slw7310 发表于 2015-4-27 07:27:30

程序名+任何其他过滤条件都得不到,不知为何?请飞狐解惑!!

雪山飞狐_lzh 发表于 2015-4-27 07:28:42

如果是pl可以用xdata的值过滤
其他实体只能用应用程序名过滤

ivde 发表于 2015-4-27 10:37:27

曾经遇到过一个图 ssget 无法过滤 -3 组码,最后只好用图层过滤再 entget 检查 -3 部分

雪山飞狐_lzh 发表于 2015-4-27 10:45:28

一般来说1001码都可以过滤
如果有特殊要求xdata中可用控制码包围1001码

ivde 发表于 2015-4-27 12:40:31

雪山飞狐_lzh 发表于 2015-4-27 10:45
一般来说1001码都可以过滤
如果有特殊要求xdata中可用控制码包围1001码

lisp ssget 只能到 (-3(“test”))不能用1001
页: [1] 2
查看完整版本: 怎样根据ObjectID得到 关联的 含有同样Xdata的所有实体