Henryjohn 发表于 2022-7-6 15:24:38

使用lisp修改图层

对不起,如果这一切都已经准备好处理,但我找不到任何东西时,我做了搜索。
使用2008年和目前获得的所有图层(约60)具有相同的笔颜色、线型和厚度的图纸。
因此,所有线路都是相同的。
由于我从这个partiuclur源获得的所有图形都具有相同的图层和图层名称,我认为可能会有一个lisp例程,它将笔的颜色、线型和厚度更改为预先确定的值,这样我就可以用新的图层值保存图形。
你可以假设一个particluer层名称是“water\u tap”,这样我就可以看到例程中发生了什么,然后我可以通过复制所有其他层名称的相关代码,在例程中添加所有需要更改的其他层名称。
希望这有意义。
当做

Lee Mac 发表于 2022-7-6 15:34:30

这可能与:
http://www.cadtutor.net/forum/showthread.php?t=30508
 
看看这是否有点帮助。

Lee Mac 发表于 2022-7-6 15:46:41

我确信还有比这更好的方法,但我正在试验mapcar。。
 

; w ~ layer name
; x ~ layer colour
; y ~ linetype
; z ~ lineweight (0 - 2.11)

(defun laychng (w x y z)
   (if    (not (tblsearch "Layer" w))
   (progn
       (setvar "cmdecho" 0)
       (command "-layer" "m" w "c" x w "lt" y w "lw" z w "")
       (setvar "cmdecho" 1)
   ) ;_end progn
   (progn
       (setvar "cmdecho" 0)
       (command "-layer" "c" x w "lt" y w "lw" z w "")
       (setvar "cmdecho" 1)
   ) ;_end progn
   ) ;_end if
   (princ)
) ;_end defun

(defun c:layerchanger ()
   (mapcar
   'laychng
   '("water_tap" "B-layer" "C-layer" "D-layer" "E-layer") ; w
   '("1" "2" "3" "4" "5") ; x
   '("HIDDEN" "HIDDEN" "HIDDEN" "HIDDEN" "HIDDEN") ; y
   '("0.2" "0.3" "0.8" "1.5" "2.1") ; z
      ) ;_end mapcar
   (princ)
) ;_end defun

Henryjohn 发表于 2022-7-6 15:51:51

谢谢你这么快回复我。
有没有办法重写代码,使每一层都有自己的代码行来更改笔的颜色、线宽和线型,以便更容易修改某一层(例如第34层)
 
如果我没看错的话
“(“water_tap”“B-layer”“C-layer”“D-layer”“E-layer”);w
'("1" "2" "3" "4" "5") ; x
“(HIDDEN”“HIDDEN”“HIDDEN”“HIDDEN”“HIDDEN”);y
'("0.2" "0.3" "0.8" "1.5" "2.1") ; z
 
我必须沿着直线数到第34位才能更改单个参数。
这有意义吗?
 
当做
亨利

Lee Mac 发表于 2022-7-6 16:01:05

我知道你来自哪里,我意识到这不是最好的方式,但正如我所说,我想试试mapcar
 
试试这个
 

; w ~ layer name
; x ~ colour
; y ~ linetype
; z ~ lineweight

(defun c:test (/ *error* varlist oldvars)
   (defun *error* (msg)
   (mapcar 'setvar varlist oldvars)
   (if (= msg "")
       (princ "\nFunction Complete.")
       (princ "\nError or Esc Pressed.")
   ) ;_end if
   (princ)
   ) ;_end defun
   (setq varlist (list "CMDECHO" "CLAYER")
   oldvars (mapcar 'getvar varlist)
   ) ;_end setq
   (setvar "cmdecho" 0)

   (defun chnglay (w x y z)
   (if (not (tblsearch "Layer" w))
       (command "-layer" "m" w "c" x w "lt" y w "lw" z w "")
       (command "-layer" "c" x w "lt" y w "lw" z w "")
   ) ;_end if
   (princ)
   ) ;_end defun

   (chnglay "water_tap" "2" "Hidden" "1.5")

   (*error* "")
   (princ)
) ;_end defun

 
添加更多线,如高亮显示的示例,以更改更多层。

Henryjohn 发表于 2022-7-6 16:08:55

好极了,好极了,好极了。。。。。但我有一个问题。
因为我有大约20层,从单词water开始(例如water\u tap、water\u hose、water\u conn等)
lisp是否具有等价的通配符,例如wat*
因此,你可以用一行文字来改变20层,而不是用20行文字来改变20层
因为我对所有以水开始的层都有相同的属性,所以在本例中,1行文本可以更改为20。
希望这有意义

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

试试这个:
 

; w ~ layer name
; x ~ colour
; y ~ linetype
; z ~ lineweight

(defun c:test (/ *error* varlist oldvars)
   (defun *error* (msg)
   (mapcar 'setvar varlist oldvars)
   (if (= msg "")
       (princ "\nFunction Complete.")
       (princ "\nError or Esc Pressed.")
   ) ;_end if
   (princ)
   ) ;_end defun
   (setq varlist (list "CMDECHO" "CLAYER")
   oldvars (mapcar 'getvar varlist)
   ) ;_end setq
   (setvar "cmdecho" 0)

   (defun chnglay (w x y z)
   (if (not (tblsearch "Layer" w))
       (command "-layer" "m" w "c" x w "lt" y w "lw" z w "")
       (command "-layer" "c" x w "lt" y w "lw" z w "")
   ) ;_end if
   (princ)
   ) ;_end defun

   (defun GetLayerList    ()
   (vl-load-com)
   (vlax-for l
         (vla-get-Layers
         (vla-get-ActiveDocument
               (vlax-get-acad-object)
         ) ;_end vla-get-ActiveDocument
         ) ;_end vla-get-Layers
       (setq oLst
            (cons (vla-get-Name l) oLst)
       ) ; end setq
   ) ; end vlax-for
   (reverse oLst)
   ) ; end of GetLayerList
   (GetLayerList)

   (if    (= oLst nil)
   (alert "No Layers Retrieved.")
   ) ;_end if

   (foreach lay oLst
   (if (wcmatch lay "wat*")
       (chnglay lay "2" "Hidden" "1.5")
   ) ;_end if
   ) ;_end foreach

   (*error* "")
   (princ)
) ;_end defun


 
添加额外代码,如为不同的通配符匹配突出显示的代码。

Henryjohn 发表于 2022-7-6 16:21:26

谢谢李。。。。在你的上一篇文章和前一篇文章之间,我想出了一个宏,它完全符合我的要求。
我迫不及待地开始学习lisp,希望我能创建自己的基本例程。
祝你新年快乐。
 
我很快就会发布一篇关于插入区块的新帖子。希望你能再次帮助我。
 
 
当做
亨利·约翰

Lee Mac 发表于 2022-7-6 16:28:17

欢迎你,亨利,很高兴你能解决你的问题。
页: [1]
查看完整版本: 使用lisp修改图层