模拟ET工具中的layiso,初学者,程序应该可以做优化,请高手指点:
(defun c:layiso()
(setvar "cmdecho" 0)
(princ "\n.....选择所要保留图层上实体......")
(setq sl (ssget))
(setq index 0)
(setq sll (sslength sl))
(tblnext "layer" T)
(setq zerolayerentname (tblobjname "layer" "0"))
(setq zerotable (entget zerolayerentname))
(if (> (cdr (assoc '62 zerotable)) 0)
(progn (setq zeroonoff (- 0 (cdr (assoc '62 zerotable))))
(entmod (subst (cons 62 zeroonoff) (assoc '62 zerotable) zerotable))
)
)
(while (setq entable (tblnext "layer"))
(setq layerentname (tblobjname "layer" (cdr (assoc '2 entable))))
(setq ennewtable (entget layerentname))
(if (> (cdr (assoc '62 ennewtable)) 0)
(progn (setq layeronoff (- 0 (cdr (assoc '62 ennewtable))))
(entmod (subst (cons 62 layeronoff) (assoc '62 ennewtable) ennewtable))
)
)
)
(repeat sll
(setq entname (ssname sl index))
(setq entable (entget entname))
(setq layername (tblobjname "layer" (cdr (assoc '8 entable))))
(setq ennewtable (entget layername))
(if (< (cdr (assoc '62 ennewtable)) 0)
(progn (setq layeronoff (- (cdr (assoc '62 ennewtable)) (* 2 (cdr (assoc '62 ennewtable)))))
(setq layertable (subst (cons 62 layeronoff) (assoc '62 ennewtable) ennewtable))
(entmod layertable)
)
)
(setq index (+ 1 index))
)
(princ "\n操作已完成,保留了你所需的图层!")
(princ)
) |