CADkitt 发表于 2022-7-6 10:36:41

将图层重命名为dwgname-1等

我将一些lisp代码嵌入到一个lisp中,该lisp可以重命名布局并添加一个数字。由于当一个名称已经存在时,它会给出一个“name already exist”错误,因此我首先将所有布局名称更改为somerandomwords#,然后更改为正确的名称,即dwgname(不带.dwg)-1。(也许你可以用一些我不知道的黑色lisp魔术更快地完成。)但它工作得很好,所以不需要任何帮助,我们总是欢迎关于如何做得更好的建议
 
我从这里获得了大部分代码:
http://forums.augi.com/showthread.php?t=77060&highlight=rename+布局
 


(vl-load-com)
(defun c:RenLay ( / n )
(setq n 1)
(vlax-for x (vla-get-Layouts (vla-get-ActiveDocument (vlax-get-acad-object)))
   
   (if (not (eq (strcase (vla-get-name x)) "MODEL"))
           (vla-put-Name x (strcat "somerandomwords" (itoa n)))
   )
   (setq n (1+ n))
)
(setq n 0)
(vlax-for x (vla-get-Layouts (vla-get-ActiveDocument (vlax-get-acad-object)))
   
   (if (not (eq (strcase (vla-get-name x)) "MODEL"))
           (vla-put-Name x (strcat (vl-filename-base (getvar 'dwgname)) "-" (itoa n)))
   )
   (setq n (1+ n))
)
)

ReMark 发表于 2022-7-6 10:44:57

你看到这个黑魔法了吗?这有点吓人。
 
http://www.cadtutor.net/forum/showthread.php?t=42431

Lee Mac 发表于 2022-7-6 10:47:46

哈哈,谢谢马克

CADkitt 发表于 2022-7-6 10:53:21

不,我不明白这就是为什么它是黑魔法
但是我必须做无数次这样的事情,所以我不想填写表格。

lfe011969 发表于 2022-7-6 10:54:33

我需要一些这样的代码,作为lisp的新手,我正在努力理解它。我得到了大部分,但不是全部。有谁愿意帮忙解释一下我在下面标出的不同部分吗?提前谢谢。
 
(setq n 1)
这将变量“n”的值设置为1,非常简单
 
(vlax-for x (vla-get-Layouts (vla-get-ActiveDocument (vlax-get-acad-object)))

(if (not (eq (strcase (vla-get-name x)) "MODEL"))
      (vla-put-Name x (strcat "somerandomwords" (itoa n)))
)
(setq n (1 + n))
)
好吧,突然不那么容易了。我认为这部分获取布局属性,然后使用参数,如果布局选项卡名称不等于“MODEL”,则将数字递增1,直到没有更多的布局可供测试。我接近了吗?在这行代码中,“somerandomwords”和(itoa n)是什么意思
(vla-put-Name x (strcat "somerandomwords" (itoa n)))
(setq n 0)
(vlax-for x (vla-get-Layouts (vla-get-ActiveDocument (vlax-get-acad-object)))

   (if (not (eq (strcase (vla-get-name x)) "MODEL"))
       (vla-put-Name x (strcat (vl-filename-base (getvar 'dwgname)) "-" (itoa n)))
   )
   (set q n (1 + n))
)
)
我认为本节从第一步开始采用递增的数字,然后将所有布局选项卡重命名为图形名称,然后每个布局的值为“n”。我还是不明白(伊顿)的意思。我试着在谷歌上搜索,但我真的找不到它的定义。
 
欢迎发表任何意见。谢谢
 
朗尼

CADkitt 发表于 2022-7-6 11:01:57

哈哈,很好,适合你的帖子

lfe011969 发表于 2022-7-6 11:03:53

哈哈,我只是很高兴我的头发(不管怎么说,大部分头发)没有在每次我的代码不起作用时都被拔出来。否则我的化身就是皮卡德船长

alanjt 发表于 2022-7-6 11:07:36

((lambda (name)
(vlax-for x (vla-get-layouts (vla-get-activedocument (vlax-get-acad-object)))
    (or (eq (vla-get-name x) "Model")
      (vl-catch-all-apply
          (function vla-put-name)
          (list x (strcat name (itoa (vla-get-taborder x))))
      )
    )
)
)
(strcat (vl-filename-base (getvar 'dwgname)) "-")
)

lfe011969 发表于 2022-7-6 11:14:11

艾伦,
 
太棒了!但有一个问题:我该如何向代码中添加IF/THEN关系语句,以便前3个布局在其新名称的末尾添加字符“BOM”?在我们的办公室,前3个布局是为图纸BOM保留的,通常我们只是手动将“BOM”添加到前3个布局的末尾。
 
我知道IF/THEN语句的基本设置如下:
(if (condition)(then do this)(else do this))
 
我只是不知道如何将该语句合并到代码中。谢谢
 
朗尼

alanjt 发表于 2022-7-6 11:19:08

((lambda (name / tab)
(vlax-for x (vla-get-layouts (vla-get-activedocument (vlax-get-acad-object)))
    (cond ((eq (vla-get-name x) "Model"))
          ((< 0 (setq tab (vla-get-taborder x)) 4)
         (vl-catch-all-apply
             (function vla-put-name)
             (list x (strcat name (itoa tab) " BOM"))
         )
          )
          ((vl-catch-all-apply
             (function vla-put-name)
             (list x (strcat name (itoa (vla-get-taborder x))))
         )
          )
    )
)
)
(strcat (vl-filename-base (getvar 'dwgname)) "-")
)
页: [1] 2
查看完整版本: 将图层重命名为dwgname-1等