linheyuanpcb 发表于 2011-7-12 14:14:04

请教将所有关闭的层内东西清除?

(defun c:dde(/ et ln lay_name ss li)
(setq li (entsel "\n请选择指定图层内的任何一个实体<回车直接输入层名>:"))
(if li
    (progn
         (setq et (entget(nth 0 li)))
         (setq lay_name (cdr (assoc 8 et)))
    )
    (progn
         (princ "\n输入层名:")

         (while (= ln nil)
                (setq lay_name (getstring))
                (setq ln (cdr (assoc 2 (tblnext "layer" t))))
                (while (and ln (/= ln "%") )
                     (if (/= ln lay_name)
                           (setq ln (cdr (assoc 2 (tblnext "layer"))))
                           (setq ln "%")
                           ;如指定的图层名已存在,则设“%”标志
                        )
                )
               (if (/= ln "%") ;错误处理
                   (princ "\n指定的图层不存在,请重新输入:")
                )
         )

    )
)
(setq ss (ssget "x"(list(cons 8 lay_name))))
(command "-layer" "u" lay_name "")         
(command "erase" ss "")                      ;清除所有实体
(princ "\n清除完毕!")
(princ)
)

zhynt 发表于 2011-7-12 16:34:02

本帖最后由 zhynt 于 2011-7-12 16:36 编辑



(defun c:dde (/ et ln lay_name ss li)
(setq first T)
(setq layertab '())
(while (setq lay1 (tblnext "layer" first))
    (if      (= first T)
      (setq first nil)
    )
    (if      (/= lay1 nil)
      (progn (setq lay_name (cdr (assoc 2 lay1)))
             (setq lay_ent (entget (tblobjname "layer" lay_name)))
;;;判断图层为锁定状态,如果要判断关闭状态用 (if (< (cdr (assoc 62 lay_ent)) 0)
             (if (= (cdr (assoc 70 lay_ent)) 4)
               (progn (setq ss (ssget "x" (list (cons 8 lay_name))))
                      (command "-layer" "u" lay_name "")
                      (command "erase" ss "")
               )
             )
      )
    )
)                                                            ;清除所有实体
(princ "\n清除完毕!")
)

清风明月名字 发表于 2012-5-29 16:48:03

谢谢二楼,太好用了
页: [1]
查看完整版本: 请教将所有关闭的层内东西清除?