找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1672|回复: 4

[字符串] (XD::Mtext:Explode)炸开MTEXT,保持字体样式

[复制链接]

已领礼包: 51个

财富等级: 招财进宝

发表于 2018-5-23 23:47:43 | 显示全部楼层 |阅读模式
函数发布
函数名称: XD::Mtext:Explode
调用格式: (XD::Mtext:Explode ss)
参数说明: ss ---- 选择集 or Ename or vla-object
返回值:
函数简介: 炸开MTEXT,保持字体样式
函数来源: 原创
函数作者: Lispboy
适用版本: XDRX API 
最后更新时间: 2018-05-23
备注: -
演示图片: -

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
搜狗截图20180524132601.png

133414ckx5arlxecdd2lal.gif
炸MTEXT.gif

  1. ;|
  2. 函数名称:        XD::Mtext:Explode
  3. 调用格式:        (XD::Mtext:Explode ss)
  4. 参数说明:        ss ---- 选择集 or Ename or vla-object
  5. 返回值:        表
  6. 函数简介:        炸开MTEXT,保持字体样式(样式随第一个自定义样式)
  7. 函数来源:        原创
  8. 函数作者:        Lispboy
  9. 适用版本:        XDRX API
  10. 最后更新时间:        2018-05-23
  11. |;
  12. (defun XD::Mtext:Explode (ss / x txt font face ss1 ss2 h prec y styl faces xdir)
  13.   (cond ((= (type ss) 'PICKSET) (setq ss (xdrx_pickset->ents ss)))
  14.         ((= (type ss) 'ENAME) (setq ss (list ss)))
  15.         ((= (type ss) 'VLA-OBJECT)
  16.          (setq ss (list (vlax-vla-object->ename ss)))
  17.         )
  18.   )
  19.   (setq prec (xdrx_document_getprec))
  20.   (mapcar
  21.     '(lambda (x / )
  22.        (if (xdrx_object_isa x "AcDbMtext")
  23.          (progn (setq txt (xdrx_getpropertyvalue x "contents")
  24.                       xdir (xdrx_entity_getecs x)
  25.                       xdir (cadr xdir)
  26.                       row (xdrx_string_split txt "\\P")
  27.                       styl (xdrx_getpropertyvalue x "textstyle" nil)
  28.                 )
  29.                 (setq
  30.                   faces (mapcar '(lambda (y)
  31.                                    (cond ((setq font (xdrx_string_regexps "(?<=\\\\f).*(?=\\|)" y 6 t))
  32.                                           (setq face (car (xdrx_string_regexps "[^|]+" font)))
  33.                                           (if (not (xdrx_object_get "style" face))
  34.                                             (progn (setq txt (xdrx_textstyle_make face "" "" 0.0 1.0))
  35.                                                    (xdrx_setpropertyvalue txt "font" face)
  36.                                             )
  37.                                           )
  38.                                          )
  39.                                          ((setq font (xdrx_string_regexps "(?<=\\\\F).*(?=\\|)" txt 6 t))
  40.                                           (setq face (car (xdrx_string_regexps "[^|]+" font)))
  41.                                           (if (not (xdrx_object_get "style" face))
  42.                                             (progn (setq txt (xdrx_textstyle_make face "" "" 0.0 1.0))
  43.                                                    (xdrx_setpropertyvalue txt "filename" face)
  44.                                             )
  45.                                           )
  46.                                          )
  47.                                          (t
  48.                                           (setq face styl))
  49.                                    )
  50.                                    face
  51.                                  )
  52.                                 row
  53.                         )
  54.                 )
  55.                 (setq ss1 (xdrx_entity_explode x))
  56.                 (xdrx_entity_setproperty ss1 "textstyle" face)
  57.                 (setq h (xdrx_getpropertyvalue (ssname ss1 0) "textheight")
  58.                       h (* 2 (/ h 3.0))
  59.                 )
  60.                 (xdrx_document_setprec h 0.01)
  61.                 (setq ss2 (xd::pickset:tablesortatecs ss1 xdir 0 3 '> '<))
  62.                 (setq faces (XD::List:FillGap faces styl (length ss2)))
  63.                 (apply 'xdrx_document_setprec prec)
  64.                 (mapcar '(lambda (m n)
  65.                            (setq str (xdrx_entity_getproperty m "textstring")
  66.                                  str (apply 'strcat str)
  67.                            )
  68.                            (xdrx_setpropertyvalue (car m) "textstring" str)
  69.                            (xdrx_entity_delete (cdr m))
  70.                            (xdrx_setpropertyvalue (car m) "textstyle" n)
  71.                            (car m)
  72.                          )
  73.                         ss2
  74.                         faces
  75.                 )
  76.          )
  77.        )
  78.      )
  79.     ss
  80.   )
  81. )


测试命令
  1. (defun c:tt()
  2.   (if (setq ss (ssget '((0 . "MTEXT"))))
  3.     (xd::mtext:explode ss)
  4.   )
  5.   (princ)
  6. )





评分

参与人数 1D豆 +5 收起 理由
sh_h + 5 很给力!经验;技术要点;资料分享奖!

查看全部评分

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 812个

财富等级: 财运亨通

发表于 2018-5-24 07:59:56 | 显示全部楼层
感谢大师分享
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 769个

财富等级: 财运亨通

发表于 2018-5-24 14:24:21 | 显示全部楼层
真是有求必应,有问必答!谢谢大师分享!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2021-4-24 22:35:49 | 显示全部楼层
本帖最后由 st788796 于 2021-4-24 22:38 编辑

有 Bug 看下图,下面是原文字,还有前面一个去 Mtext 格式的对  \c 处理的不全对
20210424223824.png

                               
登录/注册后可看大图

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 8611个

财富等级: 富甲天下

发表于 2021-4-24 22:57:27 | 显示全部楼层
我也发现这个问题了,自己改了一下,与文字位置什么的无关了,但还是有问题,处理不了复杂的情况。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-3-28 22:41 , Processed in 0.393085 second(s), 42 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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