mdbdesign 发表于 2022-7-6 14:26:32

切换图层

需要宏或lisp,将保持两个层中只有一个。
如果图层“APPROVED”(已批准)处于打开状态,则图层“Premial”(初步)处于关闭状态,反之亦然。
使用AutoCAD 2002。
非常感谢。

Commandobill 发表于 2022-7-6 14:30:05

嗯,好吧,我可以写一个Lisp程序的切换他们之间的两个。。。这就是你想要的吗?

mdbdesign 发表于 2022-7-6 14:34:10

是的,先生!
确实如此。
如果一个打开,另一个关闭

Lee Mac 发表于 2022-7-6 14:36:16

像这样的?
 
(不好看)
 

(defun c:laysw (/ lay1 lay2)
(vl-load-com)
(and (setq lay1 (tblobjname "LAYER" "APPROVED")
            lay1 (vlax-ename->vla-object lay1))
      (setq lay2 (tblobjname "LAYER" "PRELIMINARY")
            lay2 (vlax-ename->vla-object lay2))
      (cond ((eq :vlax-true (vla-get-layeron lay1))
             (vla-put-layeron lay1 :vlax-false)
             (vla-put-layeron lay2 :vlax-true))
            (t (vla-put-layeron lay2 :vlax-false)
               (vla-put-layeron lay1 :vlax-true))))
(princ))

mdbdesign 发表于 2022-7-6 14:39:58

谢谢李,啤酒我请客。
完美的

Lee Mac 发表于 2022-7-6 14:43:02

 
让它成为克伦堡(1664-非布兰克)

Commandobill 发表于 2022-7-6 14:45:45

相信我,李,你所拥有的比我想要的要好得多,但你说它不好看,所以我把它清理了一点。
 
(defun c:laysw (/ lay1 lay2)
(vl-load-com)
(setq lay1 (vlax-ename->vla-object (tblobjname "LAYER" "APPROVED"))      
       lay2 (vlax-ename->vla-object (tblobjname "LAYER" "PRELIMINARY")))
(if (eq :vlax-true (vla-get-layeron lay1))
    (progn
      (vla-put-layeron lay1 :vlax-false)
          (vla-put-layeron lay2 :vlax-true))
    (progn
      (vla-put-layeron lay2 :vlax-false)
          (vla-put-layeron lay1 :vlax-true)))
(princ))

Commandobill 发表于 2022-7-6 14:50:10

李,有没有一个网站解释一下这些桌子是什么?i、 e.“块”“层”等?

Lee Mac 发表于 2022-7-6 14:54:57

 
我更喜欢我的,因为如果提供了nil,vlax ename->vla object将返回一个错误(因此,如果没有找到该层),在AND语句中,mine将在第一个nil返回时停止。
 
至于有哪些表,请查看tblnext上VLIDE中的帮助

Commandobill 发表于 2022-7-6 14:57:15

除了我在没有图层的情况下运行它时出现的代码错误。嗯。如果是这样的话。
 
谢谢你给了我这个方向。向你学习总是很愉快
页: [1] 2
查看完整版本: 切换图层