乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 90|回复: 14

[编程交流] 将图层重命名为dwgname-1等

[复制链接]

20

主题

81

帖子

61

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
100
发表于 2022-7-6 10:36:41 | 显示全部楼层 |阅读模式
我将一些lisp代码嵌入到一个lisp中,该lisp可以重命名布局并添加一个数字。由于当一个名称已经存在时,它会给出一个“name already exist”错误,因此我首先将所有布局名称更改为somerandomwords#,然后更改为正确的名称,即dwgname(不带.dwg)-1。(也许你可以用一些我不知道的黑色lisp魔术更快地完成。)但它工作得很好,所以不需要任何帮助,我们总是欢迎关于如何做得更好的建议
 
我从这里获得了大部分代码:
http://forums.augi.com/showthread.php?t=77060&highlight=rename+布局
 
  1. (vl-load-com)
  2. (defun c:RenLay ( / n )
  3. (setq n 1)
  4. (vlax-for x (vla-get-Layouts (vla-get-ActiveDocument (vlax-get-acad-object)))
  5.    
  6.    (if (not (eq (strcase (vla-get-name x)) "MODEL"))
  7.              (vla-put-Name x (strcat "somerandomwords" (itoa n)))
  8.    )
  9.    (setq n (1+ n))
  10. )
  11. (setq n 0)
  12. (vlax-for x (vla-get-Layouts (vla-get-ActiveDocument (vlax-get-acad-object)))
  13.    
  14.    (if (not (eq (strcase (vla-get-name x)) "MODEL"))
  15.              (vla-put-Name x (strcat (vl-filename-base (getvar 'dwgname)) "-" (itoa n)))
  16.    )
  17.    (setq n (1+ n))
  18. )
  19. )
回复

使用道具 举报

10

主题

8258

帖子

8335

银币

初来乍到

Rank: 1

铜币
31
发表于 2022-7-6 10:44:57 | 显示全部楼层
你看到这个黑魔法了吗?这有点吓人。
 
http://www.cadtutor.net/forum/showthread.php?t=42431
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 10:47:46 | 显示全部楼层
哈哈,谢谢马克
回复

使用道具 举报

20

主题

81

帖子

61

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
100
发表于 2022-7-6 10:53:21 | 显示全部楼层
不,我不明白这就是为什么它是黑魔法
但是我必须做无数次这样的事情,所以我不想填写表格。
回复

使用道具 举报

17

主题

127

帖子

110

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
85
发表于 2022-7-6 10:54:33 | 显示全部楼层
我需要一些这样的代码,作为lisp的新手,我正在努力理解它。我得到了大部分,但不是全部。有谁愿意帮忙解释一下我在下面标出的不同部分吗?提前谢谢。
 
  1. (setq n 1)

这将变量“n”的值设置为1,非常简单
 
  1. (vlax-for x (vla-get-Layouts (vla-get-ActiveDocument (vlax-get-acad-object)))
  2.   (if (not (eq (strcase (vla-get-name x)) "MODEL"))
  3.       (vla-put-Name x (strcat "somerandomwords" (itoa n)))
  4.   )
  5.   (setq n (1 + n))
  6. )

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

我认为本节从第一步开始采用递增的数字,然后将所有布局选项卡重命名为图形名称,然后每个布局的值为“n”。我还是不明白(伊顿)的意思。我试着在谷歌上搜索,但我真的找不到它的定义。
 
欢迎发表任何意见。谢谢
 
朗尼
回复

使用道具 举报

20

主题

81

帖子

61

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
100
发表于 2022-7-6 11:01:57 | 显示全部楼层
哈哈,很好,适合你的帖子
回复

使用道具 举报

17

主题

127

帖子

110

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
85
发表于 2022-7-6 11:03:53 | 显示全部楼层
哈哈,我只是很高兴我的头发(不管怎么说,大部分头发)没有在每次我的代码不起作用时都被拔出来。否则我的化身就是皮卡德船长
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
438
发表于 2022-7-6 11:07:36 | 显示全部楼层
  1. ((lambda (name)
  2.   (vlax-for x (vla-get-layouts (vla-get-activedocument (vlax-get-acad-object)))
  3.     (or (eq (vla-get-name x) "Model")
  4.         (vl-catch-all-apply
  5.           (function vla-put-name)
  6.           (list x (strcat name (itoa (vla-get-taborder x))))
  7.         )
  8.     )
  9.   )
  10. )
  11. (strcat (vl-filename-base (getvar 'dwgname)) "-")
  12. )
回复

使用道具 举报

17

主题

127

帖子

110

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
85
发表于 2022-7-6 11:14:11 | 显示全部楼层
艾伦,
 
太棒了!但有一个问题:我该如何向代码中添加IF/THEN关系语句,以便前3个布局在其新名称的末尾添加字符“BOM”?在我们的办公室,前3个布局是为图纸BOM保留的,通常我们只是手动将“BOM”添加到前3个布局的末尾。
 
我知道IF/THEN语句的基本设置如下:
  1. (if (condition)(then do this)(else do this))

 
我只是不知道如何将该语句合并到代码中。谢谢
 
朗尼
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
438
发表于 2022-7-6 11:19:08 | 显示全部楼层
  1. ((lambda (name / tab)
  2.   (vlax-for x (vla-get-layouts (vla-get-activedocument (vlax-get-acad-object)))
  3.     (cond ((eq (vla-get-name x) "Model"))
  4.           ((< 0 (setq tab (vla-get-taborder x)) 4)
  5.            (vl-catch-all-apply
  6.              (function vla-put-name)
  7.              (list x (strcat name (itoa tab) " BOM"))
  8.            )
  9.           )
  10.           ((vl-catch-all-apply
  11.              (function vla-put-name)
  12.              (list x (strcat name (itoa (vla-get-taborder x))))
  13.            )
  14.           )
  15.     )
  16.   )
  17. )
  18. (strcat (vl-filename-base (getvar 'dwgname)) "-")
  19. )
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-6 17:08 , Processed in 0.444339 second(s), 72 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表