炒冷饭,如何获取普通块内实体的图层信息。
很多时候需要根据图层选取对象,有没有办法不炸块的情况下,获取选择集中的块是否包含所选择的图层,如图元般的选择这些块?最好是不炸块的前提下。看了很多前辈的帖子,也是没摸索到;不知道前辈大佬们是怎么处理的呢。。。还有不炸块的前提下,很多前辈的获取块内的对象基本使用entsel获得块内图元,有没有办法ssget 传参传参获得块内图元信息?一直有点困惑。。。
entnext
返回图形中的下一个对象(图元)名
(entnext )
参数
ename
现有图元的名称。
返回值
如果不带参数调用 entnext 函数,它返回数据库中第一个未被删除的图元名。如果带参数 ename 调用该函数,它返回数据库中 ename 图元后的下一个未被删除的图元名。如果数据库中不存在下一个图元,它返回 nil。entnext 函数既可以返回主图元,又可以返回子图元。
示例
(setq e1 (entnext)) ; 设置 e1 位图形中一个图元的名称,空白图返回nil
(setq e2 (entnext e1)) ; 设置 e2 为 e1 后的图元的名称
注意
ssget 函数所形成的选择集中只包含主图元,不包含块属性或多段线顶点。可以通过调用 entnext 函数遍历复杂图元的子图元来访问复杂图元的内部结构。获取子图元名后,可以象处理其他图元一样处理子图元。获取子图元名后,还可以用以下方法找到它的主图元:调用entnext 函数直至找到 SEQEND 图元,该图元的 -2 组中即包含了它的主图元名。
liuhe 发表于 2023-2-5 22:33
entnext
非常感谢,,好好学习研究下,这个太好了。。。 (setq blk_name (cdr (assoc 2 (entget (car(entsel))))))
(vlax-for item (setq blkobj (vlax-invoke-method (vla-get-Blocks (vla-get-ActiveDocument (vlax-get-acad-object))) 'Item blk_name))
(if(= (vla-get-ObjectName item) "AcDbBlockReference")
(del-ent-in-blk (vlax-vla-object->ename item) (vla-get-ObjectName item) code)
)
(print(vla-get-layer item))
) (setq e1(cdr(assoc -2(tblsearch "block" (cdr(assoc 2 (entget (car(entsel)))))))))
(while (setq e1(entnext e1))
(print(cdr(assoc 8 (entget e1))))
) 谢谢,,好好学习下!!!
页:
[1]