乐筑天下

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

[编程交流] 重命名多个块

[复制链接]

1

主题

3

帖子

2

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 06:12:31 | 显示全部楼层 |阅读模式
您好,我有一块门、窗和家具,我想通过删除“mm”之后的所有字符和前缀以“M”开头的方式对它们进行一次性重命名
例如:“M_单冲-0915 x 2134mm-180048-1级”至单冲-0915 x 2134mm
还有窗户和家具
我附上了一个非常简单的图纸,任何人都可以为我测试。
 
更具体地说:
1-我想通过选择或整个图形“X”一次性重命名上述所有块
2-我想有可能添加列表(自定义),比如删除单词“Breuer”后的字符,大小写与“mm”相同
 
小Lisp程序(复制),但缺少我上面提到的功能:
 
  1. (defun c:test (/ DATA I NEW OLD SS)
  2. (if (and (setq ss (ssget "_+.:E:S" '((0 . "INSERT"))));; select single insert
  3.    (setq data (entget (ssname ss 0)));; object definition data
  4.    (setq old (cdr (assoc 2 data)));; block name
  5.    (not (assoc 1 (tblsearch "BLOCK" old)));; not Xref
  6.    (setq i (vl-string-search "mm" old));; mm position
  7.    (setq new (substr old 1 (+ i 2)));; new name
  8.    (not (tblsearch "BLOCK" new));; search if name exists
  9.      );; and
  10.     (command "._rename" "_block" old new)
  11.    );; if
  12. (princ)
  13. );; test

 
 
谢谢
样品图纸
回复

使用道具 举报

1

主题

475

帖子

481

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 06:27:50 | 显示全部楼层
欢迎来到CADTutor shehab10!
 
这些代码行提醒了我一些事情。。。
 
问题是,块通常具有相同的名称,不包括ID和标高,AutoCAD不允许具有相同名称的块,
一种可能的方法是只从块名中删除级别部分,如果合适的话,如下所示
 
  1. (defun c:test (/ DATA I N NEW OLD SS)
  2. (if (setq ss  (ssget "_X" '((0 . "INSERT"))));; select insert
  3.    (progn
  4.      (setq n (sslength ss));; sets n with the selection set lenght
  5.      (while (not (minusp (setq n (1- n))));; while n not negative, set n -1
  6. (if (and (setq data (entget (ssname ss n)));; object definition data
  7.   (setq old (cdr (assoc 2 data)));; block name
  8.   (not (assoc 1 (tblsearch "BLOCK" old)));; not Xref
  9.   (setq i (vl-string-search "Level" old));; Level position
  10.   (setq i (1- i));; - before Level
  11.   (setq new (substr old 1 i));; new name removing the level
  12.   (not (tblsearch "BLOCK" new));; search if name exists, and if not
  13.     );; and
  14.   (command "._rename" "_block" old new);; rename the block
  15. );; if
  16.      );; while
  17.    );; progn
  18. );; if
  19. (princ)
  20. );; test

 
希望有帮助
亨里克
回复

使用道具 举报

1

主题

3

帖子

2

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 06:40:24 | 显示全部楼层
Yope-hmsilva这让我想起了你在其他地方,我的块不会具有相同的名称,因为revit不允许两个族(块)具有相同的名称。此外,我希望lisp将具有跳过两个具有相同名称或异常的对象中的一个的功能,以消除处理两个与可以在lisp中编写的例程具有相同名称的块(请原谅,我只是猜测我对lisp不太了解)。
 
我实验了m而不是level,它确实删除了mm(我可能只需要它来识别单元,但是如果在lisp中它很乏味,那么它就不那么重要了)
我在“m”之外添加了单词“Breuer”作为泛型词的列表,以删除后面的字符,但无论如何它都不起作用!
另外,你能给我添加一行代码,可以添加到上述代码中,以删除前缀M_(我将使用它作为缩写我的块名的额外选项)?
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-6 06:47:58 | 显示全部楼层
 
Henrique,您已经在函数ssget之前添加了模式字符串
回复

使用道具 举报

1

主题

475

帖子

481

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 06:54:10 | 显示全部楼层
接得好,塔瓦
已经修好了,昨天,我几乎睡着了。。。
回复

使用道具 举报

1

主题

3

帖子

2

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 07:07:01 | 显示全部楼层
如果在前缀“M_”之前有什么东西,我想删除它和它之前的任何东西,那该怎么办?
回复

使用道具 举报

1

主题

475

帖子

481

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 07:19:53 | 显示全部楼层
 
也许是这样的
 
  1. (defun c:test (/ DATA I II N NEW OLD SS)
  2. (if (setq ss (ssget "_X" '((0 . "INSERT"))));; select insert
  3.    (progn
  4.      (setq n (sslength ss));; sets n with the selection set lenght
  5.      (while (not (minusp (setq n (1- n))));; while n not negative, set n -1
  6. (if (and (setq data (entget (ssname ss n)));; object definition data
  7.   (setq old (cdr (assoc 2 data)));; block name
  8.   (not (assoc 1 (tblsearch "BLOCK" old)));; not Xref
  9.   (setq i (vl-string-search "Level" old));; Level position
  10.   (setq i (1- i));; - before Level
  11.   (if (setq ii (vl-string-search "M_" old));; M_ position
  12.     (setq ii (+ ii 3));; after M_ position
  13.     (setq ii 1);;if not M_ position
  14.     );; if
  15.   (setq new (substr old ii i));; new name removing the level
  16.   (not (tblsearch "BLOCK" new));; search if name exists, and if not
  17.     );; and
  18.   (command "._rename" "_block" old new);; rename the block
  19. );; if
  20.      );; while
  21.    );; progn
  22. );; if
  23. (princ)
  24. );; test

 
亨里克
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-10 18:51 , Processed in 0.467289 second(s), 66 queries .

© 2020-2025 乐筑天下

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