本帖最后由 作者 于 2007-11-6 9:14:40 编辑
不用多说,一目了然,关键是文本宽度计算 ----------------------------------代码-------------------------------------------------- ;********单行文本转换为多行文本xofox********** ;en 图元名,endata 图元数据,tid 图元标志(若为TEXT则表示为单行文本),tt 文本,th文本高度 ;pt 文本基点,ang 文本旋转角度,ttlen 文本大致长度,tstr 相对坐标形式的多行文本的另一点 (defun c:dm(/ s1 i en tid tt th pt ang ttlen twid tang tlen tstr) (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 (cdr (assoc 40 endata))) ;取得文字高度 (setq pt (cdr (assoc 10 endata))) ;取得文字插入点 (setq ang (cdr (assoc 50 endata))) ;取得文字旋转角度 (setq ttlen (strlen tt)) ;取得文字长度 (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) "<" (rtos tang))) ;对角点的相对坐标 (setq ang (/ (* ang 180) pi)) ;转换弧度为角度 (command "-mtext" pt "h" th "r" ang tstr tt "") ;在原位置以原角度原高度生成多行文本 (entdel en) ;删除单行文本 ) (setvar "OSMODE" sysvar) ;恢复对象捕捉设置 ) ------------------------------------------------------------------------------------------------ |