25
61
38
初露锋芒
;;;;;; Change the text of an entity.;;;(defun cht_te () (setq sslen (sslength sset)) (initget "Globally Individually Retype") (setq ans (getkword "\nSearch and replace text. Individually/Retype/<Globally>:")) (setq cht_ot (getvar "texteval")) (setvar "texteval" 1) (cond ((= ans "Individually") (if (= (getvar "popups") 1) (progn (initget "Yes No") (setq ans (getkword "\nEdit text in dialogue? <Yes>:")) ) (setq ans "No") ) (while (> sslen 0) (redraw (setq sn (ssname sset (setq sslen (1- sslen)))) 3) (setq ss (ssadd)) (ssadd (ssname sset sslen) ss) (if (= ans "No") (chgtext ss) (command "_.DDEDIT" sn "") ) (redraw sn 1) ) ) ((= ans "Retype") (while (> sslen 0) (setq ent (entget(ssname sset (setq sslen (1- sslen))))) (redraw (cdr(assoc -1 ent)) 3) (prompt (strcat "\nOld text: " (cdr(assoc 1 ent)))) (setq nt (getstring T "\nNew text: ")) (redraw (cdr(assoc -1 ent)) 1) (if (> (strlen nt) 0) (entmod (subst (cons 1 nt) (assoc 1 ent) ent)) ) ) ) (T (chgtext sset) ; Change 'em all ) ) (setvar "texteval" cht_ot));;;;;; The old CHGTEXT command - rudimentary text editor;;;;;;(defun C:CHGTEXT () (chgtext nil))(defun chgtext (objs / last_o tot_o ent o_str n_str st s_temp n_slen o_slen si chf chm cont ans) (if (null objs) (setq objs (ssget)) ; Select objects if running standalone ) (setq chm 0) (if objs (progn ; If any objects selected (if (= (type objs) 'ENAME) (progn (setq ent (entget objs)) (princ (strcat "\nExisting string: " (cdr (assoc 1 ent)))) ) (if (= (sslength objs) 1) (progn (setq ent (entget (ssname objs 0))) (princ (strcat "\nExisting string: " (cdr (assoc 1 ent)))) ) ) ) (setq o_str (getstring "\nMatch string : " t)) (setq o_slen (strlen o_str)) (if (/= o_slen 0) (progn (setq n_str (getstring "\nNew string : " t)) (setq n_slen (strlen n_str)) (setq last_o 0 tot_o (if (= (type objs) 'ENAME) 1 (sslength objs) ) ) (while (< last_o tot_o) ; For each selected object... (if (= "TEXT" ; Look for TEXT entity type (group 0) (cdr (assoc 0 (setq ent (entget (ssname objs last_o)))))) (progn (setq chf nil si 1) (setq s_temp (cdr (assoc 1 ent))) (while (= o_slen (strlen (setq st (substr s_temp si o_slen)))) (if (= st o_str) (progn (setq s_temp (strcat (if (> si 1) (substr s_temp 1 (1- si)) "" ) n_str (substr s_temp (+ si o_slen)) ) ) (setq chf t) ; Found old string (setq si (+ si n_slen)) ) (setq si (1+ si)) ) ) (if chf (progn ; Substitute new string for old ; Modify the TEXT entity (entmod (subst (cons 1 s_temp) (assoc 1 ent) ent)) (setq chm (1+ chm)) ) )