au-s 发表于 2022-7-6 14:59:16

关闭除选定层之外的层

你好
 
首先,我不想在这里使用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)
)

fixo 发表于 2022-7-6 15:52:32

我不确定我是否理解你的目标
试试这个编辑过的版本,你可以看到如何
使用夹点选择图元,另一段代码
你可以自己编辑
 

(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'~

David Bethel 发表于 2022-7-6 16:06:43

或者像这样-大卫
(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]
查看完整版本: 关闭除选定层之外的层