增加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、ZDJT,击入命令按提示操作。3.两程序在使用中基本为中文提示,易用,现已在我院网络上全面使用。4.两程序适用于AUTOCADR10.0,R11,R12.0。三、操作过程1.多文字对齐。提示如下:(其中“”中为缺省的选项)选择对齐方式如下:L左/R右/C中心/M中点L:选择对齐方向如下:1横向对齐(Y座标一致).2纵向对齐(X座标一致)2:点取对齐点点取参照实体:(即用鼠标在屏上点取对齐的位置,缺省后,提出让你点取参照目标字,这样后面选上的文字与对齐)选取文字(自动滤非文字类实体,且不用考虑次序,开窗口选也可)。2.多文字的间距调整,提示如下:文字间距调整方式如下:1.水平2.垂直3.斜向1:①若选“1”或缺省值,则*输入各文字水平距值(或用鼠标点取)*选择对齐方式:(C中心/L左侧/R右侧/H中心)L1若选“L”或缺省,则:*输入这组文字起点。*按选后次序选取文字。2其它类推。选“2”,则:*输入文字垂直间距值(或用鼠标点取):其它同①。选“3”,则:*按先后次序选取文字。*点取斜线起点(即文字排列方向线)。*点取斜线终点。(结果所选文字在斜线起点和终点间等分排列)。四、源程序如下:1.多文字的对齐:;--------------------;1996.03.04;(defunc:zddq(/intxsizeentent1o1o2o3o4aaaoldsiazenewsizeindexbbccp0p1pppent0bssa1a2a3a4a5a6)(setqi1)(princ\n)(princ选择对齐方式如下:)(princ)(setqa(getstring\nL左/R右/C中心/M中点L:))(if(=a)(setqaL))(setqa(strcasea))(cond((=aL)(setqa10a211a410a510))((=aM)(setqa11a210a411a511))((=aR)(setqa12a210a411a511))((=aC)(setqa14a210a411a511)))(setqb(getint\n1.横向对齐(使Y座标一样)2.纵向对齐(使X座标一样)2:))(setqtxsize(getpoint\n点取对齐点点取参照实体:))(princ\n)(princ选取文字(自动滤去非文字实体):)(princ)(while(i10000)(setqss(ssget))(setqn(sslengthss))(setqindex0)(repeatn(setqent0(entget(ssnamessindex)))(if(=(cdr(assoc72ent0))0)(progn(setqa410)(if(/=a10)(setqa511)(setqa510))))(setqindex(+1index))(setqtype(assoc0ent0))(if(=TEXT(cdrtype))(progn(setqp0(assoc72ent0))(setqp(cons(carp0)a1))(setqpp(substpp0ent0))(setqold(assoc11pp))(if(=aL)(setqa3(list00))(setqa3(cdr(assoc11pp))))(setqnew(cons(carold)a3))(setqent(substnewoldpp))(setqo1(cadr(cdr(assoca4ent0))))(setqo2(car(cdr(assoca4ent0))))(if(=txsizenil)(progn(setqa6(entget(ssnamess0)))(setqa6(cdr(assoca4a6)))(setqo3(cara6)o4(cadra6)))(setqo3(cartxsize)o4(cadrtxsize)))(setqoldsize(assoca5ent0))(if(and(/=bnil)(/=b2))(setqaao2bbo4cc(caroldize))(setqaao3bbo1cc(cdroldsize)))(setqnewsize(cons(caroldsize)(listaabb)))(setqent1(substnewsizeoldsizeent))(entmodent1)))))(prin1));--------------------2.多文字的间距调整editdate:1995.6.1(defunc:zdjt(/newoldentent1indexssss1s2cjsjnxxsyyswbwgwcwg0wg1zbtypefsijbbbbj1bj2aj1aj2cj1cj2$a$c$bss1ss2dj1dj2zxej1ej2fj1fj2zkjd)(setvarcmdecho0);(princ\n1.order:fromtoptobutton.fromlefttoright);(princ\n2.thereisoveraentity)(princ)(princ\n间距调整方式选择如下:)(princ)(setqsjnilcjnil)(setqs1(getint\n1.水平2.垂直3.斜向1:))(if(/=s13)(progn(if(=s1nil)(setqs11))(if(=s11)(setqsj(getdist\n输入文字水平间距值(或用鼠标点取):))(setqcj(getdist\n输入文字垂直间距值(或用鼠标点取):)))(setqfs(strcase(getstring\n选择对齐方式(C中心/L左侧/R右侧/M中点)L:)))(if(=fsM)(progn(commandosnapnea)(setqss1(getpoint\n文字起点:))(setqss2(getcornerss1\n文字终点:))(setqs2(polarss1(angless1ss2)(/(distancess1ss2)2)))(commandosnapnone))(setqs2(getpoint\n这组文字起点textlocationpoint:)))(setqx(cars2)y(cadrs2))(princ\n按先后次序选取文字)(princ)(setqss(ssget))(setqn(sslengthss)index0i0j0)(repeatn(setqent(entget(ssnamessindex)))(if(=TEXT(cdr(assoc0ent)))(progn(setqi(+i1))(if(=s11)(setqzb(car(CDR(assoc10(entget(ssnamessindex))))))(setqzb(CADR(cdr(assoc10(entget(ssnamessindex)))))))(setqwb(cdr(assoc1(entget(ssnamessindex))))wg(cdr(assoc40(entget(ssnamessindex))))zk(cdr(assoc41(entget(ssnamessindex))))jd(cdr(assoc50(entget(ssnamessindex))))zx(cdr(assoc7(entget(ssnamessindex)))))(set(read(strcatb(itoai)))zb);coordinate(set(read(strcata(itoai)))wb);word(set(read(strcatc(itoai)))wg);hight(set(read(strcatd(itoai)))zx);wordstyle(set(read(strcate(itoai)))zk);wordwide(set(read(strcatf(itoai)))jd);wordengle(setqnew(cons(car(assoc1ent))))(setqent1(substnew(assoc1ent)ent))(entmodent1)))(setqindex(+index1)))(setqni)(while(=n2)(setqj1)(while(=j(-n1))(setqbj1(eval(read(strcatb(itoaj)))))(setqbj2(eval(read(strcatb(itoa(+j1))))))(setqaj1(eval(read(strcata(itoaj)))))(setqaj2(eval(read(strcata(itoa(+j1))))))(setqcj1(eval(read(strcatc(itoaj)))))(setqcj2(eval(read(strcatc(itoa(+j1))))))(setqdj1(eval(read(strcatd(itoaj)))))(setqdj2(eval(read(strcatd(itoa(+j1))))))(setqej1(eval(read(strcate(itoaj)))))(setqej2(eval(read(strcate(itoa(+j1))))))(setqfj1(eval(read(strcatf(itoaj)))))(setqfj2(eval(read(strcatf(itoa(+j1))))));(if(/=s11)(setqbbbbj1bj1bj2bj2bbb));-----------------(if(AND(=S11)(bj1bj2))(BBBB))(if(AND(=S12)(bj1bj2))(BBBB))(setqj(+j1)))(setqn(-n1)))(setqn0)(repeati(setqn(+n1))(setqwg(eval(read(strcatc(itoan)))))(setqwb(eval(read(strcata(itoan)))))(setqzx(eval(read(strcatd(itoan)))))(setqzk(eval(read(strcate(itoan)))))(setqjd(eval(read(strcatf(itoan)))))(setqzk2(cdr(assoc41(tblsearchstylezx)))zt(cdr(assoc3(tblsearchstylezx)))zt2(cdr(assoc4(tblsearchstylezx))))(if(/=zkzk2)(if(=(strcasezx)STANDARD)(commandstylezx0zk0nnn)(commandstylezx0zk0nn)))(if(=s11)(progn(setqxs(+x(*sj(-n1))))(setq