明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1465|回复: 6

[源码] 多行文本转单行单线字体

[复制链接]
发表于 2018-6-2 17:13:03 | 显示全部楼层 |阅读模式
;;多行文本转单行单线字体
(defun c:zt (/ dxflst e i ii len n newstr num obj pt ss str strnum tn tnlst tnlstn txthight)
    (setvar "cmdecho" 0)
   
  (setq ss (ssget '((0 . "MTEXT"))))
  (setq n 0)
  (repeat (sslength ss)
    (setq e (ssname ss n))
        (setq dxflst (EH-Get-EntDxf e '(10 40))) ;;返回格式 ((363.089 97.6808 0.0) 46.3501)
        (setq pt (car dxflst))
        (setq txthight (cadr dxflst))
        (setq pt (list (car pt)(- (cadr pt) txthight)))
        ;;
        (setq obj (vlax-ename->vla-object e))
        (setq Str (vlax-get obj 'TextString))
        ;;
        (setq strnum (vl-string->list Str));字符串转ascii代码表
        (setq len (length strnum))        
        ;;
        (setq i 0);取表内asccii代码值用
        (setq ii 0);变量编号用
        (setq tn "tn");变量编号用
        (setq tnlstn '()) ;临时变量赋值用列表        
        ;;
        (repeat len
            (setq num (nth i strnum))
            (if (or
                        (= num 123)
                        (= num 125)
                        (= num 92)
                        (= num 59)
                        (= num 44)
                        (and (= num 161)(= (nth (1+ i) strnum) 162))
                        (and (= num 162) (= (nth (1- i) strnum) 161))
                        (and (= num 163)(= (nth (1+ i) strnum) 187))
                        (and (= num 187) (= (nth (1- i) strnum) 163))
                        (and (= num 163)(= (nth (1+ i) strnum) 172))
                        (and (= num 172)(= (nth (1- i) strnum) 163))
                    )
                (progn   
                    ;(setq tnlst (strcat tn (itoa (setq ii (1+ ii)))))
                    (setq tnlst nil)
                    (setq tnlstn '())
                )
                (progn
                    (if (null tnlst)(setq tnlst (strcat tn (itoa (setq ii (1+ ii))))))
                    (set (read tnlst) (setq tnlstn (append tnlstn (list num))))
                )
            );if
            (setq i (1+ i))
        ) ;repeat文本截断
        
        (setq newstr (vl-list->string (vl-symbol-value (read (strcat tn (itoa ii))))));ascii代码表转字符串
        (if newstr               
            (EH-Make-Text pt txthight nil 0 nil newstr "中Z-04--墙料编号")
        )
        
        ;变量清空
        (setq ii (1+ ii))               
        (repeat ii                    
            (setq tnlst (strcat tn (itoa (setq ii (1- ii)))))
            (set (read tnlst) nil)
            
        )
        (vla-Delete obj)
        (setq n (+ n 1))
    )
    (setvar "cmdecho" 1)
    (princ)
);defun_end
发表于 2021-11-17 09:21:28 | 显示全部楼层
多行文本炸开就是单行文本
回复 支持 1 反对 0

使用道具 举报

发表于 2018-6-4 07:44:26 | 显示全部楼层
谢谢! Gray-wolf 分享收藏了!!!!
发表于 2018-6-4 08:14:31 | 显示全部楼层
缺少自定义函数
EH-Get-EntDxf
EH-Make-Text
发表于 2021-11-13 16:43:24 | 显示全部楼层
; 错误: no function definition: EH-GET-ENTDXF   兄弟看下
发表于 2021-11-14 09:25:37 | 显示全部楼层
(EH-Make-Text  pt  txthight nil 0 nil newstr "中Z-04--墙料编号")   这句没弄明白 生成文字的自定义函数中   两个nil是指的啥?
发表于 2023-1-16 10:43:03 | 显示全部楼层
似乎整复杂了,直接炸开不可以吗?直接炸开得到单行问题,再修改字体样式就行了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-16 07:23 , Processed in 0.319233 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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