monk 发表于 2022-7-5 22:43:39

图层选择

是否有更清洁/更快的方法来实现这一点;
 
(defun JHSETCOL1 ( /)
(if (not JHCOL1)
                (setq JHCOL1 "7")
                )

(command "-layer" "C" JHCOL1 "*inv*" "")
(command "-layer" "C" JHCOL1 "*dim*" "")
(command "-layer" "C" JHCOL1 "*alias*" "")
       
(princ)

)
 
本质上,我想使用通配符更改选定层的颜色。我有一个DCL框,您可以输入颜色“JHCOL1”
 
对使用通配符的lisp的层选择方面更感兴趣。。。

Lee Mac 发表于 2022-7-5 22:59:51

您可以通过使用逗号分隔模式来匹配多个通配符模式,例如:
(defun jhsetcol1 ( col )
   (if (null col) (setq col 7))
   (command "_.-layer" "_c" col "*inv*,*dim*,*alias*" "")
   (princ)
)
或者,使用Vanilla AutoLISP而不使用-LAYER命令:
(defun jhsetcol2 ( col / def dxf enx lay )
   (if (null col) (setq col 7))
   (while (setq lay (tblnext "layer" (null lay)))
       (if (wcmatch (setq lay (cdr (assoc 2 lay))) "*inv*,*dim*,*alias*")
         (progn
               (setq enx (entget (tblobjname "layer" lay))
                     dxf (assoc 62 enx)
               )
               (entmod (subst (cons 62 (if (minusp (cdr dxf)) (- col) col)) dxf enx))
         )
       )
   )
   (princ)
)
(jhsetcol2 3)或者,使用Visual LISP:
5
请注意,在上述示例中使用wcmatch区分大小写。

monk 发表于 2022-7-5 23:08:15

哇,李,这是你想要的最深入的!
 
完美的
 
我认为我非常需要扩展我的代码知识库!

Lee Mac 发表于 2022-7-5 23:15:09

不客气,和尚询问您是否对代码有任何问题

monk 发表于 2022-7-5 23:21:03

我还没消化呢,快去看看!
 
我得给你买杯啤酒!

monk 发表于 2022-7-5 23:33:34

尝试了你的Visual lisp方法,我现在需要学习Visual lisp!看起来不错!

Lee Mac 发表于 2022-7-5 23:42:55

 
Visual LISP路径可能更简洁,但Vanilla AutoLISP方法将更快-我还建议修改我在上面发布的示例VL代码,以接受VLA文档对象作为参数,这样就不需要多次调用函数来重复检索该对象和应用程序对象。

monk 发表于 2022-7-5 23:47:34

 
在你周末回复后,我开始在afralisp上查找VL,这开始有意义,但当我有时间离开日常工作时,我需要深入研究!
页: [1]
查看完整版本: 图层选择