增加 AUTOCAD在文字处理上的功能 说明 在用 AUTOCAD制图的过程中,必然要写说明性文字。当然在制表和写设计说明时, 文字量就更大, AUTOCAD写文字并无难处,难的是怎么使写出的文字的尺寸、间距、对 齐等方面象文字处理软件那样合适。若用 AUTOCAD基本命令来处理,会很麻烦,并影响 作图速度。为此我编写了一些小程序供大家使用。这次我提供如下两个程序: 二、程序的安装及使用 先把ZDDQ.LSP和ZDJT.LSP拷贝到一个特定的目录下(如CR12 SUPPORT或 C\TCHISYS等)。用户可以将持到 AUTOCAD或其它开发软件的系统菜单上,通过菜单来 调动,也可以 AUTOCAD环境 COMMAND后面用LOAD命令装入,形成一个附加命令 ZDDQ或ZDST 1.将程序调用装入系统菜单 先找到菜单源文件 ACAD MNU,并编辑它。在***POP1最后加下面内容。 [字的对齐]~C~C^P(“ZDDQ);ZDDQ;^P [字的间距调整]^C^C^P( LOADZDIT”):ZDJT:^P。用鼠标点取下拉菜单即可调用 2.命令调用ZDDQ.LSP、ZDJT.LSP 在 COMMAND后面输入( LOAD" ZDDQ”)或( LOADZDJT),产生可用命令ZDDQ、ZD 击入命令按提示操作 3.两程序在使用中基本为中文提示,易用,现已在我院网络上全面使用。 4.两程序适用于 AUTOCAD R10.0,R11R12.0。 三、操作过程 1.多文字对齐。提示如下:(其中“: 选择对齐方向如下:1横向对齐(Y座标一致2纵向对齐(X座标一致) 点取对齐点:(即用鼠标在屏上点取对齐的位置,缺省后,提出让你点取参 照目标字,这样后面选上的文字与对齐) 选取文字(自动滤非文字类实体,且不用考虑次序,开窗口选也可) 2.多文字的间距调整,提示如下: 文字间距调整方式如下: 1.水平2.垂直3.斜向 若选“L”或缺省,则: *输入这组文字起点 *按选后次序选取文字 2其它类推。 *输入文字垂直间距值(或用鼠标点取) 其它同①。 选“3”,则: *按先后次序选取文字
增加 AUTOCAD 在文字处理上的功能 一、说明 在用 AUTOCAD 制图的过程中,必然要写说明性文字。当然在制表和写设计说明时, 文字量就更大,AUTOCAD 写文字并无难处,难的是怎么使写出的文字的尺寸、间距、对 齐等方面象文字处理软件那样合适。若用 AUTOCAD 基本命令来处理,会很麻烦,并影响 作图速度。为此我编写了一些小程序供大家使用。这次我提供如下两个程序: 二、程序的安装及使用 先把 ZDDQ.LSP 和 ZDJT.LSP 拷贝到一个特定的目录下(如:C:\R12\SUPPORT 或 C:\TCH\SYS 等)。用户可以将持到 AUTOCAD 或其它开发软件的系统菜单上,通过菜单来 调动,也可以 AUTOCAD 环境 COMMAND 后面用 LOAD 命令装入,形成一个附加命令 ZDDQ 或 ZDST。 1.将程序调用装入系统菜单 先找到菜单源文件 ACAD.MNU,并编辑它。在* * * POP1 最后加下面内容。 [字的对齐]^C^C^P(“ZDDQ”);ZDDQ;^P。 [字的间距调整]^C^C^P(LOAD“ZDJT”);ZDJT;^P。用鼠标点取下拉菜单即可调用。 2.命令调 用 ZDDQ.LSP、ZDJT.LSP 在 COMMAND 后面输入(LOAD“ZDDQ”)或(LOAD“ZDJT”),产生可用命令 ZDDQ、ZD JT,击入命令按提示操作。 3.两程序在使用中基本为中文提示,易用,现已在我院网络上全面使用。 4.两程序适用于 AUTOCAD R10.0, R11,R12.0。 三、操作过程 1.多文字对齐。提示如下:(其中“<>”中为缺省的选项) 选择对齐方式如下:L 左/R 右/C 中心/M 中点: 选择对齐方向如下:1 横向对齐(Y 座标一致). 2 纵向对齐(X 座标一致) : 点取对齐点:(即用鼠标在屏上点取对齐的位置,缺省后,提出让你点取参 照目标字,这样后面选上的文字与对齐) 选取文字(自动滤非文字类实体,且不用考虑次序,开窗口选也可)。 2.多文字的间距调整,提示如下: 文字间距调整方式如下: 1. 水平 2. 垂直 3. 斜向 : ① 若选“1”或缺省值,则 * 输入各文字水平距值(或用鼠标点取) * 选择对齐方式:(C 中心/L 左侧/R 右侧/H 中心) 1 若选“L”或缺省,则: * 输入这组文字起点。 * 按选后次序选取文字。 2 其它类推。 选“2”,则: * 输入文字垂直间距值(或用鼠标点取): 其它同①。 选“3”,则: * 按先后次序选取文字
*点取斜线起点(即文字排列方向线) *点取斜线终点 (结果所选文字在斜线起点和终点间等分排列)。 四、源程序如下: 1.多文字的对齐 199603.04 ( defun c: iddq(/i ntxsize ent entI ol o2 03 o4 a aa oldsiaze newsize index bb cc po pl p pp ento b ss al a2 a3 a4 a5 a6) ( princ"ln") princ"选择对齐方式如下:") princ) (etqa( getstring"nL左R右C中心M中点:") (setq a( strcase a)) (cond((=a"L")(setq al 0 a2 11 a4 10 a5 10)) ((=aM)(setq al I a2 10 a4 11 a5 ID)) ( =a"R"(setq al 2 a2 10 a4 11 a5 Il)) (=a C"(setq al 4 a2 10 a4 11 a5 Il)) ( setq b( getint"hnl.横向对齐(使Y座标一样)2.纵向对齐(使X座标一样):") ( setq txsize( setpoint"n点取对齐点:") ( princ"ln") princ"选取文字(自动滤去非文字实体)") (princ) (whie(<i10000 (setq ss(ssget)) (setq index 0) (setq ento(entget(ssname ss index))) if(=(edr(assoc 72 ento))O) (if (=al o)(setq a5 11)(setq a5 10)) (setq index(+ I index) setq type(assoc O ento)) if(="TEXT"(cdr type) ( setq p(cons(car pO)al) (setq pp(subst p po entO) (setq old (assoc 1l pp)) (if(=a"L")
* 点取斜线起点(即文字排列方向线)。 * 点取斜线终点。 (结果所选文字在斜线起点和终点间等分排列)。 四、源程序如下: 1.多文字的对齐: ;-------------------- ; 1996.03.04 ; (defun c:zddq ( / i n txsize ent ent1 o1 o2 o3 o4 a aa oldsiaze newsize index bb cc p0 p1 p pp ent0 b ss a1 a2 a3 a4 a5 a6) (setq i 1) (princ "\n")(princ "选择对齐方式如下:")(princ) (setq a (getstring "\n L 左/R 右/C 中心/M 中点 : ")) (if (= a "")(setq a "L")) (setq a (strcase a)) (cond ((= a "L")(setq a1 0 a2 11 a4 10 a5 10)) ((= a "M")(setq a1 1 a2 10 a4 11 a5 11)) ((= a "R")(setq a1 2 a2 10 a4 11 a5 11)) ((= a "C")(setq a1 4 a2 10 a4 11 a5 11)) ) (setq b (getint "\n1.横向对齐(使 Y 座标一样) 2. 纵向对齐(使 X 座标一样) : ")) (setq txsize (getpoint "\n 点取对齐点: ")) (princ "\n")(princ "选取文字(自动滤去非文字实体):")(princ) (while (< i 10000) (setq ss (ssget)) (setq n (sslength ss)) (setq index 0) (repeat n (setq ent0 (entget (ssname ss index))) (if (= (cdr (assoc 72 ent0)) 0) (progn (setq a4 10) (if (/ = a1 0)(setq a5 11)(setq a5 10)) ) ) (setq index (+ 1 index)) (setq type (assoc 0 ent0)) (if (= "TEXT" (cdr type)) (progn (setq p0 (assoc 72 ent0)) (setq p (cons (car p0) a1)) (setq pp (subst p p0 ent0)) (setq old (assoc 11 pp)) (if (= a "L")
(setq a3 (list 0o)) ( setq a3 (cdr(assoc ll pp))) ( setq ent( subst new old pp)) (setq ol(cadr(edr(assoc a4 entO)))) (setq o2 (car(edr(assoc a4 ento)))) (if (=txsize nil) (setq ab(entget(csname ss O))) (setq o3(car txsize)o4(cadr txsize)) setq oldsize(assoc a5 ento)) (if (and(=b nil)(=b 2)) (setq aa o2 bb o4 cc(car oldize) (setq aa o3 bb ol cc(edr oldsize) setq newsize(cons(car oldsize)(list aa bb))) (setq entI( subst newsize oldsize ent) (entmod entD) ((((( 2.多文字的间距调整 edit date:1995.6.1 ( defun c: zd jt(/ new old ent entI index s ss sl s2 cj s] n x xs y ys wb wg wc wgo wgl zb type fs ij bbb bjl bj2 ajl aj2 cjl cj2 Sa Sc Sb ssl ss2 djl dj2 zx ejl ej2 fjl fj2 zk jd) (setvar"cmdecho"0) (princ"nl order: from top to button. from left to right") (princ"n2. there is over a entity")(princ) ( princ"n间距调整方式选择如下:") princ) (setq sj nil c] nil) ( setq sl(gtnt"n1.水平2垂直3斜向:") (if(/=sl 3) (if(=sl nil)(setq sl 1)) (if(=sl1)( (setq sj( getdist"hn输入文字水平间距值(或用鼠标点取):")
(setq a3 (list 0 0)) (setq a3 (cdr (assoc 11 pp))) ) (setq new (cons (car old) a3)) (setq ent (subst new old pp)) (setq o1 (cadr (cdr (assoc a4 ent0)))) (setq o2 (car (cdr (assoc a4 ent0)))) (if (= txsize nil) (p rogn (setq a6 (entget (ssname ss 0))) (setq a6 (cdr (assoc a4 a6))) (setq o3 (car a6) o4 (cadr a6)) ) (setq o3 (car txsize) o4 (cadr txsize)) ) (setq oldsize (assoc a5 ent0)) (if (and (/= b nil)(/= b 2)) (setq aa o2 bb o4 cc (car oldize)) (setq aa o3 bb o1 cc (cdr oldsize)) ) (setq newsize (cons (car oldsize) (list aa bb))) (setq ent1 (subst newsize oldsize ent)) (entmod ent1) ) ) ) ) (prin1) ) ;-------------------- 2.多文字的间距调整 edit date: 1995.6.1 (defun c:zd jt ( / new old ent ent1 index s ss s1 s2 cj sj n x xs y ys wb wg wc wg0 wg1 zb type fs i j bbb bj1 bj2 aj1 aj2 cj1 cj2 $a $c $b ss1 ss2 dj1 dj2 zx ej1 ej2 fj1 fj2 zk jd) (setvar "cmdecho" 0) ; (princ "\n1. order: from top to button. from left to right") ; (princ "\n2. there is over a entity")(princ) (princ "\n 间距调整方式选择如下:")(princ) (setq sj nil cj nil) (setq s1 (getint "\n 1.水平 2.垂直 3.斜向 : ")) (if (/ = s1 3) (progn (if (= s1 nil)(setq s1 1)) (if (= s1 1) (setq sj (getdist "\n 输入文字水平间距值(或用鼠标点取):"))
( setq cI( redist"n输入文字垂直间距值(或用鼠标点取):")) ( setq fs( strcase(getstring"hn选择对齐方式(C中心几左侧/R右侧M中点):")) if(=fs"M")(progn (command"osnap""nea") ( setq ss!l( setpoint"in文字起点:") ( setq ss( getcorner ss!l"n文字终点:") (setq s2 (polar ssl(angle ssl ss2)(/(distance ssl ss2)2))) (command"osnap""none") ( setq s2( setpoint"hn这组文字起点 text location point:") ( princ"n按先后次序选取文字") princ) ( setq n(sslength ss)index 0 10j0 (rep eat n (setq ent(entget(ssname ss index))) (if("TEXT"(edr(assoc 0 ent)) (setq i(+i D) (setq zb(car(CDR(assoc 10(entget(ssname ss index))))) (setq zb(Cadr (cdr(assoc 10(entget(ssname ss index)))) (set q wb(edr(assoc 1(entget(ssname ss index))) wg(cdr(assoc 40(entget(ssname ss index)))) zk(edr(assoc 41(entget(ssname ss index))) jd(edr(assoc 50(entget(csname ss index)))) zx(edr 7(entget(csname ss index)))) (set(read(strcat"b"(itoa i))zb); coordinate (set(read(strcat"a"(itoa i))wb); word (set(read(strcat"c"(itoa i)) wg); hight (set(read( strcat"d"(itoa i )) zx) word style (set(read(strcat"e"(itoa i)))zk) word wide (set(read(strcat"f(itoa i)) jd); word engle (setq new(cons(car(assoc I ent)"")) (setq entI (subst new(assoc I ent)ent)) (entmod ent1) (setq index (+ index 1)) ( setq n i)
(setq cj (getdist "\n 输入文字垂直间距值(或用鼠标点取):"))) (setq fs (strcase (getstring "\n 选择对齐方式(C 中心/L 左侧/R 右侧/M 中点) : "))) (if (= fs "M")(progn (command "osnap" "nea") (setq ss1 (getpoint "\n 文字起点: ")) (setq ss2 (getcorner ss1 "\n 文字终点: ")) (setq s2 (polar ss1 (angle ss1 ss2) (/ (distance ss1 ss2) 2))) (command "osnap" "none") ) (setq s2 (getpoint "\n 这组文字起点 text location point:")) ) (setq x (car s2) y (cadr s2)) (princ "\n 按先后次序选取文字")(princ) (setq ss (ssget)) (setq n (sslength ss) index 0 i 0 j 0) (rep eat n (setq ent (entget (ssname ss index))) (if (= "TEXT" (cdr (assoc 0 ent))) (pr ogn (setq i (+ i 1)) ( if (= s1 1) (setq zb (car (CDR (assoc 10 (entget (ssname ss index)))))) (setq zb (CADR (cdr (assoc 10 (entget (ssname ss index)))))) ) (set q wb (cdr (assoc 1 (entget (ssname ss index)))) wg (cdr (assoc 40 (entget (ssname ss index)))) zk (cdr (assoc 41 (entget (ssname ss index)))) jd (cdr (assoc 50 (entget (ssname ss index)))) zx (cdr (assoc 7 (entget (ssname ss index)))) ) (set (read (strcat "b" (itoa i))) zb);coordinate (set (read (strcat "a" (itoa i))) wb);word (set (read (strcat "c" (itoa i))) wg);hight (set (read (strcat "d" (itoa i))) zx);word style (set (read (strcat "e" (itoa i))) zk);word wide (set (read (strcat "f" (itoa i))) jd);word engle (setq new (cons (car (assoc 1 ent)) " ")) (setq ent1 (subst new (assoc 1 ent) ent)) (entmod ent1) ) ) (setq index (+ index 1)) ) (setq n i)
(while(=n 2) (wh ile(<=j(-n 1)) (setq bjl(eval (read(strcat"b"(itoa D)) (setq bj2 (eval (read(strcat"b"(itoa(+j I)) (setq ajl (eval (read(strcat"a"(itoa D))) (setq aj2(eval (read(strcat"a"(itoa(+j D))) (setq cjl(eval (read(strcat"c"(itoa D)) (setq cj2(eval (read(strcat"c"(itoa(+j D))) (setq djl(eval(read(strcat"d"(itoa D)) (setq dj2(eval (read(strcat"d"(itoa(+j D)) ( setq ejl(eval(read(strcat"e"(itoa D)) (setq ej2(eval (read(strcat"e"(itoa(+j D))) ( setq fjl(eval (read(strcat"f"(itoa D)) (setq f]2(eval (read(strcat"f(itoa(+j ) ) (if(/=sl 1)(setq bbb bjl bjl bj2bj2 bbb)) (if (ANd(=SI 1)( bjl bj2))(BBBB) (if (ANd(= S1 2)(<bjl bj2))(BBBB) (setqj (+j D)) (re peat i (setq wg(eval (read(strcat"c"(itoa n))) (setq wb(eval (read(strcat"a"(itoa n))) (setq zx(eval (read(strcat"d"(itoa n))) (setq zk(eval (read (strcat"e"(itoa n))) (setq jd(eval(read(strcat"f(itoa n)))) (setq zk2 (cdr(assoc 41(tblsearch"style"zx))) zt(cdr(assoc 3 (tblsearch"style"ZX))) zt2(cdr(assoc 4 (tblsearch"style"zx))) (if(/=zk zk2) (if((strcase zx)"STANDARD") (command"style"zx" 0"zk""n""n""n") (command"style"zx"0"zk"0""n""n") (if(sl 1)(progn (setq xs(+x(sj (-n D)) (setq zb(list xs y)) (if(=fs"")
(while (>= n 2) (setq j 1) (wh ile ( bj1 bj2))(BBBB)) (if (AND (= S1 2)(< bj1 bj2))(BBBB)) (setq j (+ j 1)) ) (setq n (- n 1)) ) (setq n 0) (re peat i (setq n (+ n 1)) (setq wg (eval (read (strcat "c" (itoa n))))) (setq wb (eval (read (strcat "a" (itoa n))))) (setq zx (eval (read (strcat "d" (itoa n))))) (setq zk (eval (read (strcat "e" (itoa n))))) (setq jd (eval (read (strcat "f" (itoa n))))) (setq zk2 (cdr (assoc 41 (tblsearch "style" zx))) zt (cdr (assoc 3 (tblsearch "style" zx))) zt2 (cdr (assoc 4 (tblsearch "style" zx))) ) (if (/= zk zk2) (if (= (strcase zx) "STANDARD") (command "style" zx "" "0" zk "0" "n" "n" "n") (command "style" zx "" "0" zk "0" "n" "n") ) ) (if (= s1 1)(progn (setq xs (+ x (* sj (- n 1)))) (setq zb (list xs y)) ( if (= fs "")
(if ((cdr(assoc 40(tblsearch"style"zx)))0.00001) xt"zb(/( jd 180.0)pi)wb) (command"text"zb wg((jd 180.0)pi)wb) (if(>(edr(assoc 40(tblsearch"style"Zx)))0.00001) fs zb((jd 180.0)pi)wb) [KG2(command"text"fs zb wg((jd 180.0)pi) wb) (p ron (setq ys(-y(cj(-n D))) (if((edr(assoc 40(tblsearch"style"Zx)))0.00001) (command"text"zb(/(*jd 180.0)pi)wb) (command"text"zb wg((jd 180.0)pi)wb) (if((edr(assoc 40(tblsearch"style"zx)))0.00001) (command"text"fs zb(/( jd 180.0)pi) wb) (command"text" fs zb wg(/( jd 180.0)pi) wb) )))))) ( princ"n按先后次序选取文字") princ setq ss(ssget)cd(sslength ss) ( princ"n按选取文字先后次序,从斜线起点至终点等分这组文字") princ) ( setq qd( setpoint"hn斜线起点:") ( setq zd( setpoint qd"n斜线终点:") (setq jd (angle ad zd)) ( setq jl(distance qd zd)jl(/jl(-cd 1))) (setq zd(polar gd jd(ijD))) (setq wg(cdr(assoc 40(entget(ssname ss i))) (setq wb(edr(assoc l(entget(csname ss i))) (command"text"zd wg"0"wb) ())
( if (> (cdr (assoc 40 (tblsearch "style" zx))) 0.00001) (command "text" zb (/ (* jd 180.0) pi) wb) (command "text" zb wg (/ (* jd 180.0) pi) wb) ) (if (> (cdr (assoc 40 (tblsearch "style" zx))) 0.00001) (command "text" fs zb (/ (* jd 180.0) pi) wb) [KG*2](command "text" fs zb wg (/ (* jd 180.0) pi) wb) ) ) ) (p rogn (setq ys (- y (* cj (- n 1)))) (setq zb (list x ys)) ( if (= fs "") ( if (> (cdr (assoc 40 (tblsearch "style" zx))) 0.00001) (command "text" zb (/ (* jd 180.0) pi) wb) (command "text" zb wg (/ (* jd 180.0) pi) wb) ) (if (> (cdr (assoc 40 (tblsearch "style" zx))) 0.00001) (command "text" fs zb (/ (* jd 180.0) pi) wb) (command "text" fs zb wg (/ (* jd 180.0) pi) wb) ) ) ) ) ) ) (progn (princ "\n 按先后次序选取文字")(princ) (setq ss (ssget) cd (sslength ss)) (princ "\n 按选取文字先后次序,从斜线起点至终点等分这组文字")(princ) (setq qd (getpoint "\n 斜线起点: ")) (setq zd (getpoint qd "\n 斜线终点: ")) (setq jd (angle qd zd)) (setq jl (distance qd zd) jl (/ jl (- cd 1))) (setq i 0) (repeat cd (setq zd (polar qd jd (* i jl))) (setq wg (cdr (assoc 40 (entget (ssname ss i))))) (setq wb (cdr (assoc 1 (entget (ssname ss i))))) (command "text" zd wg "0" wb) (setq i (1+ i)) ) )
(DEFUN BBBB O (setq bs bjl as ajl cs cjl) (set(read( strcat"b"(itoa j))bj2) (set(read( strcat"a"(itoa D)))aj2) (set(read(strcat"c"(itoa)))cj2) (set(read(strcat"b"(itoa(+j 1))))bs (set(read(strcat"a"(itoa (+j I))as (set(read(strcat"c"(itoa(+j))cs)
) ) (DEFUN BBBB () (setq b$ bj1 a$ aj1 c$ cj1) (set (read (strcat "b" (itoa j))) bj2) (set (read (strcat "a" (itoa j))) aj2) (set (read (strcat "c" (itoa j))) cj2) (set (read (strcat "b" (itoa (+ j 1)))) b$) (set (read (strcat "a" (itoa (+ j 1)))) a$) (set (read (strcat "c" (itoa (+ j 1)))) c$) )