乐筑天下

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

[编程交流] 块替换名称lisp

[复制链接]

3

主题

11

帖子

8

银币

初来乍到

Rank: 1

铜币
15
发表于 2022-7-5 22:39:52 | 显示全部楼层 |阅读模式
大家好,基本上我需要使用lisp例程更改一个块的名称。
我发现:
  1. (defun c:REP (/ ENT1 BL1 bl2 OLD ODNM)
  2. (command "undo" "begin")
  3. (prompt "\nSelect Replacement Block: ")
  4. (setq bl2 (cdr (assoc 2 (entget (car (entsel))))))
  5. (prompt "Select blocks to replace: ")
  6. (setq ENT1 (ssget))
  7. (setq N (sslength ENT1))
  8. (setq I 0)
  9. (repeat N
  10. (setq BL1 (entget (ssname ENT1 I)))
  11. (setq NWNM (cons 2 bl2))  
  12. (setq OLD (assoc 2 BL1))  
  13. (setq ODNM (cdr OLD))  
  14. (entmod (subst NWNM OLD BL1))
  15. (setq I (1+ I))
  16. )
  17. (command "undo" "end")
  18. (princ)
  19. )

 
并尝试对此进行更改:
  1. (defun c:REPT (/ ENT1 BL1 bl2 OLD ODNM)
  2. (command "undo" "begin")
  3. (setq bl2 (getstring "\nType a new name: "))
  4. (prompt "Select blocks to replace: ")
  5. (setq ENT1 (ssget))
  6. (setq N (sslength ENT1))
  7. (setq I 0)
  8. (repeat N
  9. (setq BL1 (entget (ssname ENT1 I)))
  10. (setq NWNM (cons 2 bl2))  
  11. (setq OLD (assoc 2 BL1))  
  12. (setq ODNM (cdr OLD))  
  13. (entmod (subst NWNM OLD BL1))  (princ NWNM) (princ old)
  14. (setq I (1+ I))
  15. )
  16. (command "undo" "end")
  17. (princ)
  18. )

但第二个程序不起作用。
有人知道为什么吗?
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-5 22:49:14 | 显示全部楼层
欢迎来到CADTutor。
 
您是在谈论重命名图形中的特定块还是用另一个块替换块?
回复

使用道具 举报

3

主题

11

帖子

8

银币

初来乍到

Rank: 1

铜币
15
发表于 2022-7-5 23:02:57 | 显示全部楼层
比如说,在图形中有10个块名为Shape1(它们当然是相同的),我想把其中一个块的名称改为Shape2,所以我将有9个块名为Shape1和1个块名为Shape2,它们看起来仍然一样。
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-5 23:07:00 | 显示全部楼层
这是普通街区吗?我的意思是没有属性,甚至没有动态块。
回复

使用道具 举报

5

主题

1334

帖子

1410

银币

限制会员

铜币
-20
发表于 2022-7-5 23:20:21 | 显示全部楼层
如果是唯一的块引用,请尝试以下代码。。。
 
  1. (defun c:renblref ( / ss n k bl blnl p )
  2. (vl-load-com)
  3. (setq n "")
  4. (while (not (snvalid n))
  5.    (setq n (getstring t "\nSpecify new block reference name: "))
  6. )
  7. (prompt "\nSelect block references to rename")
  8. (setq ss (ssget ":L" '((0 . "INSERT"))))
  9. (setq k -1)
  10. (while (setq bl (ssname ss (setq k (1+ k))))
  11.    (setq blnl (cons (vl-remove-if-not '(lambda ( x ) (member (car x) '(8 2 41 42 43 50 210))) (entget bl)) blnl))
  12. )
  13. (if (not (vl-every '(lambda (x) (equal x (car blnl))) blnl))
  14.    (progn
  15.      (alert "Selected block references with different layers, or names, or scale factors, or rotations, or normals - quitting... Select only unique block references...")
  16.      (exit)
  17.    )
  18.    (progn
  19.      (setq k -1)
  20.      (while (setq bl (ssname ss (setq k (1+ k))))
  21.        (setq p (cdr (assoc 10 (entget bl))))
  22.        (setq p (trans p 0 1))
  23.        (if (eq k 0)
  24.          (progn
  25.            (command "_.explode" bl)
  26.            (while (> (getvar 'cmdactive) 0) (command ""))
  27.            (command "_.copybase" p (ssget "_P") "")
  28.            (command "_.pasteblock" p)
  29.            (command "_.erase" (ssget "_P") "")
  30.            (vla-put-name
  31.              (vla-item (vla-get-blocks
  32.                          (vla-get-activedocument (vlax-get-acad-object))
  33.                        )
  34.                        (vla-get-name (vlax-ename->vla-object (entlast)))
  35.              )
  36.              n
  37.            )
  38.            (vla-auditinfo
  39.              (vla-get-activedocument (vlax-get-acad-object))
  40.              :vlax-true
  41.            )
  42.            (vla-put-name
  43.              (vla-item (vla-get-blocks
  44.                          (vla-get-activedocument (vlax-get-acad-object))
  45.                        )
  46.                        (vla-get-name (vlax-ename->vla-object (entlast)))
  47.              )
  48.              n
  49.            )
  50.          )
  51.          (progn
  52.            (command "_.erase" bl "")
  53.            (command "_.insert" n p 1 1 0)
  54.          )
  55.        )
  56.      )
  57.    )
  58. )
  59. (princ)
  60. )
HTH,M.R。
回复

使用道具 举报

3

主题

11

帖子

8

银币

初来乍到

Rank: 1

铜币
15
发表于 2022-7-5 23:25:16 | 显示全部楼层
谢谢你,这就是我要找的节目!
回复

使用道具 举报

107

主题

615

帖子

575

银币

中流砥柱

Rank: 25

铜币
521
发表于 2022-7-5 23:35:19 | 显示全部楼层
干得好marko_ribar。这个lisp是否可以处理块属性。现在可以了,但是删除里面的所有标签。
 
谢谢
指向图纸
回复

使用道具 举报

3

主题

11

帖子

8

银币

初来乍到

Rank: 1

铜币
15
发表于 2022-7-5 23:48:17 | 显示全部楼层
试试这个http://www.lee-mac.com/copyblock.html
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-11 06:13 , Processed in 0.547804 second(s), 79 queries .

© 2020-2025 乐筑天下

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