明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2075|回复: 20

文字动态伸缩(GIF展示)

[复制链接]
发表于 2022-11-28 22:35 | 显示全部楼层 |阅读模式
本帖最后由 尘缘一生 于 2022-11-29 06:57 编辑

此为开发的中间产品。
还是采取先炸开MTEXT,处理集伸缩,最后在合并成MTEXT,这不怎么好的方式。
对于文字动态伸缩,同时变动字高的功能消除不用,因为,那种情况你几乎不需要的。




由于大动画发不上,动画只展示水平的,对倾斜的,垂直90度的,均支持。
用到一个重要的,信源码,合并TEXT到MTEXT函数,经过改写,支持垂直90度文字,贴在下面。

  • ;单行文字选择集转多行文字----(一级)------
  • ; 缘自信工具源码 MODIFY 尘缘一生 2022-11-29
  • ;ssText  文字选择集 fSpace 行距比例
  • (defun sl-ss-txt2mtext (ssText fSpace / e_lst ptLeftTop fRecWidth Mats x y lstText eText edata fHeight fWidth ang
  •                          lst1 lstText1 e e1 e2 box lstReplace ename)
  •   (setq e_lst (sysvar '("TEXTSTYLE" "CLAYER")))
  •   (setq lstText (ss-enlst ssText))
  •   (setq ename (ssname ssText 0))
  •   (setq ang (dxf1 ename 50))
  •   (command "UCS" "OB" ename)
  •   (setq lstText
  •     (mapcar
  •       '(lambda (eText / edata pt)
  •          (setq edata (entget eText))
  •          (setq pt (dxf1 edata 10))
  •          (trans pt 0 1)
  •          (list pt edata)
  •        )
  •       lstText
  •     )
  •   )
  •   (if (/= 1 (sin ang)) ;非垂直
  •     (progn
  •       (setq lstText (vl-sort lstText '(lambda (e1 e2) (> (cadar e1) (cadar e2)))))
  •       (setq y (cadaar lstText))
  •       (foreach eText lstText
  •         (setq fHeight (dxf1 (cadr eText) 40))
  •         (if (< (abs (- y (cadar eText))) fHeight) ;同行
  •           (progn
  •             (setq lst1 (cons eText lst1))
  •             (setq y (cadar eText))
  •           )
  •           (progn
  •             (setq lstText1 (cons lst1 lstText1)) ;加入
  •             (setq y (cadar eText))
  •             (setq lst1 (list eText))
  •           )
  •         )
  •       )
  •     )
  •     (progn ;垂直
  •       (setq lstText (vl-sort lstText '(lambda (e1 e2) (< (caar e1) (caar e2)))))
  •       (setq x (caaar lstText))
  •       (foreach eText lstText
  •         (setq fHeight (dxf1 (cadr eText) 40))
  •         (if (< (abs (- x (caar eText))) fHeight) ;同行
  •           (progn
  •             (setq lst1 (cons eText lst1))
  •             (setq x (caar eText))
  •           )
  •           (progn
  •             (setq lstText1 (cons lst1 lstText1)) ;加入
  •             (setq x (caar eText))
  •             (setq lst1 (list eText))
  •           )
  •         )
  •       )
  •     )
  •   )
  •   (if lst1 (setq lstText1 (cons lst1 lstText1)))
  •   (setq lstText
  •     (mapcar
  •       '(lambda (lst1)
  •          (mapcar 'cadr
  •            (vl-sort lst1
  •              (if (/= 1 (sin ang))
  •                '(lambda (e1 e2)
  •                   (< (caar e1) (caar e2))
  •                 )
  •                '(lambda (e1 e2)
  •                   (< (cadar e1) (cadar e2))
  •                 )
  •              )
  •            )
  •          )
  •        )
  •       lstText1
  •     )
  •   )
  •   (setq lstText (reverse lstText))
  •   (setq fRecWidth
  •     (apply
  •       'max
  •       (mapcar
  •         '(lambda (e)
  •            (if (> (length e) 1)
  •              (apply
  •                '+
  •                (mapcar
  •                  '(lambda (e1 / box)
  •                     (setq box (textbox e1))
  •                     (caadr box)
  •                   )
  •                  e
  •                )
  •              )
  •              (caadr (textbox (car e)))
  •            )
  •          )
  •         lstText
  •       )
  •     )
  •   )
  •   (setq fRecWidth (* fRecWidth 1.2) lst1 (caar lstText))
  •   (setq fHeight (dxf1 lst1 40))
  •   (setq ptLeftTop (dxf1 lst1 10))
  •   (setq ang (dxf1 lst1 50))
  •   (setq box (textbox lst1))
  •   (setq ptLeftTop
  •     (polar ptLeftTop ang
  •       (apply 'min
  •         (setq a
  •           (vl-remove nil
  •             (mapcar
  •               '(lambda (lst / str)
  •                  (setq str (dxf1 lst 1))
  •                  (cond
  •                    ((wcmatch str " *, *") 0)
  •                    ((> (ascii (substr str 1 1)) 128)
  •                      0
  •                    )
  •                    (T
  •                      (caar (textbox lst))
  •                    )
  •                  )
  •                )
  •               (mapcar 'car lstText)
  •             )
  •           )
  •         )
  •       )
  •     )
  •   )
  •   (setq ptLeftTop (polar ptLeftTop (+ ang pi2) (apply 'max (mapcar '(lambda (e) (dxf1 e 40)) (car lstText)))))
  •   (sl:-erase ssText)
  •   (setvar 'clayer (dxf1 lst1 8))
  •   (setvar 'TEXTSTYLE (dxf1 lst1 7))
  •   (setq fWidth (dxf1 (tblsearch "Style" (getvar 'textstyle)) 41))
  •   (setq sText
  •     (mapcar
  •       '(lambda (e)
  •          (apply
  •            'strcat
  •            (mapcar
  •              '(lambda
  •                 (e1 / str h w c pre)
  •                 (setq str (dxf1 e1 1))
  •                 (setq h (dxf1 e1 40))
  •                 (setq w (dxf1 e1 41))
  •                 (setq c (dxf1 e1 62))
  •                 (setq str (t-string-subst  "\\{" "{" str))
  •                 (setq str (t-string-subst  "\\}" "}" str))
  •                 (setq pre "")
  •                 (if (not (equal h fHeight)) (setq pre (strcat pre "\\H" (rtos (/ h fHeight) 2 1) "x;")))
  •                 (if (not (equal w fWidth)) (setq pre (strcat pre "\\W" (rtos w 2 1) ";")))
  •                 (if c (setq pre (strcat pre "\\C" (rtos c 2 0) ";")))
  •                 (if (/= pre "")
  •                   (setq str (strcat "{" pre str "}"))
  •                   str
  •                 )
  •               )
  •              e
  •            )
  •          )
  •        )
  •       lstText
  •     )
  •   )
  •   (setq sText (slist->String sText "\\P"))
  •   (command "UCS" "")
  •   (Make-MText sText ptLeftTop fRecWidth fHeight fSpace ang 1 1)
  •   (mapcar 'eval e_lst)
  • )



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2023-3-24 08:14 | 显示全部楼层
最后出现了两个笑脸,是什么字母?
回复 支持 1 反对 0

使用道具 举报

发表于 2023-3-26 19:39 | 显示全部楼层
模仿下大佬的功能   用的是修改文字样式方法

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2023-6-8 11:12 | 显示全部楼层
最后出现了两个笑脸,是什么字母?
发表于 2022-11-29 05:30 | 显示全部楼层

感谢楼主分享!!!
发表于 2022-11-29 07:54 | 显示全部楼层
感謝樓主分享
學習一下
发表于 2022-11-29 08:13 | 显示全部楼层


感谢楼主分享!!!
发表于 2022-11-29 09:38 | 显示全部楼层
感謝樓主分享
學習一下
发表于 2022-12-1 08:02 | 显示全部楼层



感谢楼主分享!!!
发表于 2022-12-3 13:08 | 显示全部楼层
感謝樓主分享,有点高大尚
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-20 11:08 , Processed in 0.365148 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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