xofox 发表于 2007-11-6 09:03:00

将单行文本改为多行文本的源程序

本帖最后由 作者 于 2007-11-6 9:14:40 编辑 <br /><br /> <p>不用多说,一目了然,关键是文本宽度计算</p><p>----------------------------------代码--------------------------------------------------</p><p>;********单行文本转换为多行文本xofox**********<br/>;en 图元名,endata 图元数据,tid 图元标志(若为TEXT则表示为单行文本),tt 文本,th文本高度<br/>;pt 文本基点,ang 文本旋转角度,ttlen 文本大致长度,tstr 相对坐标形式的多行文本的另一点</p><p>(defun c:dm(/ s1 i en tid tt th pt ang ttlen twid tang tlen tstr)</p><p>&nbsp; (setq sysvar (getvar "OSMODE"))&nbsp;;获得并保存对象捕捉设置<br/>&nbsp; (setvar "OSMODE" 16384)&nbsp;&nbsp;;关闭对象捕捉</p><p>&nbsp; (setq s1 (ssget '((0 . "TEXT") )))&nbsp;;选取单行文本,构造非空选择集<br/>&nbsp; (if (/= s1 nil) (print) <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (progn (setvar "OSMODE" sysvar) (exit) )<br/>&nbsp; )</p><p>&nbsp; (setq i -1)<br/>&nbsp; (repeat (sslength s1)<br/>&nbsp;&nbsp;&nbsp;&nbsp; (setq i (+ i 1))<br/>&nbsp;&nbsp;&nbsp;&nbsp; (setq en (ssname s1 i))<br/>&nbsp;&nbsp;&nbsp;&nbsp; (setq endata (entget en))<br/>&nbsp;&nbsp;&nbsp;&nbsp; (setq tid (cdr (assoc 0 endata)))&nbsp;&nbsp;;判断是否单行文本<br/>&nbsp;&nbsp;&nbsp;&nbsp; (setq tt (cdr (assoc 1 endata)))&nbsp;&nbsp;;取得文字<br/>&nbsp;&nbsp;&nbsp;&nbsp; (setq th (cdr (assoc 40 endata)))&nbsp;&nbsp;;取得文字高度<br/>&nbsp;&nbsp;&nbsp;&nbsp; (setq pt (cdr (assoc 10 endata)))&nbsp;&nbsp;;取得文字插入点<br/>&nbsp;&nbsp;&nbsp;&nbsp; (setq ang (cdr (assoc 50 endata)))&nbsp;&nbsp;;取得文字旋转角度<br/>&nbsp;&nbsp;&nbsp;&nbsp; (setq ttlen (strlen tt))&nbsp;&nbsp;&nbsp;;取得文字长度<br/>&nbsp;&nbsp;&nbsp;&nbsp; (setq twid (* (* th 0.7) ttlen))&nbsp;&nbsp;;计算文字宽度<br/>&nbsp;&nbsp;&nbsp;&nbsp; (setq tang (/ (* 180 (+ ang (atan(/ th twid)))) pi))&nbsp;&nbsp;;计算多行文本对角点的旋转角度<br/>&nbsp;&nbsp;&nbsp;&nbsp; (setq tlen (sqrt (+ (* th&nbsp; th) (* twid twid))))&nbsp;&nbsp;;计算多行文本对角线的长度<br/>&nbsp;&nbsp;&nbsp;&nbsp; (setq tstr (strcat "@" (rtos tlen) "&lt;" (rtos tang)))&nbsp;&nbsp;;对角点的相对坐标<br/>&nbsp;&nbsp;&nbsp;&nbsp; (setq ang (/ (* ang 180) pi))&nbsp;&nbsp;;转换弧度为角度<br/>&nbsp;&nbsp;&nbsp;&nbsp; (command "-mtext" pt "h" th "r" ang tstr tt "")&nbsp;&nbsp;;在原位置以原角度原高度生成多行文本<br/>&nbsp;&nbsp;&nbsp;&nbsp; (entdel en)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;删除单行文本&nbsp; <br/>&nbsp;&nbsp; )</p><p>&nbsp; (setvar "OSMODE" sysvar)&nbsp;&nbsp;;恢复对象捕捉设置<br/>)</p><p>------------------------------------------------------------------------------------------------</p>

xhq1954425 发表于 2007-11-6 10:07:00

<p>顶!先下来再说!支持!</p><p>暂时不用,但是对于新手来说定有启发性。</p>

jaminth 发表于 2007-11-9 08:37:00

<b>有没有多行文本改为单行文本的程序?</b>

mingvictor 发表于 2007-11-9 10:38:00

<p>谢谢楼主的分享,现在用不着,以后应该用得着!</p>

carrot1983 发表于 2007-11-9 11:57:00

<p>坦白说,不好用。</p><p></p>

phoenixdjq 发表于 2007-11-9 12:18:00

<p>回3楼,炸开就可以了</p><p>不需要程序呀</p>

fawn_lgc 发表于 2007-11-12 10:13:00

本帖最后由 作者 于 2007-11-12 10:27:19 编辑 <br /><br /> <font face="宋体" size="2">我已经把该功能移植到<strong>4.3版仿R14特性工具</strong>中。</font><font face="宋体" color="#0000ff" size="2"><font face="宋体" color="#0000ff" size="2">
                        <p><font color="#000000"><font face="宋体" size="2"><font face="Arial">4.3版添加双击启动编辑命令、点转标高、中心线、同心圆、<strong><font color="#ff0000">单行文本转多行文本</font></strong>等功能,<br/>并作了多处小改进:支持标注变量dimsoxd、添加对文字遮罩的支持等。</font></font><br/></font>详细内容:<a href="http://bbs.mjtd.com/forum.php?mod=viewthread&tid=61313">http://bbs.mjtd.com/forum.php?mod=viewthread&tid=61313</a></p><p><font color="#000000">我也试图开发这样个程序,用entmake的方法写了一大堆程序,由于无法有效控制对齐点只好作罢。<br/>你的程序简单实用我直接采纳。非常感谢!</font></p><p><font color="#000000">含第三方程序的文件</font>:</p></font></font>

燃烧 发表于 2012-2-27 19:37:07

entmake我试了也不行为什么啊?

东北-水地暖-温 发表于 2012-7-23 15:55:00

正在找,偏偏就有;急人所急,多多多谢。

xyp1964 发表于 2012-7-23 20:58:04

下面这个不知道算不算:

页: [1] 2
查看完整版本: 将单行文本改为多行文本的源程序