如果你在我的第一篇文章中提到“……(通过添加到lisp)”,我实际上是指寻找一个独立的lisp,在那里我可以输入该lisp;预定义的图层名,用于在运行lisp时隔离这些图层。
我希望这更清楚。 看一看
(defun c:Test ( / lays l c n e)
;; Tharwat 17.Nov.2014 ;;
;; -------------------------- ;;
;; Isolate a specifc list of ;;
;; Layer names . ;;
(setq lays '("Layer1" "Layer2" "Layer3")) ;; < Change this list of layer names to meet your needs .
(while (setq l (tblnext "LAYER" (not l)))
(setq c (cdr (assoc 62
(setq e
(entget (tblobjname "LAYER" (setq n (cdr (assoc 2 l)))))
)
)
)
)
(if (member n lays)
(if (minusp c)
(entmod (subst (cons 62 (abs c)) (assoc 62 e) e))
)
(if (not (minusp c))
(entmod (subst (cons 62 (- c)) (assoc 62 e) e))
)
)
)
(princ)
)
它成功了。它确实隔离了所需的层。但是unisolate命令在“隔离”之前不会恢复原始分层设置?
它可以包含在你写的lisp中吗?
抱歉没有说清楚。
基本上我需要隔离一个预定义的层,在我修改了图纸后,我希望他们回到图纸“隔离”之前的状态
我没有提到Earler,因为我认为Unisolite命令会起作用。
谢谢 有一个名为LAYERP的命令
它将恢复以前的图层设置。
我总是返回到所有层打开,但如果你有更复杂的设置,并想返回到一些被打开和一些被关闭,然后尝试LAYERP。
在宏开始时将变量“Expert”设置为3将阻止AutoCAD询问您是否确实要关闭当前图层。
你可以找这样的东西吗?
注意:不要忘记根据您的图层名更改图层名列表。
(defun c:Test-1 (/ l n lst)
(setq *Lays_Status1* nil
*Lays_Status2* nil
l '("Layer1" "Layer3" "Layer5")
)
(vlax-for x (vla-get-layers
(vla-get-activedocument (vlax-get-acad-object))
)
(if (member (setq n (vla-get-name x)) l)
(progn
(setq *Lays_Status1*
(cons (list n (vla-get-layeron x))
*Lays_Status1*
)
)
(vla-put-layeron x :vlax-true)
)
(progn
(setq *Lays_Status2*
(cons (list n (vla-get-layeron x))
*Lays_Status2*
)
)
(vla-put-layeron x :vlax-false)
)
)
)
(princ)
)
;; ;;
(defun c:Test-2 (/ l n as)
(setq l '("Layer1" "Layer3" "Layer5"))
(if (and *Lays_Status1* *Lays_Status2*)
(vlax-for x (vla-get-layers
(vla-get-activedocument (vlax-get-acad-object))
)
(cond ((setq as (assoc (setq n (vla-get-name x)) *Lays_Status1*))
(vla-put-layeron x (cadr as))
)
((setq as (assoc (setq n (vla-get-name x)) *Lays_Status2*))
(vla-put-layeron x (cadr as))
)
)
)
)
(setq *Lays_Status1* nil
*Lays_Status2* nil
)
(princ)
)(vl-load-com)
凉的这或多或少解决了我的问题。我将为LAYERP制作另一个宏&我应该很好。万岁!!
顺便说一句,我检查了我的专家设置,它是0。但它仍然没有问我。
谢谢兄弟。
假设您使用的是标准版本的AutoCAD,其中LAYISO命令可用,请尝试以下操作:
(defun c:mylayiso ( / lay sel )
(setq lay "layer1,layer2,layer3")
(if (setq sel (ssget "_X" (list (cons 8 lay) (if (= 1 (getvar 'cvport)) (cons 410 (getvar 'ctab)) '(410 . "Model")))))
(command "_.layiso" sel "")
)
(princ)
)
然后,可以使用LAYUNISO命令来隔离层。
谢谢塔瓦。它成功了。这将非常有用。
谢谢李。它也起作用。
我也很喜欢你的&如果你能在纸空间(布局选项卡)中使用它,那就更好了。
对你很好-不客气。 我喜欢再次打开这个线程,因为我经常发现,我遇到的层不是固定的层名称,而是共享相同名称但略有不同的层。
那么有没有可能合并一个通配符名称,例如*rev*
谢谢
页:
1
[2]