lzx838 发表于 2009-10-28 14:15:00

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

本贴的内容是获取图块里的所有对象(包含子图块的对象),如何对对象进行操作,让各位自个儿去实现.因为每个人的需求都不一致.
以下是我调试时的例子:


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


以上是图块嵌套的示意图.
以下是在CAD2010下加载getBlockObject命令运行,选择图块后得到的结果:第001层 图块名称:整形
===================第 002 层===================
第002层 图块名称:方形
===================第 003 层===================
实体对象类型:Autodesk.AutoCAD.DatabaseServices.Polyline
实体objectId:(2127852552)
实体对象句柄:219
---------------------------------------------------------------
实体对象类型:Autodesk.AutoCAD.DatabaseServices.Line
实体objectId:(2127852560)
实体对象句柄:21A
---------------------------------------------------------------
实体对象类型:Autodesk.AutoCAD.DatabaseServices.Line
实体objectId:(2127852568)
实体对象句柄:21B
---------------------------------------------------------------
===============================================================
实体对象类型:Autodesk.AutoCAD.DatabaseServices.BlockReference
实体objectId:(2127852704)
实体对象句柄:22C
---------------------------------------------------------------
第003层 图块名称:方形
===================第 004 层===================
实体对象类型:Autodesk.AutoCAD.DatabaseServices.Polyline
实体objectId:(2127852552)
实体对象句柄:219
---------------------------------------------------------------
实体对象类型:Autodesk.AutoCAD.DatabaseServices.Line
实体objectId:(2127852560)
实体对象句柄:21A
---------------------------------------------------------------
实体对象类型:Autodesk.AutoCAD.DatabaseServices.Line
实体objectId:(2127852568)
实体对象句柄:21B
---------------------------------------------------------------
===============================================================
实体对象类型:Autodesk.AutoCAD.DatabaseServices.BlockReference
实体objectId:(2127852712)
实体对象句柄:22D
---------------------------------------------------------------
第004层 图块名称:方形
===================第 005 层===================
实体对象类型:Autodesk.AutoCAD.DatabaseServices.Polyline
实体objectId:(2127852552)
实体对象句柄:219
---------------------------------------------------------------
实体对象类型:Autodesk.AutoCAD.DatabaseServices.Line
实体objectId:(2127852560)
实体对象句柄:21A
---------------------------------------------------------------
实体对象类型:Autodesk.AutoCAD.DatabaseServices.Line
实体objectId:(2127852568)
实体对象句柄:21B
---------------------------------------------------------------
===============================================================
实体对象类型:Autodesk.AutoCAD.DatabaseServices.BlockReference
实体objectId:(2127852720)
实体对象句柄:22E
---------------------------------------------------------------
第005层 图块名称:方形
===================第 006 层===================
实体对象类型:Autodesk.AutoCAD.DatabaseServices.Polyline
实体objectId:(2127852552)
实体对象句柄:219
---------------------------------------------------------------
实体对象类型:Autodesk.AutoCAD.DatabaseServices.Line
实体objectId:(2127852560)
实体对象句柄:21A
---------------------------------------------------------------
实体对象类型:Autodesk.AutoCAD.DatabaseServices.Line
实体objectId:(2127852568)
实体对象句柄:21B
---------------------------------------------------------------
===============================================================
实体对象类型:Autodesk.AutoCAD.DatabaseServices.BlockReference
实体objectId:(2127852728)
实体对象句柄:22F
---------------------------------------------------------------
第006层 图块名称:圆形
===================第 007 层===================
第007层 图块名称:方形
===================第 008 层===================
实体对象类型:Autodesk.AutoCAD.DatabaseServices.Polyline
实体objectId:(2127852552)
实体对象句柄:219
---------------------------------------------------------------
实体对象类型:Autodesk.AutoCAD.DatabaseServices.Line
实体objectId:(2127852560)
实体对象句柄:21A
---------------------------------------------------------------
实体对象类型:Autodesk.AutoCAD.DatabaseServices.Line
实体objectId:(2127852568)
实体对象句柄:21B
---------------------------------------------------------------
===============================================================
实体对象类型:Autodesk.AutoCAD.DatabaseServices.BlockReference
实体objectId:(2127852656)
实体对象句柄:226
---------------------------------------------------------------
实体对象类型:Autodesk.AutoCAD.DatabaseServices.Circle
实体objectId:(2127852664)
实体对象句柄:227
---------------------------------------------------------------
===============================================================
实体对象类型:Autodesk.AutoCAD.DatabaseServices.BlockReference
实体objectId:(2127852736)
实体对象句柄:230
---------------------------------------------------------------
===============================================================
下面是就是这贴子的源码工程文件

lxw320 发表于 2020-6-7 13:58:42

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

超版,我最近也遇到遍历慢,想另觅新方法。你这个方法可以贴一下例子出来学习一下吗?

liminnet 发表于 2009-10-28 15:00:00

wangph 发表于 2009-10-31 07:07:00

错误 2 “Autodesk.AutoCAD.DatabaseServices.BlockReference”不包含“Name”的定义,并且找不到可接受类型为“Autodesk.AutoCAD.DatabaseServices.BlockReference”的第一个参数的扩展方法“Name”(是否缺少 using 指令或程序集引用?)

lzx838 发表于 2009-11-2 09:01:00

楼上是否未引用"acdbmgd"dll文件?

shghe 发表于 2009-11-2 09:04:00

function XML() {
   
}

wangph 发表于 2009-11-3 08:19:00

lzx838发表于2009-11-2 9:01:00static/image/common/back.gif楼上是否未引用\"acdbmgd\"dll文件?

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

1234567 发表于 2009-11-4 08:56:00

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

lzx838 发表于 2009-11-6 16:33:00

<p>如果只是想得到块中所有子块,做个判断就行了.</p><p>你说速度慢,我有点不怎么相信.一个图块当中再多也不会多到有多少个实体对象.</p>

1234567 发表于 2009-11-9 08:43:00

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

雪山飞狐_lzh 发表于 2009-11-9 11:07:00

<p>响铃遍历的是Insert实体,块参照种类比较多的时候可能比较慢</p><p>应该先遍历块表,并生成块嵌套的树结构</p><p>然后遍历块参照,简单的输出信息</p>
页: [1] 2
查看完整版本: [原创]翔麟专集——获取图块里的所有对象(包含子图块的对象)