Tharwat 发表于 2022-7-6 07:12:01

如果只想打开和关闭外部参照层,而与过滤器无关,那么我编写了代码(lisp而不是宏)和
如果您感兴趣,可以发布

guran 发表于 2022-7-6 07:14:12

谢谢塔瓦。是的,我很感兴趣。

Tharwat 发表于 2022-7-6 07:19:34

 
看看这个。
 

(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)

Lee Mac 发表于 2022-7-6 07:21:29

或者简单地说:
(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)
)

guran 发表于 2022-7-6 07:24:51

谢谢大家的努力!我只想能够关闭和打开图层属性管理器中的反转过滤器选项,而不是图层本身,但这似乎是不可能的。

nod684 发表于 2022-7-6 07:28:00

这将是有用的!谢谢Tharwat和Leemac!

Tharwat 发表于 2022-7-6 07:30:11

 
很高兴听到这个

pBe 发表于 2022-7-6 07:34:14

 
聪明的

Lee Mac 发表于 2022-7-6 07:36:23

干杯

alanjt 发表于 2022-7-6 07:40:43

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]
查看完整版本: 反转层过滤器开/关