[分享]中西混排矢量文字字高调整程序
本帖最后由 作者 于 2009-6-29 23:40:06 编辑 <br /><br /> <p>;; ZXTEXT.LSP 中西混排矢量文字输入及调整程序 CYN 2000.6.15</p><p>;=============================================================================<br/>(defun c:zxtext(/ os hight pt style chinese xx ang_cyn ang str)<br/> (setq os (getvar "osmode"))<br/> (setvar "osmode" 0)<br/> (initget "Edit")<br/> (setq pt (getpoint "\nEdit <Start point:>"))<br/> (if (= pt "Edit")<br/> (zxedit)<br/> (progn <br/> (setq style (getvar "TEXTSTYLE"))<br/> (setq chinese (cdr (assoc 4 (tblsearch "style" style))))<br/> (if (= chinese "")<br/> (progn<br/> (prompt (strcat "\n当前的字型 " style " 中没有定义矢量汉字字体"))<br/> (princ)<br/> )<br/> (progn<br/> (setq hight (getvar "TEXTSIZE"))<br/> (setq xx (getdist pt (strcat "\nHeight <" (rtos hight) ">:")))<br/> (if xx (setq hight xx))<br/> (setq ang_cyn (getangle "\nRotation angle <0>:"))<br/> (if (= ang_cyn nil) (setq ang_cyn 0))<br/> (setq ang (/ (* ang_cyn pi) 180))<br/> (setq str (getstring 1 "\nText:"))<br/> (zxtext_a)<br/> )<br/> )<br/> )<br/> )<br/> (setvar "osmode" os)<br/>)</p><p>;-----------------------------------------------------------------------------</p><p>(defun zxedit(/ object sset sslen nsset ename elist style <br/> layer selist chinese str hight width color<br/> pt ang ang_cyn)<br/> (setq object "edit")<br/> (setq sset (ssget))<br/> (if (null sset) <br/> (progn<br/> (princ "\n错误: 没有选到文字.")<br/> (exit)<br/> )<br/> )<br/> (setq sslen (sslength sset)<br/> nsset (ssadd))<br/> (if (> sslen 25)<br/> (princ "\n确认所选的图元 -- 请稍候.")<br/> )<br/> (while (> sslen 0)<br/> (setq ename (ssname sset (setq sslen (1- sslen)))<br/> elist (entget ename)<br/> )<br/> (if (= (cdr (assoc 0 elist)) "TEXT")<br/> (progn<br/> (setq style (cdr (assoc 7 elist))<br/> selist (tblsearch "style" style)<br/> chinese (cdr (assoc 4 selist))<br/> )<br/> (if (/= chinese "") (ssadd ename nsset))<br/> )<br/> )<br/> )</p><p> (setq sslen (sslength nsset)<br/> sset nsset<br/> )<br/> (while (> sslen 0)<br/> (setq ename (ssname sset (setq sslen (1- sslen)))<br/> elist (entget ename)<br/> str (cdr (assoc 1 elist))<br/> style (cdr (assoc 7 elist))<br/> layer (cdr (assoc 8 elist))<br/> pt (cdr (assoc 10 elist))<br/> hight (cdr (assoc 40 elist))<br/> width (cdr (assoc 41 elist))<br/> ang (cdr (assoc 50 elist))<br/> color (cdr (assoc 62 elist))<br/> ang_cyn (/ (* ang 180) pi)<br/> )<br/> (command "_erase" ename "")<br/> (command "_style" style "" "0.0" "" "" "" "" "")<br/> (zxtext_a)<br/> )<br/>)</p><p>;-----------------------------------------------------------------------------<br/>(defun zxtext_a(/ n a len asc_a asc_b asc_c len new_str pt2) <br/> (setq n 1<br/> a n<br/> len 1<br/> ) <br/> (while (/= (substr str n 2) "")<br/> (setq asc_a (ascii (substr str n 2))<br/> asc_b (ascii (substr str (1+ n) 2))<br/> )<br/> (if (= asc_c nil) (setq asc_c asc_a))<br/> (if (and (/= asc_b 0 ) ;非空<br/> (or<br/> (and (< asc_a 127) (< asc_b 127) (< asc_c 127)) ;两者均为西文<br/> (and (> asc_a 127) (> asc_b 127)) ;两者均为汉字<br/> (and (> asc_a 127) (= asc_b 32)) ;汉字中空格<br/> (and (= asc_a 32) (= asc_b 32)) ;空格<br/> (and (= asc_a 32) (> asc_b 127) (> asc_c 127)) ;汉字中空格<br/> )<br/> )<br/> (setq len (1+ len))</p><p> (progn<br/> (setq new_str (substr str a len))<br/> (if (< (ascii (substr new_str 1 2)) 127)<br/> (progn<br/> (setq pt (polar pt (+ ang (* pi 0.5)) (* hight 0.1)))<br/> (setq pt2 "up") <br/> (command "text" pt (* hight 0.8) ang_cyn new_str)<br/> (setq asc_c nil)<br/> )<br/> (progn<br/> (setq pt2 nil)<br/> (command "text" pt hight ang_cyn new_str)<br/> (setq asc_c nil)<br/> )<br/> )<br/> (next_pt)<br/> (setq len 1 a (1+ n))<br/> );end progn<br/> );end if<br/> (setq n (1+ n))<br/> )<br/> (princ)<br/>)</p><p>;----------------------------------------------------------------------------</p><p>(defun next_pt (/ last_ename last_elist pt1 dis)<br/> (if (= object "edit")<br/> (progn<br/> (setq last_ename (entlast)<br/> last_elist (entget last_ename)<br/> last_elist (subst (cons 8 layer) (assoc 8 last_elist) last_elist)<br/> last_elist (subst (cons 41 width) (assoc 41 last_elist) last_elist)<br/> )<br/> (entmod last_elist)<br/> )<br/> )<br/> (setq last_ename (entlast)<br/> last_elist (entget last_ename)<br/> last_elist (subst (cons 72 2) (assoc 72 last_elist) last_elist)<br/> last_elist (subst (cons 11 pt) (assoc 11 last_elist) last_elist)<br/> )<br/> (entmod last_elist)<br/> (setq last_ename (entlast)<br/> last_elist (entget last_ename)<br/> pt1 (cdr (assoc 10 last_elist))<br/> dis (distance pt1 pt)<br/> )<br/> (setq last_elist (subst (cons 72 0) (assoc 72 last_elist) last_elist)<br/> last_elist (subst (cons 10 pt) (assoc 10 last_elist) last_elist)<br/> )<br/> (entmod last_elist)<br/> (setq pt (polar pt ang (+ dis (* hight 0.2))))<br/> (if (= pt2 "up") <br/> (setq pt (polar pt (- ang (* pi 0.5)) (* hight 0.1)))<br/> )<br/>)<br/>;================================== END ======================================</p> <p>其实没有必要,楼主完全可以采用合适的字体文件就可以非常好的解决此问题。</p><p></p> 有这个功能挺好的。
页:
[1]