LISP excel 冻结拆分_lisp把选集转成表_如何将多个TEXT转化成MTEXT? - AutoLISP/Visual LISP 编程技术 - CAD论坛 - 明经CAD社区 - 如何 - ...

这篇博客介绍了如何使用AutoLISP将Excel导入CAD时将单行文本转换为多行文本,以保留原有的文字颜色。文章提到了转换过程中存在的问题,如文字高度、对齐和倾斜角度的丢失,并提供了一个LISP函数实现转换,同时分享了一个用于判断字符串中是否包含汉字的辅助函数。
摘要由CSDN通过智能技术生成

;********单行文本转换为多行文本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) "

(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

)

|;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值