http://bbs.mjtd.com/thread-19105-1-1.html
你已经找到alin版主的程序了,为什么还要悬赏?
在alin版主提供的程序之前,我也是用土办法搞定。后来我就一直用align版主的程序了。
当年的土办法如下:
 - ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;更改选定部分块的名字,对相同的其它块不影响,此程序有一定的危险性,操作失败可能删除选择的块
- ;只对选择集中第一个块的名字改变
- (defun C:ChangeSelectBlocksName ( / ssObjects strEntityName listEntityDXF strBlockName fblockpoint bool newblockname strBlockNameT)
- ;;;;;;;;;;;
- ;;;判断有没有某个块名,返回真假
- (defun BlockNameExist (BlockName / bn block_n Bool)
- (SETQ block_n (TBLNEXT "block" T))
- (WHILE block_n
- (setq bn (CDR (ASSOC '2 block_n)))
- (if (= bn BlockName) (setq Bool T))
- (SETQ block_n (TBLNEXT "block"))
- )
- Bool
- )
- ;;;;;;;;;;
- (setq ssObjects (lt:ssget '("\n点选或窗选要改名的块:" ((0 . "insert") (100 . "AcDbBlockReference")))));拾取要更名的块
- (setq strEntityName (ssname ssObjects 0)); strEntityName,取得第1个对象名
- (setq listEntityDXF (entget strEntityName))
- (setq strBlockName (cdr (assoc 2 listEntityDXF)));第1个对象块名
- (setq fblockpoint (cdr (assoc 10 listEntityDXF)));第1个对象定位点
- (princ (strcat "你所选择的块,其块名为:" strBlockName))
- (setq bool T)
- (while bool
- (setq newblockname (getstring "\n 请输入规范的新块名:"))
- (if (BlockNameExist newblockname) (princ "你输入的块名已经存在!请重新取名.........") (setq bool nil))
- );end while
- (if newblockname (progn
- (command "_copybase" fblockpoint ssObjects "");带基点复制选定块
- (command "_erase" ssObjects "");删除选定块
- (setq strBlockNameT (strcat strBlockName "%"));暂时将选定块后缀加%
- (command "_rename" "B" strBlockName strBlockNameT);将选定块以外同名块暂时更名
- (command "zoom" "C" fblockpoint "")
- (command "_pasteclip" fblockpoint)
- (command "_rename" "B" strBlockName newblockname);选定块更名
- (command "_rename" "B" strBlockNameT strBlockName);将选定块以外同名块改回原来的名字
- );end progn
- (exit)
- );end if
- (gc)
- )
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;;_________________________________________________________________
|