明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 4234|回复: 17

[选集] 怎样根据ObjectID得到 关联的 含有同样Xdata的所有实体

[复制链接]
发表于 2015-4-27 06:20 | 显示全部楼层 |阅读模式
请大侠诊断一下,以下代码,不知为何,就是选不中  关联的 含有同样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

请高人指正!!
发表于 2015-4-27 06:46 来自手机 | 显示全部楼层
贴个例图说明一下
 楼主| 发表于 2015-4-27 07:08 | 显示全部楼层
图例不太好表达!

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

以上代码可能思路上有什么问题!总也得不得到!
能否请大侠做个例程
另 请教一个问题  .net开发时 XData  和 Xrecord 分区域吗,1000 以上的是XData ?
谢谢!
 楼主| 发表于 2015-4-27 07:25 | 显示全部楼层
以上代码
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
发表于 2015-4-27 07:26 来自手机 | 显示全部楼层
我怎么觉得你的前后xdata不是完全一样
第二个问题 看cad帮助的dxf部分
 楼主| 发表于 2015-4-27 07:27 | 显示全部楼层
程序名+任何其他过滤条件都得不到,不知为何?请飞狐解惑!!
发表于 2015-4-27 07:28 来自手机 | 显示全部楼层
如果是pl可以用xdata的值过滤
其他实体只能用应用程序名过滤
发表于 2015-4-27 10:37 | 显示全部楼层
曾经遇到过一个图 ssget 无法过滤 -3 组码,最后只好用图层过滤再 entget 检查 -3 部分
发表于 2015-4-27 10:45 来自手机 | 显示全部楼层
一般来说1001码都可以过滤
如果有特殊要求xdata中可用控制码包围1001码
发表于 2015-4-27 12:40 来自手机 | 显示全部楼层
雪山飞狐_lzh 发表于 2015-4-27 10:45
一般来说1001码都可以过滤
如果有特殊要求xdata中可用控制码包围1001码

lisp ssget 只能到 (-3(“test”))不能用1001
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-4-20 03:39 , Processed in 0.151910 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表