如果您感兴趣,可以发布 谢谢塔瓦。是的,我很感兴趣。
看看这个。
(defun c:Xref-on-off (/ on_off l nm layers v e)
;;--- Tharwat 29. 04. 2013 ---;;
;; turn on / off xref layers;;
(defun on_off (code ent)
(entmod (subst (cons 62 code) (assoc 62 ent) ent))
)
(while (setq l (tblnext "LAYER" (not l)))
(if (vl-string-search "|" (setq nm (cdr (assoc 2 l))))
(setq layers (cons nm layers))
)
)
(foreach layer layers
(if (minusp (setq v
(cdr (assoc 62 (setq e (entget (tblobjname "LAYER" layer))))
)
)
)
(on_off (abs v) e) (on_off (- v) e)
)
)
(princ)
)
(vl-load-com)
或者简单地说:
(defun c:xonoff ( / col def enx )
(while (setq def (tblnext "LAYER" (null def)))
(if (wcmatch (cdr (assoc 2 def)) "*|*")
(progn
(setq enx (entget (tblobjname "LAYER" (cdr (assoc 2 def))))
col (assoc 62 enx)
)
(entmod (subst (cons 62 (- (cdr col))) col enx))
)
)
)
(princ)
) 谢谢大家的努力!我只想能够关闭和打开图层属性管理器中的反转过滤器选项,而不是图层本身,但这似乎是不可能的。 这将是有用的!谢谢Tharwat和Leemac!
很高兴听到这个
聪明的 干杯 VLISP替代方案。我更喜欢这种方法,只是因为我注意到,如果在有几百层的图形中,你可以用vlax穿透层,速度比tblnext快。至少在我的经验中是这样的。
(defun c:XT (/)
(vlax-for layer (vla-get-layers (vla-get-activedocument (vlax-get-acad-object)))
(if (wcmatch (vla-get-name layer) "*|*")
(vlax-put layer 'layeron (~ (vlax-get layer 'layeron)))
)
)
(princ)
)
(vl-load-com)
(princ)
然而,考虑到您真正想要的是什么,您不能真正地说外部参照处于打开或关闭状态,您只能检查外部参照层或组是否处于打开/关闭状态,从而提供所发布的切换例程,包括我自己的。现在,您可以只卸载外部参照,但这很耗时。
另一个更简单的选项是只有两个命令:一个打开所有外部参照图层,另一个关闭所有外部参照图层。我在启动misc宏等时会保留这些,它们有时很有用。
(defun c:XN (/)
;; turn on all xref layers
(vlax-for layer (vla-get-layers
(cond (*AcadDoc*)
((setq *AcadDoc* (vla-get-activedocument (vlax-get-acad-object))))
)
)
(if (wcmatch (vla-get-name layer) "*|*")
(vlax-put layer 'layeron 1)
)
)
(princ)
)
(defun c:XF (/)
;; turn off all xref layers
(vlax-for layer (vla-get-layers
(cond (*AcadDoc*)
((setq *AcadDoc* (vla-get-activedocument (vlax-get-acad-object))))
)
)
(if (wcmatch (vla-get-name layer) "*|*")
(vlax-put layer 'layeron 0)
)
)
(princ)
)
页:
1
[2]