明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 8046|回复: 14

[翔麟专集] [原创]翔麟专集——获取图块里的所有对象(包含子图块的对象)

  [复制链接]
发表于 2009-10-28 14:15 | 显示全部楼层 |阅读模式
本贴的内容是获取图块里的所有对象(包含子图块的对象),如何对对象进行操作,让各位自个儿去实现.因为每个人的需求都不一致.
以下是我调试时的例子:


这图块做得不咋的,它不代表什么,只用来实操而已.


以上是图块嵌套的示意图.
以下是在CAD2010下加载getBlockObject命令运行,选择图块后得到的结果:
  1. 第001层 图块名称:整形
  2. ===================  第 002 层  ===================
  3. 第002层 图块名称:方形
  4. ===================  第 003 层  ===================
  5. 实体对象类型:Autodesk.AutoCAD.DatabaseServices.Polyline
  6. 实体objectId:(2127852552)
  7. 实体对象句柄:219
  8. ---------------------------------------------------------------
  9. 实体对象类型:Autodesk.AutoCAD.DatabaseServices.Line
  10. 实体objectId:(2127852560)
  11. 实体对象句柄:21A
  12. ---------------------------------------------------------------
  13. 实体对象类型:Autodesk.AutoCAD.DatabaseServices.Line
  14. 实体objectId:(2127852568)
  15. 实体对象句柄:21B
  16. ---------------------------------------------------------------
  17. ===============================================================
  18. 实体对象类型:Autodesk.AutoCAD.DatabaseServices.BlockReference
  19. 实体objectId:(2127852704)
  20. 实体对象句柄:22C
  21. ---------------------------------------------------------------
  22. 第003层 图块名称:方形
  23. ===================  第 004 层  ===================
  24. 实体对象类型:Autodesk.AutoCAD.DatabaseServices.Polyline
  25. 实体objectId:(2127852552)
  26. 实体对象句柄:219
  27. ---------------------------------------------------------------
  28. 实体对象类型:Autodesk.AutoCAD.DatabaseServices.Line
  29. 实体objectId:(2127852560)
  30. 实体对象句柄:21A
  31. ---------------------------------------------------------------
  32. 实体对象类型:Autodesk.AutoCAD.DatabaseServices.Line
  33. 实体objectId:(2127852568)
  34. 实体对象句柄:21B
  35. ---------------------------------------------------------------
  36. ===============================================================
  37. 实体对象类型:Autodesk.AutoCAD.DatabaseServices.BlockReference
  38. 实体objectId:(2127852712)
  39. 实体对象句柄:22D
  40. ---------------------------------------------------------------
  41. 第004层 图块名称:方形
  42. ===================  第 005 层  ===================
  43. 实体对象类型:Autodesk.AutoCAD.DatabaseServices.Polyline
  44. 实体objectId:(2127852552)
  45. 实体对象句柄:219
  46. ---------------------------------------------------------------
  47. 实体对象类型:Autodesk.AutoCAD.DatabaseServices.Line
  48. 实体objectId:(2127852560)
  49. 实体对象句柄:21A
  50. ---------------------------------------------------------------
  51. 实体对象类型:Autodesk.AutoCAD.DatabaseServices.Line
  52. 实体objectId:(2127852568)
  53. 实体对象句柄:21B
  54. ---------------------------------------------------------------
  55. ===============================================================
  56. 实体对象类型:Autodesk.AutoCAD.DatabaseServices.BlockReference
  57. 实体objectId:(2127852720)
  58. 实体对象句柄:22E
  59. ---------------------------------------------------------------
  60. 第005层 图块名称:方形
  61. ===================  第 006 层  ===================
  62. 实体对象类型:Autodesk.AutoCAD.DatabaseServices.Polyline
  63. 实体objectId:(2127852552)
  64. 实体对象句柄:219
  65. ---------------------------------------------------------------
  66. 实体对象类型:Autodesk.AutoCAD.DatabaseServices.Line
  67. 实体objectId:(2127852560)
  68. 实体对象句柄:21A
  69. ---------------------------------------------------------------
  70. 实体对象类型:Autodesk.AutoCAD.DatabaseServices.Line
  71. 实体objectId:(2127852568)
  72. 实体对象句柄:21B
  73. ---------------------------------------------------------------
  74. ===============================================================
  75. 实体对象类型:Autodesk.AutoCAD.DatabaseServices.BlockReference
  76. 实体objectId:(2127852728)
  77. 实体对象句柄:22F
  78. ---------------------------------------------------------------
  79. 第006层 图块名称:圆形
  80. ===================  第 007 层  ===================
  81. 第007层 图块名称:方形
  82. ===================  第 008 层  ===================
  83. 实体对象类型:Autodesk.AutoCAD.DatabaseServices.Polyline
  84. 实体objectId:(2127852552)
  85. 实体对象句柄:219
  86. ---------------------------------------------------------------
  87. 实体对象类型:Autodesk.AutoCAD.DatabaseServices.Line
  88. 实体objectId:(2127852560)
  89. 实体对象句柄:21A
  90. ---------------------------------------------------------------
  91. 实体对象类型:Autodesk.AutoCAD.DatabaseServices.Line
  92. 实体objectId:(2127852568)
  93. 实体对象句柄:21B
  94. ---------------------------------------------------------------
  95. ===============================================================
  96. 实体对象类型:Autodesk.AutoCAD.DatabaseServices.BlockReference
  97. 实体objectId:(2127852656)
  98. 实体对象句柄:226
  99. ---------------------------------------------------------------
  100. 实体对象类型:Autodesk.AutoCAD.DatabaseServices.Circle
  101. 实体objectId:(2127852664)
  102. 实体对象句柄:227
  103. ---------------------------------------------------------------
  104. ===============================================================
  105. 实体对象类型:Autodesk.AutoCAD.DatabaseServices.BlockReference
  106. 实体objectId:(2127852736)
  107. 实体对象句柄:230
  108. ---------------------------------------------------------------
  109. ===============================================================
复制代码
下面是就是这贴子的源码工程文件[Vs2008-AutoCAD2010]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x

评分

参与人数 2明经币 +3 金钱 +10 收起 理由
lc3852478 + 10 找了很久了,谢谢!
雪山飞狐_lzh + 3 【好评】好程序

查看全部评分

发表于 2020-6-7 13:58 | 显示全部楼层
雪山飞狐_lzh 发表于 2009-11-9 11:07
响铃遍历的是Insert实体,块参照种类比较多的时候可能比较慢应该先遍历块表,并生成块嵌套的树结构然后遍历 ...

超版,我最近也遇到遍历慢,想另觅新方法。你这个方法可以贴一下例子出来学习一下吗?
发表于 2009-10-28 15:00 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2009-10-31 07:07 | 显示全部楼层
错误 2 “Autodesk.AutoCAD.DatabaseServices.BlockReference”不包含“Name”的定义,并且找不到可接受类型为“Autodesk.AutoCAD.DatabaseServices.BlockReference”的第一个参数的扩展方法“Name”(是否缺少 using 指令或程序集引用?)
 楼主| 发表于 2009-11-2 09:01 | 显示全部楼层
楼上是否未引用"acdbmgd"dll文件?
发表于 2009-11-2 09:04 | 显示全部楼层
function XML() {
    [native code]
}
发表于 2009-11-3 08:19 | 显示全部楼层
lzx838发表于2009-11-2 9:01:00楼上是否未引用\"acdbmgd\"dll文件?

acmgd、acdbmgd两个文件我都引用了,还是有那个错误,我用的是VS2008及CAD2007

发表于 2009-11-4 08:56 | 显示全部楼层

如果只是想得到,块中所有子块呢?这样遍历所有实体太慢了,有没有办法像过滤器那样直接将所有子块一下都选择出来的方法呢?

 楼主| 发表于 2009-11-6 16:33 | 显示全部楼层

如果只是想得到块中所有子块,做个判断就行了.

你说速度慢,我有点不怎么相信.一个图块当中再多也不会多到有多少个实体对象.

发表于 2009-11-9 08:43 | 显示全部楼层

一个图块倒是感觉不到快慢。

但是要是在实际工作中使用的话,这个是真的很慢啊,我用这种方法,遍历一张图纸中所有的块大概需要10秒左右.图纸上有大概20几个块(嵌套块,大概有3、4层嵌套)

发表于 2009-11-9 11:07 | 显示全部楼层

响铃遍历的是Insert实体,块参照种类比较多的时候可能比较慢

应该先遍历块表,并生成块嵌套的树结构

然后遍历块参照,简单的输出信息

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

本版积分规则

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

GMT+8, 2024-3-29 15:58 , Processed in 0.235986 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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