《工程设计CAD及自动化》1997年第3期
一个批量修改文字参数的程序 黄 昆
江汉石油规划设计研究院
| 在AutoCAD
R12.0以上版本中,关于文字内容、字型、比例等参数的修改,可以通过系统提供的(ddmodity)对话框来完成,但遗憾的是它只能对单个字符串的参数进行修改,如果一幅图中有大量的文字要修改,那么用这个工具就十分麻烦,能不能对图中的文字进行一次处理,就完成修改呢,经过反复分析研究,用lisp语言编程可以解决这个问题。
程序清单及功能 程序功能:批量修改文字参数 (defun enttb() (setq entb()) (setq k (getstring"\n 1.全部修改 2.选择修改<1>:")) (cond ( (or( = k "1")(= k "")) (setq ss(ssget "x" (list (cons 0 "text"))));"\n请选择文字:" ) ( (= k "2") (setq ss(ssget)) ;选择文字实体 ) ) (setq n (sslength ss)) (setq j 0) (repeat n (setq entt (entget(ssname ss j))) (setq entb (cons entt entb)) (setq j (+ j 1)) ) );end defun;entb=(entt1 entt2 ...) ;; ;;* *********** MAIN PROGRAM ********** (defun c:zx() (enttb) (setq str(getstring"\n 请选择--字型Zx/比例Bl/高度Gd/层c<z>:")) (setq i 0) (cond ( (or (= str "z")(= str "Z") ) (setq szx (getstring"\n 请输入修改字型:")) ) ( (OR(= str "b")(= STR "B") ) (setq sbl (getREAL"\n 请输入修改比例:")) ) ( (OR(= str "g")(= STR "G") ) (setq sgd (getREAL"\n 请输入修改高度:")) ) ( (OR(= str "c")(= STR "C") ) (setq sc (getstring"\n 请输入修改层名:")) ) ) (while (setq entt (nth i entb)) (cond ( (or (= str "z")(= str "Z") ) (setq entt(subst (cons 7 szx)(assoc 7 entt)entt)) ) ( (OR(= str "b")(= STR "B") ) (setq entt(subst (cons 41 sbl)(assoc 41 entt)entt)) ) ( (OR(= str "g")(= STR "G") ) (setq entt(subst (cons 40 sgd)(assoc 40 entt)entt)) ) ( (OR(= str "c")(= STR "C") ) (setq entt(subst (cons 8 sc)(assoc 8 entt)entt)) ) );end cond (entmod entt) (setq i (1+ i)) );end while );end defun ;; ;;* ************THE END*********** 程序的使用十分简便,首先,将以上程序WZXG.LSP拷贝到CAD可找到的目录下(如\ACAD\SUPPORT),然后操作如下: command (load"wzxg"),回车,这时产生一个新命令ZX,接着在命令符后,输入ZX: co mmand zx ,中文显示如下: "请选择->字型Zx/比例Bl/高度Gd/层c<z>:" 输入b,进行字型修改,并要求输入字型; 输入g,进行比例修改,输入y ,进行高度改,输入c,进行层修改.按提示输入参数即可实现相应的功能。 本程序就文字实体的四个参数作了讨论,并在AUTOCAD R12.0版,奔腾586机上运行通过,用户还可以按此方法对其他实体的参数进行修改,以及别的实体参数修改上,效果一定不错。 |