乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 170|回复: 9

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

[复制链接]

21

主题

60

帖子

2

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
144
发表于 2015-4-27 06:20:00 | 显示全部楼层 |阅读模式
请大侠诊断一下,以下代码,不知为何,就是选不中  关联的 含有同样Xdata的所有实体!
请多指点!!
                Dim doc As Document = Autodesk..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
请高人指正!!
回复

使用道具 举报

72

主题

2726

帖子

9

银币

社区元老

Rank: 75Rank: 75Rank: 75

铜币
3014
发表于 2015-4-27 06:46:00 | 显示全部楼层
贴个例图说明一下
回复

使用道具 举报

21

主题

60

帖子

2

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
144
发表于 2015-4-27 07:08:00 | 显示全部楼层
图例不太好表达!
总的思路是: 点击一个含有 Xdata的实体,然后想得到文档中所有 包含与被点击实体相同Xdata的实体ID的集合!
以上代码可能思路上有什么问题!总也得不得到!
能否请大侠做个例程
另 请教一个问题  .net开发时 XData  和 Xrecord 分区域吗,1000 以上的是XData ?
谢谢!
回复

使用道具 举报

21

主题

60

帖子

2

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
144
发表于 2015-4-27 07:25:00 | 显示全部楼层
以上代码
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
回复

使用道具 举报

72

主题

2726

帖子

9

银币

社区元老

Rank: 75Rank: 75Rank: 75

铜币
3014
发表于 2015-4-27 07:26:00 | 显示全部楼层
我怎么觉得你的前后xdata不是完全一样
第二个问题 看cad帮助的dxf部分
回复

使用道具 举报

21

主题

60

帖子

2

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
144
发表于 2015-4-27 07:27:00 | 显示全部楼层
程序名+任何其他过滤条件都得不到,不知为何?请飞狐解惑!!
回复

使用道具 举报

72

主题

2726

帖子

9

银币

社区元老

Rank: 75Rank: 75Rank: 75

铜币
3014
发表于 2015-4-27 07:28:00 | 显示全部楼层
如果是pl可以用xdata的值过滤
其他实体只能用应用程序名过滤
回复

使用道具 举报

0

主题

275

帖子

8

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
275
发表于 2015-4-27 10:37:00 | 显示全部楼层
曾经遇到过一个图 ssget 无法过滤 -3 组码,最后只好用图层过滤再 entget 检查 -3 部分
回复

使用道具 举报

72

主题

2726

帖子

9

银币

社区元老

Rank: 75Rank: 75Rank: 75

铜币
3014
发表于 2015-4-27 10:45:00 | 显示全部楼层
一般来说1001码都可以过滤
如果有特殊要求xdata中可用控制码包围1001码
回复

使用道具 举报

0

主题

275

帖子

8

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
275
发表于 2015-4-27 12:40:00 | 显示全部楼层

lisp ssget 只能到 (-3(“test”))不能用1001
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-6-28 19:18 , Processed in 0.260008 second(s), 72 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表