namezg 发表于 2014-3-30 19:06:12

已知在嵌套块一个图元的图元名为变量en,如何获得内含该对象的所有块参照的图元名

本帖最后由 namezg 于 2014-3-30 19:22 编辑

已知在嵌套块一个图元的图元名为变量en,如何获得内含该对象的所有块参照的图元名

当然我知道用
(setq endata (nentsel))
(setq en (car endata))
(setq blockEnamelist (last endata))
可以实现。

但我想知道的是,我现在不知道endata,只知道图元名en,有没有办法获得blockEnamelist


本来以为可以用下面的代码获得,后来发现得到的不是块参照,而是BLOCK_RECORD 符号表条目
(setq AcadDocument (vla-get-ActiveDocument (vlax-get-acad-object)))
(setq OwnerID (vla-get-OwnerID obj));取得拥有者(上级)对象的对象识别码(ID)
(setq OwnerObj (vla-ObjectIDToObject AcadDocument OwnerID));现在从取得的标识码(ID)对应的对象

Gu_xl 发表于 2014-3-30 19:30:23

en和块参照没有一丁点关系,通过en只可以得到快定义的图元名,及即-1组码!

namezg 发表于 2014-3-30 19:49:44

命令: (setq en (car (nentsel)))
选择对象: <图元名: 7edd6cb8>
;(<图元名: 7edd6cb8> (-1838.26 293.543 0.0) ((1.0 0.0 0.0) (0.0 1.0 0.0) (0.0 0.0 1.0) (-1736.58 313.65 0.0)) (<图元名: 7edd6c60>))
命令: _-bedit 正在重生成模型。
命令: (setq en1 (car (nentsel)))
选择对象: <图元名: 7edd6d30>
;(<图元名: 7edd6d30> (-63.0175 -81.9881 0.0))
命令: _BCLOSE
正在重生成模型。


两次的图元名<图元名: 7edd6cb8> <图元名: 7edd6d30>并不一样这说明什么。


命令: (setq en1 (car (nentsel)))
选择对象: <图元名: 7edd6cb8>
命令: _-bedit 正在重生成模型。
命令: (setq en1 (car (nentsel)))
选择对象: <图元名: 7edd6d68>
;(<图元名: 7edd6d68> (-100.947 -31.2859 0.0))
命令: _BCLOSE
正在重生成模型。


两次的图元名<图元名: 7edd6d30><图元名: 7edd6d68>也不一样这说明什么。
有点晕了?

llsheng_73 发表于 2014-4-12 22:57:45

(Defun STB(TAB / snl sll)
    (SetQ snl '()sll (TblNext TAB T))
    (While (SetQ snl (Cons (Cdr (Assoc 2 sll)) snl)sll (TblNext TAB nil)))
    (vl-sort (vl-remove'nil snl)'<))
(setq blks(vl-remove'nil(mapcar'(lambda(x)(if(equal(assoc -2(entget(TBLOBJNAME "block"x)))(cons -2 en))x))(stb"block"))));;所有含图元en的图块名
(ssget"X"(list'(0 . "INSERT")(cons 2 (car(mapcar'(lambda(x)(strcat","x))blks)))))
不知道是不是楼主想要的
页: [1]
查看完整版本: 已知在嵌套块一个图元的图元名为变量en,如何获得内含该对象的所有块参照的图元名