马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
本帖最后由 lucas3 于 2014-4-21 21:03 编辑
见过好些改块名的程序,基本都支持匿名块,但是要选一个改一个,这个是edata的作品,可以批量改块名,
但是有个问题,当选择的有匿名块时,能显示匿名块的名字(*u2),但是改名时出错,请大师帮忙看看 - ;1、对选择的块逐一更名。
- ;2、修改块时可以放大图块。
- ;3、出错函数处理,不影响其他lisp的出错函数。
- ;4、修改时间 2011-6-15
- ;5、命令 rb
- (defun c:rb (/ en n i een na naa ens1 )
- (setq *error*_sk0 *error*) ;保存出错处理函数
- (setq *error* *error*_sk1)
- (if (= (getvar "cmdecho") 1) (setvar "cmdecho" 0))
- (setq sk_flagrb1 "e")
- (setq en (ssget '((0 . "INSERT")))
- i 0)
- (if (and en (= (type en) 'PICKSET))
- (progn
- (setq n (sslength en))
- (princ (strcat "\n已选择了"(rtos n)"个块!"))
- (repeat n
- (setq een (entget (setq ens1 (ssname en i))) na (cdr (assoc 2 een)) i (+ i 1))
- (command "zoom" "o" ens1 "")
- (setq sk_flagrb1 "be")
- (prompt (strcat "\n原块名为:" na))(terpri)
- (setq naa (getstring "\n请输入新块名[回车就不修改]:"))
- (if (= naa "")()
- (progn
- (command "rename" "b" na naa)
- )
- )
- (command "zoom" "p")
- )
- (setq sk_flagrb1 "e")
- (setvar "cmdecho" 1)
- ))
- (princ)
- )
- ;出错函数
- ;来自明经通道
- (defun *error*_sk1 (msg)
- (if (= (getvar "cmdecho") 1) (setvar "cmdecho" 0))
- (if (wcmatch (strcase msg t) "*break,*cancel*,*exit*,*取消*")
- (if (= (getvar "LOCALE") "CHS")
- (princ "\n用户按了<Esc>强制退出")
- (princ "\nYou cancelled The operation!")
- )
-
- (princ (strcat "\n" msg))
- )
- (terpri)
- (vla-EndUndoMark ;回退
- (vla-get-ActiveDocument (vlax-get-acad-object))
- )
-
- (if (= sk_flagrb1 "be") (command "zoom" "p"))
- (setvar "cmdecho" 1)
- (setq *error* *error*_sk0)
- (princ)
- )
|