基于块隔离层
有没有人有lisp可以隔离或关闭所有绘制了某个名称块的图层?除非它是当前层。例如,我有多个层,层上有一个名为“PartTag”的块。我想用一个单一的点击关闭(或冻结)所有层在这个块驻留。
谢谢任何能帮上忙的人 尝试以下操作:
(defun c:TurnOffBlockLayers ( / en in la ls ss )
(while
(progn (setvar 'ERRNO 0) (setq en (car (entsel "\nSelect Block: ")))
(cond
( (= 7 (getvar 'ERRNO))
(princ "\nMissed, try again.")
)
( (eq 'ENAME (type en))
(if (not (eq "INSERT" (cdr (assoc 0 (entget en)))))
(princ "\nObject is not a Block.")
)
)
)
)
)
(if en
(progn
(setq ss
(ssget "_X"
(list
'(0 . "INSERT")
(assoc 2 (entget en))
(cons 410
(if (= 1 (getvar 'CVPORT))
(getvar 'CTAB)
"Model"
)
)
)
)
)
(repeat (setq in (sslength ss))
(setq la (cdr (assoc 8 (entget (ssname ss (setq in (1- in)))))))
(if (not (member la ls))
(setq ls (cons la ls))
)
)
(foreach la ls
(setq la (entget (tblobjname "LAYER" la)))
(entmod
(subst
(cons 62 (- (abs (cdr (assoc 62 la)))))
(assoc 62 la)
la
)
)
)
)
)
(princ)
) 或者更野蛮一点:
(defun c:offins (/ ss is en ln ll)
(while (or (not ss)
(/= (sslength ss) 1))
(princ "\nSelect INSERT: ")
(setq ss (ssget '((0 . "INSERT")))))
(setq is (ssget "X" (list (cons 0 "INSERT")
(assoc 2 (entget (ssname ss 0))))))
(while (setq en (ssname is 0))
(setq ln (cdr (assoc 8 (entget en))))
(and (/= ln (getvar "CLAYER"))
(not (member ln ll))
(setq ll (cons ln ll)))
(ssdel en is))
(command "_.LAYER")
(foreach l ll
(command "_Off" l))
(command "")
(prin1))
-大卫
诡异的
你死定了!
格罗奥安恩 李和大卫,
非常感谢这两个版本回答了我的请求。
为我节省了更多的时间,所以我真的很感激。
非常欢迎你,马尼拉·沃尔夫 大家好,
我经常使用这些LISP,但偶然遇到AutoCAD异常。
我在toolbutton宏中调用David的“Offins”lisp,在选择块以使块图层成为当前图层后,使用AutoCAD的select previous功能选择lisp。这确实有效,除非我在绘图中有数百个块。AutoCAD抛出了以下语句:-
选择对象:p
1067已找到
选择对象:
用户输入太长。
我的目标是单击一个块,使选定块所在的层位于当前层上,然后关闭该块所在的所有其他层,但保持当前层处于打开状态。
我怀疑AutoCAD对上一个命令可以调用的对象数量的限制是硬固定的,那么有没有一种方法可以简单地调整lisp以执行我想要的操作?
您是否在offins命令中传递“P”?
你好,PBe,
我在调用offins命令后调用“P”。这是我的宏:-(哈哈哈-别笑。它几乎成功了)。
^C^C_e;all;;oops;_atttaglay p;;-layer u *;;_layon;(setq ss1 (ssget));\;_ai_molc;!ss1;E !ss1;;oops;_offins p;;_laylock;p;;-layer LO 0;;
“p”不适用于TurnOffBlockLayers lisp。
页:
[1]
2