tedg 发表于 2015-10-28 09:55:52

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

**** Hidden Message *****

mjfarrell 发表于 2015-10-28 10:05:31

我记得-插入块名=块名应该对你有用....

ronjonp 发表于 2015-10-28 10:18:05

可能是这样的:
;; Assuming no dynamic blocks
(defun _rename (newblock pattern / name)
(if (findfile newblock)
    (vlax-for b (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object)))
      (if (wcmatch (strcase (setq name (vla-get-name b))) (strcase pattern))
      (progn (command ".-INSERT" (strcat name "=" newblock) '(0 0 0) nil)
               (print (strcat name " redefined..."))
      )
      )
    )
)
(princ)
)
(_rename "C:\\Path\\newblock.dwg" "*titleblock*")*编辑以修复丢失的变量

tedg 发表于 2015-10-28 11:16:09

问题是这些块的名称各不相同,但有一个共同的前缀,不想找到确切的块名称,而是使用通配符。
这个“-插入”命令不允许通配符,重命名命令不允许通配符。
我尝试做类似的事情:
"-插入TitleBlock*=c:\path\newTitleBlock"...但是“TitleBlock*”是一个无效的块名称。

tedg 发表于 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)
)

ronjonp 发表于 2015-10-28 11:31:12


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

tedg 发表于 2015-10-28 14:51:34

很高兴你能利用它

ronjonp 发表于 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)
.................
谢谢
页: [1]
查看完整版本: 使用公共前缀重命名块-通配符?和/或替换块