使用公共前缀重命名块-通配符?和/或替换块
**** Hidden Message ***** 我记得-插入块名=块名应该对你有用.... 可能是这样的:;; 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*")*编辑以修复丢失的变量 问题是这些块的名称各不相同,但有一个共同的前缀,不想找到确切的块名称,而是使用通配符。
这个“-插入”命令不允许通配符,重命名命令不允许通配符。
我尝试做类似的事情:
"-插入TitleBlock*=c:\path\newTitleBlock"...但是“TitleBlock*”是一个无效的块名称。
谢谢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)
)
谢谢你,先生。。。太完美了!
非常感谢你,它完全符合我需要它做的事情,但无法围绕代码来思考。
[欢呼] 很高兴你能利用它 对不起,我四处寻找这个主题
任何人都可以帮助你 我希望这个lisp可以做到如下:
重命名多个块通过选择旧名称到新名称(MText或文本)引用
例如:
输入:选择1是多块,Seclect2是多MText或文本
块旧名称(A $C1CC872FC) ABCD
块旧名称(A $ C4ADF4549)IJKH
块旧名称(A $ C5BE828AB)JKLM
结果:
阻止旧名称 (A$C1CC872FC) ----> 块新名称 ( ABCD)
阻止旧名称 (A$C4ADF4549) ----> 块新名称 ( IJKH)
阻止旧名称 (A$C5BE828AB) ----> 块新名称 ( JKLM)
.................
谢谢
页:
[1]