找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1820|回复: 3

[文本] (XD::Text:SplitBy)删除指定的字符串(支持正则表达式)而文字实体位置不变。

[复制链接]

已领礼包: 40个

财富等级: 招财进宝

发表于 2014-12-8 21:44:23 | 显示全部楼层 |阅读模式
函数发布
函数名称: XD::Text:SplitBy
调用格式: (XD::Text:SplitBy ent match mode)
参数说明: ent --- 文字(TEXT)实体名
match-- 匹配字符串,支持正则表达式,如: \s 空白字符
mode -- 操作模式, T, 删除 NIL 删除其他
返回值: 选择集 or nil
函数简介: 删除指定的字符串(支持正则表达式)而文字实体位置不变。
函数来源: 原创
函数作者: Newer
适用版本: XDRX API 
最后更新时间: 2014-12-08
备注: -
演示图片:

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

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

×
  1. ;|
  2. 删除指定的字符串(支持正则表达式)而文字实体位置不变。
  3. 参数: ent --- 文字(TEXT)实体名
  4.        match-- 匹配字符串,支持正则表达式,如: \s 空白字符
  5.        mode -- 操作模式, T, 删除  NIL 删除其他
  6. 返回值:选择集 or nil
  7. |;
  8. (defun XD::Text:SplitBy (ent match mode / ang basept box ent2 n nrm pt ss str strl tf)
  9.   (if (and
  10.         (setq str (xdrx_getpropertyvalue ent "textstring"))
  11.         (xdrx_string_regexps (strcat "[" match "]+") str)
  12.         (setq str (xdrx_string_regexpr "[\\s\\u3000]+$" str ""))
  13.         (setq strl (xdrx_string_regexps (strcat "[" match "]+|[^" match "]+")
  14.                                         str
  15.                    )
  16.         )
  17.       )
  18.     (progn
  19.       (xdrx_begin)
  20.       (xdrx_setmark)
  21.       (setq pt (xdrx_getpropertyvalue ent "position")
  22.             basept pt
  23.             nrm (xdrx_getpropertyvalue ent "normal")
  24.             ang (xdrx_getpropertyvalue ent "rotation")
  25.       )
  26.       (foreach n strl
  27.         (setq ss (xdrx_entity_copy ent)
  28.               ent2 (entlast)
  29.         )
  30.         (xdrx_setpropertyvalue ent2 "textstring" n "rotation" 0.0 "position"
  31.                                pt
  32.         )
  33.         (setq box (xdrx_entity_box ent2)
  34.               pt (mapcar
  35.                    '+
  36.                    pt
  37.                    (mapcar
  38.                      '-
  39.                      (cadr box)
  40.                      (car box)
  41.                    )
  42.                  )
  43.         )
  44.         (if mode
  45.           (setq tf (xdrx_string_regexps (strcat "[" match "]") n))
  46.           (setq tf (not (xdrx_string_regexps (strcat "[" match "]") n)))
  47.         )
  48.         (if tf
  49.           (entdel ent2)
  50.           (xdrx_entity_rotate ent2 ang basept nrm)
  51.         )
  52.       )
  53.       (entdel ent)
  54.       (xdrx_end)
  55.       (xdrx_getss)
  56.     )
  57.   )
  58. )



测试命令:

  1. (defun c:tt ()
  2.   (if (and
  3.         (/= (setq match (getstring "\n输入要删除的字符<退出>:")))
  4.         (progn
  5.           (prompt "\n选取要处理的字符串<退出>:")
  6.           t
  7.         )
  8.         (setq ss (ssget '((0 . "TEXT"))))
  9.       )
  10.     (progn
  11.       (if (= 1 (xdrx_yesorno "删除" 1))
  12.          (setq mode t)
  13.          (setq mode nil)
  14.       )
  15.       (mapcar
  16.         '(lambda (x)
  17.            (xd::text:splitby x match mode)
  18.          )
  19.         (xdrx_pickset->ents ss)
  20.       )
  21.     )
  22.   )
  23.   (princ)
  24. )


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

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-12-8 21:53:15 来自手机 | 显示全部楼层
如果给attrib实体好像也能运行到某处再出错

点评

ATTRIB应该是不行,因为分解出来的是在模型空间,和块属性定义之间没有链接关系,这个主要是操作TEXT的,属性谁也不会那么无聊要经常这样删除。 这个函数主要是对文本按行处理的基础函数。把一个中间带空格的文字,  详情 回复 发表于 2014-12-8 23:24
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

 楼主| 发表于 2014-12-8 23:24:12 | 显示全部楼层
st788796 发表于 2014-12-8 21:53
如果给attrib实体好像也能运行到某处再出错

ATTRIB应该是不行,因为分解出来的是在模型空间,和块属性定义之间没有链接关系,这个主要是操作TEXT的,属性谁也不会那么无聊要经常这样删除。
这个函数主要是对文本按行处理的基础函数。把一个中间带空格的文字,中间的空格处是比如平方数字那样的,分解后在都正确连接起来时候用。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 202个

财富等级: 日进斗金

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-29 06:02 , Processed in 0.324967 second(s), 43 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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