(defun c:zz (/ txt tt1 tt2 sn si sii n m blk ) (setq txt (strcase (getstring "\n输入图元句柄:") nil)) (setq tt1 ",") (setq tt2 (strcat txt ",")) (setq sn 0) (setq n 5) (while (zerop sn) (setq sn 1) (setq blk (cdr (assoc 2 (tblnext "block" t)))) (search_block) (while (setq blk (tblnext "block")) (setq blk (cdr (assoc 2 blk))) (search_block) ) (if (setq m (vl-string-position 44 tt1 1)) (progn (setq txt (substr tt1 2 (1- m))) (setq tt2 (strcat tt2 txt ",")) (setq tt1 (substr tt1 (1+ m))) (setq sn 0) ) ) ) tt2 )
(defun search_block() (setq en (cdr (assoc -2 (tblsearch "BLOCK" blk)))) (setq en_data (entget en)) (setq si 0 sii -1) (while (or (and (zerop si) (setq en (entnext en))) (zerop (setq sii (1+ sii)))) (if (equal (cdr (assoc n en_data)) txt) (progn (setq n 2) (if (not (or (vl-string-search (strcat "," blk ",") tt1) (vl-string-search (strcat "," blk ",") tt2) ) ) (setq tt1 (strcat tt1 blk ",")) ) ) ) (if (zerop sii) (setq si 1) (setq en_data (entget en))) ) )
这是完善后的代码。
就功能来说,是能实现了。但是,我对这段代码十分不满意,因为它执行过程中做出的无效计算太多了。希望有对AutoCAD了解得比较深的高手指点一下。
运行refedit命令,会出现以下视图,其中块的层次关系是存在哪里的,可以直接取到么?? |