;********单行文本转换为多行文本xofox**********
;方便将EXCEL插入CAD,转换后保持原有文字颜色。YTM修改
;未解决问题:汉字、英文字符、特殊符号(直径符号等)转换成字高不一致了(目前只是接近),也不能对齐了,TEXT的倾斜给弄丢了,期待高手解决
;en 图元名,endata 图元数据,tid 图元标志(若为TEXT则表示为单行文本),tt 文本,th文本高度
;pt 文本基点,ang 文本旋转角度,ttlen 文本大致长度,tstr 相对坐标形式的多行文本的另一点
(defun c:T2T(/ s1 i en tid tt th pt ang ttlen twid tang tlen tstr)
(setvar "cmdecho" 0)
(setq sysvar (getvar "OSMODE")) ;获得并保存对象捕捉设置
(setvar "OSMODE" 16384) ;关闭对象捕捉
(setq s1 (ssget '((0 . "TEXT") ))) ;选取单行文本,构造非空选择集
(if (/= s1 nil) (print)
(progn (setvar "OSMODE" sysvar) (exit) )
)
(setq i -1)
(repeat (sslength s1)
(setq i (+ i 1))
(setq en (ssname s1 i))
(setq endata (entget en))
(setq tid (cdr (assoc 0 endata))) ;判断是否单行文本
(setq tt (cdr (assoc 1 endata))) ;取得文字
(setq th (* 0.85 (cdr (assoc 40 endata)))) ;取得文字高度,并加入一个0.85的系数
(setq pt (cdr (assoc 10 endata))) ;取得文字插入点
(setq ang (cdr (assoc 50 endata))) ;取得文字旋转角度
(setq txtcolor(cdr (assoc 62 endata))) ;取得文字的颜色,使用的是索引色吧,1,2,3之类的
(setq txtziti(cdr (assoc 7 endata))) ;取得文字的字体
(setq ttlen (* 1.2 (strlen tt))) ;取得文字长度,增加1.2的系数,防止MTEXT长度不够而显示成两行
(setq twid (* (* th 0.7) ttlen)) ;计算文字宽度
(setq tang (/ (* 180 (+ ang (atan(/ th twid)))) pi)) ;计算多行文本对角点的旋转角度
(setq tlen (sqrt (+ (* th th) (* twid twid)))) ;计算多行文本对角线的长度
(setq tstr (strcat "@" (rtos tlen) "
(setq ang (/ (* ang 180) pi)) ;转换弧度为角度
;--------------------------------------------------------------------
;|(setq cha (substr tt 1 1)) ;判断第一个字符是否是汉字,依下面的例子仿写,能区分出汉字,但对直径符号等不行,待完善
(IF (> (ascii cha) 159)
(PROGN
(setq ptx(- (car pt) (* 0.05 th)) ;对文字位置重新计算
pty(+ (* 0.2 th) (cadr pt))
pt(list ptx pty 0.0)
TH (* 2 TH)
)
)
)|;
(setq ptx(- (car pt) (* 0.05 th)) ;对文字位置重新计算
pty(+ (* 0.2 th) (cadr pt))
pt(list ptx pty 0.0)
TH (* 1 TH)
)
;--------------------------------------------------------------------
;(COMMAND "-STYLE" "WMF-宋体0" "" "" "" "" "N" "N")
;(command "-style" "WMF-宋体0" "SimSun.ttf" TH 1 ANG "N" "N")
(command "-style" "WMF-宋体0" "宋体" TH 1 ANG "N" "N")
;(command "-style" "mystyle" "Times New Roman" TH 1 ANG "N" "N") ;设置重新生成的MTEXT的字体
(command "-mtext" pt "h" th "r" ang tstr tt "") ;在原位置以原角度原高度生成多行文本
(entdel en) ;删除单行文本
(setq myentlast(entlast)) ;恢复原有文字的颜色
(COMMAND "CHANGE" myentlast "" "PROPERTIES" "C" txtcolor "")
)
(setvar "OSMODE" sysvar) ;恢复对象捕捉设置
(SETVAR "CMDECHO" 1)
)
;|判断一个字符串里面是否包含汉字,包含汉字返回T
(defun $xdlsp_text_hashz (str / cha tf)
(setq tf nil
i 1
)
(while (and
(not tf)
(/= "" (setq cha (substr str i 1)))
)
(if (> (ascii cha) 159)
(setq tf t)
)
(setq i (1+ i))
)
tf
)
|;