关闭所有层,除了
有没有办法将“-layer”命令合并到lisp例程中,以完成关闭所有层的任务,除了某个5层之外,该5层始终是我想要保留的相同层?我目前正在使用它关闭除当前层之外的所有层,但不知道如何修改代码以始终保持相同的5层。。
(defun C:loff ( / clayer expert)
(setq clayer (getvar "clayer") expert (getvar "expert"))
(setvar "expert" 1)
(command "._layer" "_off" "*" "_on" clayer "")
(setvar "expert" expert)
(princ)
)
有没有办法将“-layer”命令合并到lisp例程中,以完成关闭所有层的任务,除了某个5层之外,该5层始终是我想要保留的相同层?
例如,我想关闭除以下层之外的所有层:
Storm_排水沟
建筑物
暖通空调
洒水器
停车场
我目前正在使用此LISP关闭除当前层之外的所有层,但不知道如何修改代码以始终保持这5层不变。。
(defun C:loff ( / clayer expert)
(setq clayer (getvar "clayer") expert (getvar "expert"))
(setvar "expert" 1)
(command "._layer" "_off" "*" "_on" clayer "")
(setvar "expert" expert)
(princ)
)
在上面写着clayer的地方,你可以把它添加到“LAYER1,LAYER2,LAYER3,LAYER4,LAYER5”。
层#是您希望留在上面的每个层的名称。 我将你的帖子转移到AutoLISP、Visual LISP和DCL论坛。
请阅读代码发布指南,并将代码放在代码标签中。 非常感谢。 我将另一个线程中的帖子添加到这个帖子中。
再次感谢您在这方面的帮助!我可以打开的层数有限制吗?因为当我离开160层时,我在命令行中不断得到以下错误:
; error: bad argument value:AutoCAD command: #<SUBR @000000002cafd6b0 COND> 尽管在这种情况下,您收到的错误消息似乎有些奇怪,但传递给命令的字符串的长度很可能有限制。
试试这个:
根据需要更改突出显示列表中的层。
李的代码的另一个优点是,它可以透明地执行,并且运行速度比使用命令快得多。
我从来没有注意到在向LAYER命令输入字符串时的局限性,但我必须承认,在编写快速宏时,我输入的字符串从来没有超过通配符。如果有什么东西像你想要的那样,我绝对不会使用命令来写。 如果图形中不存在任何图层,则所有图层都将关闭。
(defun c:Test (/ l e c)
;;;--- Tharwat 23. May. 2013 ---;;;
(while (setq l (tblnext "LAYER" (not l)))
(setq c (assoc 62 (setq e (entget (tblobjname "LAYER" (cdr (assoc 2 l)))))
)
)
(if (member (strcase (cdr (assoc 2 l)))
(mapcar 'strcase
'("Storm_Drains" "Building" "HVAC" "Sprinkler"
"Parking_Lot"
)
)
)
(if (minusp (cdr c))
(entmod (subst (cons 62 (- (cdr c))) c e))
)
(if (not (minusp (cdr c)))
(entmod (subst (cons 62 (- (cdr c))) c e))
)
)
)
(princ)
)
页:
[1]
2