找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2482|回复: 6

[求助] 图中这样的文字的包围盒怎么得到?

[复制链接]

已领礼包: 19个

财富等级: 恭喜发财

发表于 2013-5-2 10:58:51 | 显示全部楼层 |阅读模式

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

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

×

对于文字有倾角的,我想获得实际形状的包围盒,有办法吗?

QQ截图20130502105641.png
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2013-5-2 11:38:53 | 显示全部楼层
根据文字的倾角用三角函数重新计算角点
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2013-5-2 13:30:54 | 显示全部楼层
本帖最后由 Faster 于 2013-5-2 14:55 编辑

[pcode=lisp,true](defun getTextminBox (EN / ENX L B R N W H J O ob tan)
(defun tan (a)
  (/ (sin a) (cos a))
)
  (if (= 'VLA-OBJECT (type en))
    (setq en (vlax-vla-object->ename en))
  )
  (setq enx (entget en))
  (setq        l
         (cond
           ((= "TEXT" (cdr (assoc 0 enx)))
            (setq b (cdr (assoc 10 enx))
                  r (cdr (assoc 50 enx))
                  l (textbox enx)
                  n (cdr (assoc 210 enx))
                  ob (cdr (assoc 51 enx))
            )
            (setq l
                   (list
                     (list (caar l) (cadar l))
                     (list (caadr l) (cadar l))
                     (list (caadr l) (cadadr l))
                     (list (caar l) (cadadr l))
                     )
                  h (distance (car l) (last l))
                  )
            (list
              (car l)
              (polar (cadr l) 0 (- (* h (tan ob))))
              (caddr l)
              (polar (cadddr l) 0 (* h (tan ob)))
              )
           )
           ((= "MTEXT" (cdr (assoc 0 enx)))
            (setq n (cdr (assoc 210 enx))
                  b (trans (cdr (assoc 10 enx)) 0 n)
                  r (angle '(0.0 0.0 0.0) (trans (cdr (assoc 11 enx)) 0 n))
                  w (cdr (assoc 42 enx))
                  h (cdr (assoc 43 enx))
                  j (cdr (assoc 71 enx))
                  o (list
                      (cond
                        ((member j '(2 5 8)) (/ w -2.0))
                        ((member j '(3 6 9)) (- w))
                        (0.0)
                      )
                      (cond
                        ((member j '(1 2 3)) (- h))
                        ((member j '(4 5 6)) (/ h -2.0))
                        (0.0)
                      )
                    )
            )
            (list
              (list (car o) (cadr o))
              (list (+ (car o) w) (cadr o))
              (list (+ (car o) w) (+ (cadr o) h))
              (list (car o) (+ (cadr o) h))
            )
           )
         )
  )
  (setq        l
         ((lambda (m)
            (mapcar
              '(lambda (p)
                 (mapcar '+
                         (mapcar '(lambda (r) (apply '+ (mapcar '* r p))) m)
                         b
                 )
               )
              l
            )
          )
           (list
             (list (cos r) (sin (- r)) 0.0)
             (list (sin r) (cos r) 0.0)
             '(0.0 0.0 1.0)
           )
         )
  )
  (mapcar '(lambda (x) (trans x n 0)) l)
)[/pcode]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 19个

财富等级: 恭喜发财

 楼主| 发表于 2013-5-2 13:41:54 | 显示全部楼层

谢谢! 借用你的图测试下,为什么结果是这样? 我运行你提供的代码,提示tan函数没有,猜是求正切的,就自己写了个,但是结果却不是我想要的。

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

使用道具 举报

已领礼包: 86个

财富等级: 招财进宝

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

使用道具 举报

发表于 2013-5-3 00:28:44 | 显示全部楼层
得到一个正放的TextBox,如匹配到实体或者有旋转的可以用矩阵再次转换[pcode=lisp,true](defun GetTextBox (el / box p1 p3 c71 tf c51 an v l p2 p4 tb)
  (setq        box (textbox (list (assoc 1 el)
                           (assoc 40 el)
                           (assoc 50 el)
                           (assoc 41 el)
                           (setq c51 (assoc 51 el))
                           (assoc 7 el)
                     )
            )
        p1  (car box)
        p3  (cadr box)
        c71 (cdr (assoc 71 el))
        an  (cdr c51)
        tf  (zerop an)
        v   (mapcar '- p3 p1)
  )
  (if (not tf)
    (setq l (* (/ (cadr v) (sin an)) (cos an)))
    (setq l 0.)
  )
  (setq        vl (- (car v) l)
        p2 (polar p1 0. vl)
        p4 (polar p3 pi vl)
        tb (list p1 p2 p3 p4)
  )
  (cond
    ((= c71 2)
     (mapcar (function (lambda (x) (mapcar '* '(-1 1 0) x))) tb)
    )
    ((= c71 4)
     (mapcar (function (lambda (x) (mapcar '* '(1 -1 0) x))) tb)
    )
    ((= c71 6)
     (mapcar (function (lambda (x) (mapcar '* '(-1 -1 0) x))) tb)
    )
    (t tb)
  )
)
(defun c:tt (/ e box)
  (if (setq e (car (entsel)))
    (progn
      (setq box (GetTextBox (entget e)))
      (apply 'vl-cmdf (cons ".pline" box))
      (vl-cmdf "c")
      (vl-cmdf "_move"
               "l"
               ""
               "_None"
               '(0. 0. 0.)
               (cdr (assoc 10 (entget e)))
      )
    )
  )
  (princ)
)[/pcode]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-27 18:10 , Processed in 0.189916 second(s), 47 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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