给你找到一个,好用!- ;********单行文本转换为多行文本xofox**********
- ;en 图元名,endata 图元数据,tid 图元标志(若为TEXT则表示为单行文本),tt 文本,th文本高度
- ;pt 文本基点,ang 文本旋转角度,ttlen 文本大致长度,tstr 相对坐标形式的多行文本的另一点
- (defun c:dtm(/ 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 (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) ;恢复对象捕捉设置
- )
|