lisp如何只处理选中的块表
Z轴归零,但每次都把块表里的所有块定义都处理一遍,对于图形很大的话会很慢。(defun zero-block (/)
(vlax-for block (vla-get-blocks
(vla-get-activedocument (vlax-get-acad-object))
)
(vlax-for eblock
(zero-ent (vlax-vla-object->ename e))
)
)
)
(defun c:z0 (/ c10 c38 dxf ent i len ss)
(princ "\n选择需要将Z坐标或标高属性清零的对象 <回车选择所有图元>: ")
(setq ss (ssget))
(setqlen (sslength ss)
i 0
c10 0
c38 0
)
;; 块定义内实体归零
(zero-block)
(setqlen (sslength ss)
i 0
)
(repeat len
(zero-ent (setq ent (ssname ss i)))
(setq i (1+ i))
)
)
怎样写能只处理选中的块的块定义,我的想法是先把选中的对象筛选出Insert,然后做成一个没有重复的块名字的表,最后再在块表中遍历。
(setq ss1 (ssget "p" (list (cons 0 "insert"))))
(if ss1
(zero-blocks ss1)
)
(defun zero-blocks (ss / knum blklst blkname)
(repeat (setq knum(sslength ss))
(if (not (member (setq blkname(vla-get-name (vlax-ename->vla-object (ssname ss (setq knum(1- knum)))))) blklst))
(setq blklst(cons blkname blklst))
);end if
)
(vlax-for block (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object)))
(if (member (setq blkname (vla-get-name block)) blklst)
(vlax-for eblock
(zero-ent (vlax-vla-object->ename e))
)
)
)
)
页:
[1]