明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 4081|回复: 5

如何将多个TEXT转化成MTEXT?

[复制链接]
发表于 2011-11-8 14:08 | 显示全部楼层 |阅读模式
1明经币
要求:可以批量将多个TEXT转化成MTEXT,且每个MTEXT相互独立,保持在原有的TEXT的位置。用于在CAD中插入excel。
express tool的txt2mtxt不好用,它把所有的都全成一个mtext了。

最佳答案

查看完整内容

给你找到一个,好用!
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2011-11-8 14:08 | 显示全部楼层
给你找到一个,好用!
  1. ;********单行文本转换为多行文本xofox**********
  2. ;en 图元名,endata 图元数据,tid 图元标志(若为TEXT则表示为单行文本),tt 文本,th文本高度
  3. ;pt 文本基点,ang 文本旋转角度,ttlen 文本大致长度,tstr 相对坐标形式的多行文本的另一点
  4. (defun c:dtm(/ s1 i en tid tt th pt ang ttlen twid tang tlen tstr)
  5.   (setvar "cmdecho" 0)
  6.   (setq sysvar (getvar "OSMODE")) ;获得并保存对象捕捉设置
  7.   (setvar "OSMODE" 16384)  ;关闭对象捕捉
  8.   (setq s1 (ssget '((0 . "TEXT") ))) ;选取单行文本,构造非空选择集
  9.   (if (/= s1 nil) (print)
  10.       (progn (setvar "OSMODE" sysvar) (exit) )
  11.   )
  12.   (setq i -1)
  13.   (repeat (sslength s1)
  14.      (setq i (+ i 1))
  15.      (setq en (ssname s1 i))
  16.      (setq endata (entget en))
  17.      (setq tid (cdr (assoc 0 endata)))  ;判断是否单行文本
  18.      (setq tt (cdr (assoc 1 endata)))  ;取得文字
  19.      (setq th (cdr (assoc 40 endata)))  ;取得文字高度
  20.      (setq pt (cdr (assoc 10 endata)))  ;取得文字插入点
  21.      (setq ang (cdr (assoc 50 endata)))  ;取得文字旋转角度
  22.      (setq ttlen (strlen tt))   ;取得文字长度
  23.      (setq twid (* (* th 0.7) ttlen))  ;计算文字宽度
  24.      (setq tang (/ (* 180 (+ ang (atan(/ th twid)))) pi))  ;计算多行文本对角点的旋转角度
  25.      (setq tlen (sqrt (+ (* th  th) (* twid twid))))  ;计算多行文本对角线的长度
  26.      (setq tstr (strcat "@" (rtos tlen) "<" (rtos tang)))  ;对角点的相对坐标
  27.      (setq ang (/ (* ang 180) pi))  ;转换弧度为角度
  28.      (command "-mtext" pt "h" th "r" ang tstr tt "")  ;在原位置以原角度原高度生成多行文本
  29.      (entdel en)     ;删除单行文本  
  30.    )
  31.   (setvar "OSMODE" sysvar)  ;恢复对象捕捉设置
  32. )

点评

求加MTEXT遮照  发表于 2013-6-5 19:23
回复

使用道具 举报

 楼主| 发表于 2011-11-8 18:12 | 显示全部楼层
谢谢大侠分享!目前还有一点小问题,我对如何获得原TEXT对象的颜色、字体属性不太了解,想请教一下。
使用上述程序后,所有对象的颜色都变成一样了,而原有的是有颜色区别的;字体与原有字体不一样了。如果能得到原有TEXT字体的颜色和字体属性,我应该也能把代码完善了。

点评

DXF组码看一下,记得颜色是62,字体是7  发表于 2011-11-8 23:17
回复

使用道具 举报

 楼主| 发表于 2011-11-9 14:02 | 显示全部楼层
;********单行文本转换为多行文本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) "<" (rtos tang)))  ;对角点的相对坐标
     (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
)
|;



点评

只能近似吧,因为程序中计算文字的宽度是根据高度计算出来的。。。还有文字中如有空格就更麻烦了  发表于 2011-11-9 16:10
回复

使用道具 举报

发表于 2011-11-9 20:36 | 显示全部楼层
革天明 发表于 2011-11-9 14:02
;********单行文本转换为多行文本xofox**********
;方便将EXCEL插入CAD,转换后保持原有文字颜色。YTM修改 ...

(textbox '((1 . "Hello world.")))
可以帮你解决文字所占的空间
回复

使用道具 举报

发表于 2011-11-12 14:44 | 显示全部楼层
来顶顶帖!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-5-11 14:28 , Processed in 0.170129 second(s), 35 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表