下边程序可以实现选择范围块的替换,直接修改图块定义的方式可以实现图快的修改,但是这种修改是修改途中所有的图块.以下程序可以随意修改.
;------------------------------------------------------------------------------------ (defun c:ReInsert() (setq old_insert (selName "\nOld Bolck:")) (setq new_insert (selName "\nNew Bolck:")) (if (or (= old_insert nil) (= new_insert nil)) (exit)) (if (= (tblsearch "block" new_insert) nil) (exit)) (prompt "\n选择替换范围") (setq ss (ssget (list (cons 0 "insert") (cons 2 old_insert)))) (if (= ss nil) (exit)) (setq len (sslength ss)) (setq i 0) (setq m 0) (while (< i len) (progn (setq ent (ssname ss i)) (setq ent_list (entget ent)) (if (= (cdr (assoc 2 ent_list)) old_insert) (progn (setq ent_list (subst (cons 2 new_insert) (assoc 2 ent_list) ent_list)) (entmod ent_list) (setq m (1+ m)) ) ) (setq i (1+ i)) ) ) (princ "\n") (print (strcat (itoa m) " Replace!")) (setq ss nil) (princ) ) ;----------------------------------------------------------------------- (defun selName(prompt1) (prompt prompt1) (initget 1 "Name") (setq ent (entsel (strcat "\nName/<Select:>" ))) (cond ((= ent nil) nil) ((= ent "Name") (getstring 1 "\nName:")) (t (progn (setq ent (car ent)) (setq ent_list (entget ent)) (if (= (cdr (assoc 0 ent_list)) "INSERT") (cdr (assoc 2 ent_List)) nil );end if );end progn ); end t; );end cond ); end def
;------------------------------------------------------------------------ (alert "Replace Block !\nPlease type Reinsert to Run!\nCopyright by weizhenzhong") |