- UID
- 463634
- 积分
- 0
- 精华
- 贡献
-
- 威望
-
- 活跃度
-
- D豆
-
- 在线时间
- 小时
- 注册时间
- 2006-7-6
- 最后登录
- 1970-1-1
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
不用多说,一目了然,关键是文本宽度计算
----------------------------------代码--------------------------------------------------
;********单行文本转换为多行文本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) ;恢复对象捕捉设置
)
------------------------------------------------------------------------------------------------ |
|