将图层重命名为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))
)
) 你看到这个黑魔法了吗?这有点吓人。
http://www.cadtutor.net/forum/showthread.php?t=42431 哈哈,谢谢马克 不,我不明白这就是为什么它是黑魔法
但是我必须做无数次这样的事情,所以我不想填写表格。 我需要一些这样的代码,作为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”。我还是不明白(伊顿)的意思。我试着在谷歌上搜索,但我真的找不到它的定义。
欢迎发表任何意见。谢谢
朗尼 哈哈,很好,适合你的帖子 哈哈,我只是很高兴我的头发(不管怎么说,大部分头发)没有在每次我的代码不起作用时都被拔出来。否则我的化身就是皮卡德船长 ((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)) "-")
) 艾伦,
太棒了!但有一个问题:我该如何向代码中添加IF/THEN关系语句,以便前3个布局在其新名称的末尾添加字符“BOM”?在我们的办公室,前3个布局是为图纸BOM保留的,通常我们只是手动将“BOM”添加到前3个布局的末尾。
我知道IF/THEN语句的基本设置如下:
(if (condition)(then do this)(else do this))
我只是不知道如何将该语句合并到代码中。谢谢
朗尼 ((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