关闭除选定层之外的层
你好首先,我不想在这里使用LAYISO。这是因为我需要设置关闭图层的设置。。。一些用户可能会将其设置为锁定。
无论如何。。。
这是我的lisp,它拾取实体,当拾取实体时,除拾取之外的所有实体都将关闭。
当我选择它们时,我在屏幕上看不到它们被标记为已选择。只有在命令行中,我才能看到拾取了什么对象。
如何修改它以将拾取的实体显示为拾取的实体。
(defun c:off_layEXC ()
(setvar "cmdecho" 0)
(setq ent nil
lista nil
typ_ent nil
lager nil
typ_lager nil
namn nil
nr_lista nil
namn_lista
nil
)
(setq ent T)
(setvar "clayer" "0")
(while (/= ent nil)
(setq ent (car (entsel "\nChoose object: ")))
(if ent
(progn
(setq typ_lager (cdr (assoc 8 (entget ent))))
(prompt (strcat " Layer " typ_lager " chosen"))
(setq lista (append lista (list typ_lager)))
)
(setq ent nil)
)
)
(setvar "clayer" (nth 0 lista))
(command "_layer" "off" "*" "n" "")
(setq nr 1)
(while (< nr (length lista))
(command "_layer" "on" (nth nr lista) "")
(setq nr (1+ nr))
)
(princ)
) 我不确定我是否理解你的目标
试试这个编辑过的版本,你可以看到如何
使用夹点选择图元,另一段代码
你可以自己编辑
(defun c:off_layEXC (/ en ent lista nr typ_lager ss)
(setvar "cmdecho" 0)
(setq ss (ssadd))
(setq ent T)
(setvar "clayer" "0");--> do you need restore this setting after?
(while (/= ent nil)
(setq ent (entsel "\nChoose object: "))
(if ent
(progn
(setq en (car ent))
(setq typ_lager (cdr (assoc 8 (entget en))))
(ssadd en ss)
(sssetfirst nil ss)
(prompt (strcat " Layer " typ_lager " chosen"))
(if (not (member typ_lager lista)); to avoid to put duplicate layer name into layer name list
(setq lista (append lista (list typ_lager))))
)
)
)
(setq ent nil)
(setvar "clayer" (nth 0 lista))
(command "_layer" "off" "*" "n" "")
(alert "Rest code block goes here")
(setq nr 1)
(while (< nr (length lista))
(command "_layer" "on" (nth nr lista) "")
(setq nr (1+ nr))
)
(setvar "cmdecho" 1)
(princ)
)
~'J'~ 或者像这样-大卫
(defun c:offelay (/ ss i ll en ln ls)
(setvar "HIGHLIGHT" 1)
(while (not ss)
(princ "\Select Entities To Show...")
(setq ss (ssget (list (if (getvar "CTAB")
(cons 410 (getvar "CTAB"))
(cons 67 (- 1 (getvar "TILEMODE"))))))))
(setq i (sslength ss))
(setq ll (list (getvar "CLAYER")))
(while (not (minusp (setq i (1- i))))
(setq en (ssname ss i)
ln (cdr (assoc 8 (entget en))))
(if (not (member ln ll))
(setq ll (cons ln ll))))
(setq ls "")
(foreach l ll (setq ls (strcat ls l ",")))
(command "_.LAYER" "_OFF" (strcat "~" (getvar "CLAYER")) "_ON" ls "")
(prin1))
页:
[1]