乐筑天下

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

获取字典/XRecord父项

[复制链接]

71

主题

928

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1230
发表于 2008-2-22 12:56:19 | 显示全部楼层 |阅读模式
本人'我试图读取另一个应用程序写入的XRecord数据。如果我导出,我可以在DXF文件中看到它,但我没有找到拥有字典的名字。我试过'窥视#039;在它使用DBView时,它会用一个;不允许写入“;错误
我编写了一个例程,在对象期间获取XRecords的ObjectID。修改的事件,以及;抓住他们“;当它们经过时,当使用XRecords的实体被修改时。当所有事件均为'超过#039;,我运行了第二个例程,从ObjectID#039;s、 并尝试向上遍历父树到字典。虽然XRecord对象似乎没有问题(因为我可以获取它们的NAME属性),但例程在尝试获取父字典的名称时会失败。我通过了下面的例程和XRecord的ObjectID
误差为;运行时错误#039-2145386494 (80200002)':&引用
&039&引用;“不适用”
Sub getDictName(lngXRecID As Long)
&039;如果通过
&039;xrecord的对象ID。运行良好,直到我尝试
&039;获取字典的名称,然后返回以下错误:
&039&引用;运行时错误#039-2145386494 (80200002)':&引用
&039&引用;“不适用”
Dim objTmp As AcadObject
Dim objXRec As AcadXRecord
Dim lngOwnerID只要长
Dim objDict As AcadDictionary
Set objTmp=this drawing。ObjectedToObject(lngXRecID)
如果objTmp为空,则调试。打印“;找不到ObjectID的对象
退出Sub;如果不是,请确保它是一个Xrecord(objTmp.ObjectName=“AcDbXrecord”)然后调试。打印“;传递的ObjectID不是XRecord的
退出Sub
Else
Set objXRec=objTmp'设置为XRecord对象调试。打印“;XRecord名称为;;objXRec。如果
&039;获取XRecord的所有者。OwnerID设置objTmp=ThisDrawing。目标对象(lngOwnerID)
&039;如果不是,请确保它是一个字典(objTmp.ObjectName=“AcDbDictionary”)然后调试。打印“;XRecord的所有者不是一本字典
其他;设置为字典对象;获取一个“;“不适用”;此处显示错误消息调试。打印“;字典名为;;objDict。Name如果End Sub,我希望得到自己的字典,这样我就可以看到所有可用的XRecords了
它唯一的字符串数据应该很容易返回。还是我走错了路
还有别的方法可以得到字典名吗?甚至需要字典名吗
波基普西的困惑
回复

使用道具 举报

71

主题

928

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1230
发表于 2008-2-22 15:05:23 | 显示全部楼层
亲爱的困惑者,我刚刚用字典和;Xrecords在其中。它运行得很好……你能用你正在使用的数据发布一张图纸吗?与代码一起获得Xrecord#039;反对?
回复

使用道具 举报

71

主题

928

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1230
发表于 2008-2-25 06:57:01 | 显示全部楼层
我附上了一张样图。至于获取objectID#039;这是一个只使用调试的简单例程。在Acaddocument中打印。objectmodified事件。如果您输入此绘图,并将其加载到记事本中,请搜索“X”;y: \"(驱动器号),您'我将看到部分有问题的xrecords
我也在其他图纸上运行过代码,没有问题。我之前发布的代码和DBVIEW都位于该图形上,但我的代码和DBVIEW都位于没有由相关第三方应用程序创建的实体的图形上。我开始觉得它在某种程度上得到了保护?这可能吗 我快速浏览加载的应用程序,除了默认目录外,没有显示任何特殊的ARX…除非我遗漏了什么?
回复

使用道具 举报

71

主题

928

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1230
发表于 2008-2-25 15:03:37 | 显示全部楼层
好的,不用深入研究,Xrecord引用的字典似乎没有name属性。与组、布局、材质和其他的基本Acad字典非常类似,这些字典没有名称属性。任何一种都会在点名时窒息
因此,第三方应用程序正在创建一个字典,而不是给它一个name属性 知道了这一点,你可以围绕它编码,这取决于你试图用它做什么。
回复

使用道具 举报

71

主题

928

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1230
发表于 2008-2-26 06:50:43 | 显示全部楼层

&gt&燃气轮机;Xrecord引用的字典似乎没有name属性
我开始这么想,就像一个'匿名#039;阻止
&gt&燃气轮机;知道了这一点,你可以围绕它编码,这取决于你想做什么。无论如何,这听起来很容易 我试图获取字典,读取路径信息和相关的字符串变量,这样我就可以检查引用的目录(存储在XRecords中)中是否有用于存储额外信息的额外MSOffice文件 我不会;拥有等待物品修改事件的奢侈;据我所知,可能不止一本字典。但是我知道XRecords的名字,而且它们在不同的绘图中会非常一致
我该如何编写代码?我看到的唯一代码显示了一个使用其名称获取词典的代码。而对于现有的;XRecord代码,XRecord名称在DXF中显而易见,所以,你'我把门打开了一条缝,但那该死的东西上仍然有一条链子
回复

使用道具 举报

71

主题

928

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1230
发表于 2008-2-26 07:02:50 | 显示全部楼层
刚刚醒来,所以我'我睡眼惺忪……只是一张小纸条……字典不't sport一个name属性仍然有一个句柄(稍后可以通过handletoobject方法利用该句柄)…因为它's worth…嗯…咖啡…
…自以为是…如果你能给我寄一份样品图纸I'在我冲澡然后开车去上班之前,我还有大约15分钟的时间……可以说我疯了,但我想我可以解决这个问题。。。
回复

使用道具 举报

71

主题

928

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1230
发表于 2008-2-26 11:13:49 | 显示全部楼层
迈克尔,那里'这是一张附在他们第二篇文章上的小样本图纸
无赖,这里有一种方法。虽然画得很大,但可能需要一段时间
  1. Function get_the_dict(strXRecName As String) As AcadDictionary
  2. Dim oEnt As AcadEntity
  3. Dim oDict As AcadDictionary
  4. Dim oXrec As AcadXRecord
  5. Dim oTmp2 As AcadObject
  6. For Each oEnt In ThisDrawing.ModelSpace
  7.     If oEnt.HasExtensionDictionary = True Then
  8.         Set oDict = oEnt.GetExtensionDictionary
  9.         For Each oTmp2 In oDict
  10.             If TypeOf oTmp2 Is AcadXRecord Then
  11.                 Set oXrec = oTmp2
  12.                 If oXrec.Name = strXRecName Then
  13.                     Set get_the_dict = oDict
  14.                     Exit Function
  15.                 End If
  16.             End If
  17.         Next
  18.     End If
  19. Next
  20. End Function
  21. Sub test()
  22. Dim oDict As AcadDictionary
  23. Set oDict = get_the_dict("MV_PRODUCTS")
  24. If Not oDict Is Nothing Then
  25.     Debug.Print oDict.Handle
  26.     'do whatever you want with it now that you have it
  27. End If
  28. End Sub

回复

使用道具 举报

71

主题

928

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1230
发表于 2008-2-26 11:46:28 | 显示全部楼层
实际上,虽然这是我认为您要求的,但这将获得基于xrecord名称的Xrecorddata。我认为这才是您真正想要的……检查xcode&的返回值;测试2子项结束时的扩展数据…
  1. Function get_the_Xrec(strXRecName As String) As AcadXRecord
  2. Dim oEnt As AcadEntity
  3. Dim oDict As AcadDictionary
  4. Dim oXrec As AcadXRecord
  5. Dim oTmp2 As AcadObject
  6. For Each oEnt In ThisDrawing.ModelSpace
  7.     If oEnt.HasExtensionDictionary = True Then
  8.         Set oDict = oEnt.GetExtensionDictionary
  9.         For Each oTmp2 In oDict
  10.             If TypeOf oTmp2 Is AcadXRecord Then
  11.                 Set oXrec = oTmp2
  12.                 If oXrec.Name = strXRecName Then
  13.                     Set get_the_Xrec = oXrec
  14.                     Exit Function
  15.                 End If
  16.             End If
  17.         Next
  18.     End If
  19. Next
  20. End Function
  21. Sub test2()
  22. Dim oXrec As AcadXRecord
  23. Set oXrec = get_the_Xrec("MV_PRODUCTS")
  24. If Not oXrec Is Nothing Then
  25.     Debug.Print oXrec.Handle
  26.     'do whatever you want with it now that you have it
  27.     Dim xdata As Variant
  28.     Dim xcode As Variant
  29.     oXrec.GetXRecordData xcode, xdata
  30. End If
  31. End Sub
回复

使用道具 举报

71

主题

928

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1230
发表于 2008-2-26 12:48:28 | 显示全部楼层
谁呼!即#039;就是这样!有了这段代码,以及我刚刚通过电子邮件发送给你的GMail帐户的代码,我应该能够35;039;爬上树'相当快
我必须说,几个月来,我断断续续地把这个问题的一个*版本*张贴在各个董事会上。这是我第一次收到回复。Thanx!
回复

使用道具 举报

71

主题

928

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1230
发表于 2008-2-27 09:12:31 | 显示全部楼层
仅供参考…我提供了通过电子邮件提供的数据模型的层次结构和关系链接(多个)的详细地图。由原海报决定是否#039;这是他想公开的事情'在那之前,我必须在保密方面犯错。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-7-5 08:41 , Processed in 1.940856 second(s), 72 queries .

© 2020-2025 乐筑天下

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