找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1723|回复: 7

[文本] (XD::Text:StringBetween)获取Text一点或两点间String

[复制链接]

已领礼包: 593个

财富等级: 财运亨通

发表于 2013-12-8 08:34:43 | 显示全部楼层 |阅读模式
函数发布
函数名称: XD::Text:StringBetween
调用格式: (XD::Text:StringBetween e p1 p2)
参数说明: ;;功 能: 获取一点或两点间String
;;参 数: e --- Text Entity
;; p1 -- Point
;; p2 -- Point or nil
;;返回值: String
返回值: string
函数简介: 获取Text一点或两点间String
函数来源: 原创
函数作者: eachy
适用版本: XDRX API 
最后更新时间: 2013-12-08
备注: -
演示图片: -

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

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

×
  1. ;;功  能: 获取一点或两点间String
  2. ;;参  数: e --- Text Entity
  3. ;;        p1 -- Point
  4. ;;        p2 -- Point or nil
  5. ;;返回值: String
  6. (defun XD::Text:StringBetween (e    p1         p2   /           gettl     el          str
  7.                                nstr nnstr     ll   l        zl   ecs  inspt
  8.                                l1   l2         l3   l4
  9.                               )
  10.   (if (= (xdrx_getpropertyvalue e "IsA") "AcDbText")
  11.     (progn
  12.       (defun gettl (l / box)
  13.         (setq box (textbox l))
  14.         (car (mapcar '- (cadr box) (car box)))
  15.       )
  16.       (setq el          (entget e)
  17.             str          (cdr (assoc 1 el))
  18.             nstr  (xd::string:singlechr str)
  19.             l          (vl-remove-if-not
  20.                     '(lambda (x) (vl-position (car x) '(1 40 41 7)))
  21.                     el
  22.                   )
  23.             zl          (gettl l)
  24.             ecs          (xdrx_entity_getecs e)
  25.             inspt (car ecs)
  26.             l1          (last (trans (mapcar '- (trans p1 1 0) inspt) 0 (cadr ecs)))
  27.             nnstr nstr
  28.       )
  29.       (while nnstr
  30.         (setq ll    (cons
  31.                       (gettl
  32.                         (subst (cons 1 (apply 'strcat nnstr))
  33.                                (assoc 1 l)
  34.                                l
  35.                         )
  36.                       )
  37.                       ll
  38.                     )
  39.               nnstr (cdr nnstr)
  40.         )
  41.       )
  42.       (if p2
  43.         (progn
  44.           (setq        l2
  45.                  (last
  46.                    (trans (mapcar '- (trans p2 1 0) inspt) 0 (cadr ecs))
  47.                  )
  48.           )
  49.           (mapcar 'set '(l3 l4) (vl-sort (list l1 l2) '<))
  50.           (if (or (<= l4 0.) (>= l3 zl))
  51.             str
  52.             (apply 'strcat
  53.                    (vl-remove nil
  54.                               (mapcar '(lambda (a b)
  55.                                          (if a
  56.                                            b
  57.                                            nil
  58.                                          )
  59.                                        )
  60.                                       (mapcar '(lambda (x)
  61.                                                  (if (<= l3 x l4)
  62.                                                    x
  63.                                                    nil
  64.                                                  )
  65.                                                )
  66.                                               ll
  67.                                       )
  68.                                       nstr
  69.                               )
  70.                    )
  71.             )
  72.           )
  73.         )
  74.         (if (or (<= l1 0.) (>= l1 zl))
  75.           str
  76.           (nth (1+ (vl-position
  77.                      (last (vl-remove-if '(lambda (x) (> x l1)) ll))
  78.                      ll
  79.                    )
  80.                )
  81.                nstr
  82.           )
  83.         )
  84.       )
  85.     )
  86.   )
  87. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 593个

财富等级: 财运亨通

 楼主| 发表于 2013-12-8 08:40:54 | 显示全部楼层
test
  1. (defun c:tt (/ e el p1 p2 str ne)
  2.   (if (and (setq e (ssget ":L:S" '((0 . "text"))))
  3.            (setq p1 (getpoint "\nFirst Point: "))
  4.            (setq p2 (XD::Doc:Getcorner p1 "\nSecond point: "))
  5.       )
  6.     (progn
  7.       (setq e        (ssname e 0)
  8.             el        (entget e)
  9.             str        (XD::Text:StringBetween e p1 p2)
  10.             el        (subst (cons 1 str) (assoc 1 el) el)
  11.             el        (subst (cons 10 (trans p1 1 0)) (assoc 10 el) el)
  12.       )
  13.       (entmakex el)
  14.       (vl-cmdf ".move" "L" "" "_none" p1) ;_Move
  15.       (while (/= (getvar "cmdactive") 0)
  16.         (vl-cmdf pause)
  17.       )
  18.     )
  19.   )
  20.   (princ)
  21. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 604个

财富等级: 财运亨通

发表于 2013-12-13 11:37:09 | 显示全部楼层
我最关心的是pick框内对象左键增,右键减{:soso_e113:}

点评

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

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2013-12-13 11:39:22 | 显示全部楼层
/db_自贡黄明儒_ 发表于 2013-12-13 11:37
我最关心的是pick框内对象左键增,右键减

这个可以有{:soso_e100:}

点评

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

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2013-12-13 12:10:19 | 显示全部楼层
1 Mtext 单行的要用到 RegexpS 提取字串,多行就要分出行来,分别处理
2 非 API 的用 Command UCS  O 选项放到文字上就可以获得一个 UCS ,剩下的就可以利用楼主的代码
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 202个

财富等级: 日进斗金

发表于 2019-5-13 15:55:58 | 显示全部楼层
这个函数对于像钢筋符号这类的,需要自己做下调整
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-25 18:05 , Processed in 0.359198 second(s), 41 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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