乐筑天下

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

使用公共前缀重命名块-通配符?和/或替换块

[复制链接]

5

主题

107

帖子

3

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
127
发表于 2015-10-28 09:55:52 | 显示全部楼层 |阅读模式

本帖以下内容被隐藏保护;需要你回复后,才能看到!

游客,如果您要查看本帖隐藏内容请回复
回复

使用道具 举报

38

主题

1350

帖子

6

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1502
发表于 2015-10-28 10:05:31 | 显示全部楼层
我记得-插入块名=块名应该对你有用....
回复

使用道具 举报

58

主题

3353

帖子

33

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1761
发表于 2015-10-28 10:18:05 | 显示全部楼层
可能是这样的:
  1. ;; Assuming no dynamic blocks
  2. (defun _rename (newblock pattern / name)
  3.   (if (findfile newblock)
  4.     (vlax-for b (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object)))
  5.       (if (wcmatch (strcase (setq name (vla-get-name b))) (strcase pattern))
  6.         (progn (command ".-INSERT" (strcat name "=" newblock) '(0 0 0) nil)
  7.                (print (strcat name " redefined..."))
  8.         )
  9.       )
  10.     )
  11.   )
  12.   (princ)
  13. )
  14. (_rename "C:\\Path\\newblock.dwg" "*titleblock*")
*编辑以修复丢失的变量
回复

使用道具 举报

5

主题

107

帖子

3

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
127
发表于 2015-10-28 11:16:09 | 显示全部楼层
问题是这些块的名称各不相同,但有一个共同的前缀,不想找到确切的块名称,而是使用通配符。
这个“-插入”命令不允许通配符,重命名命令不允许通配符。
我尝试做类似的事情:
"-插入TitleBlock*=c:\path\newTitleBlock"...但是“TitleBlock*”是一个无效的块名称。
回复

使用道具 举报

5

主题

107

帖子

3

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
127
发表于 2015-10-28 11:22:41 | 显示全部楼层
谢谢Ronjonp,我会用这个看看是否可以用,看起来很有前途(defun c:foo (/ b e el nb)
  (setq nb "titleblock")
  ;; This selection set will fail on modified dynamic blocks ( so be aware :) )
  (if (setq b (ssget "_x" (list '(0 . "insert") (cons 2 (strcat "*" nb "*")))))
    (progn
      ;; Convert selection set to a list
      (setq b (mapcar 'cadr (ssnamex b)))
      ;; If the 'titleblock' definition does not exist in drawing
      (if (null (tblobjname "block" nb))
        ;; Rename the first entry's block definition to 'titleblock'
        (progn
          (setq e (entget (tblobjname "block" (cdr (assoc 2 (entget (car b)))))))
          (entmod
            (subst (cons 2 nb) (assoc 2 (entget (cdr (assoc 330 e)))) (entget (cdr (assoc 330 e))))
          )
        )
      )
      ;; Now cycle through blocks making their name 'titleblock'
      (foreach e b (setq el (entget e)) (entmod (subst (cons 2 nb) (assoc 2 el) el)))
    )
  )
  (princ)
)[/code]
回复

使用道具 举报

58

主题

3353

帖子

33

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1761
发表于 2015-10-28 11:31:12 | 显示全部楼层

谢谢你,先生。。。太完美了!
非常感谢你,它完全符合我需要它做的事情,但无法围绕代码来思考。
[欢呼]
回复

使用道具 举报

5

主题

107

帖子

3

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
127
发表于 2015-10-28 14:51:34 | 显示全部楼层
很高兴你能利用它
回复

使用道具 举报

58

主题

3353

帖子

33

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1761
发表于 2015-10-28 16:16:37 | 显示全部楼层
对不起,我四处寻找这个主题
任何人都可以帮助你 我希望这个lisp可以做到如下:
重命名多个块通过选择旧名称到新名称(MText或文本)引用
例如:
输入:选择1是多块,Seclect2是多MText或文本
块旧名称(A $C1CC872FC) ABCD
块旧名称(A $ C4ADF4549)IJKH
块旧名称(A $ C5BE828AB)JKLM
结果:
阻止旧名称 (A$C1CC872FC) ----> 块新名称 ( ABCD)
阻止旧名称 (A$C4ADF4549) ----> 块新名称 ( IJKH)
阻止旧名称 (A$C5BE828AB) ----> 块新名称 ( JKLM)
.................
谢谢
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-11 00:32 , Processed in 0.868800 second(s), 68 queries .

© 2020-2025 乐筑天下

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