;;; 选择集转化为表 (defun ent2list (ss / lst i ent) (setq i -1) (while(setq ent (ssname ss (setq i (1+ i)))) (setq lst (cons ent lst)) ) ) ;;; 定义父子关系 (vlax-ldata-put(car(entsel"选择父圆:"))"son"(ent2list(ssget)))
好了, 我们得到了一个树状结构, 特点是, 辈份级数不定, 后代数量不定.
此时如果想要获得任意圆的所有后代, 该怎么做呢? 请看下面:
1 2 3 4 5 6 7
;;; 遍历家族树 仅输出 (defun tree (e) (foreach e (vlax-ldata-get e "son") (print e) (tree e) ) )
如果仅仅是显示, 或许用处不大, 那么我们再加上执行函数部分:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
;;; 遍历家族树 执行函数 (defun tree (e f / r) (foreach e (vlax-ldata-get e "son") (if(=(type f) \'list) (apply (car f) (if(cdr f) (cons e (cdr f)) (list e) ) ) ) (tree e f) ) )
测试一下, 我们先写个改变图元颜色的函数:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
;;; 设置颜色 (defun entSetColor (e c) (setq e (entget e)) (if(assoc62 e) (entmod(subst (cons62 c) (assoc62 e) e ) ) (entmod(append e (list(cons62 c)) ) ) ) )