明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1686|回复: 9

[源码] 文字实际最小包围框,自己理解最适用,绕弯反而简单

  [复制链接]
发表于 2021-4-9 20:33 | 显示全部楼层 |阅读模式
本帖最后由 wzg356 于 2023-9-27 07:47 编辑

;==============
;文字实际最小包围框 by wzg356
;(command "pline" (foreach p (txtbox (car(entsel)))(command "non" p)))
(defun txtbox(e / Rot2D es a l l1 w w1 z eb p1 p2)       
        (defun Rot2D (v a / c s x y)
                (setq c (cos a) s (sin a) x (car v) y (cadr v))
                (list (- (* x c) (* y s)) (+ (* x s) (* y c)))
        );;; 旋转向量到指定角度 by高飞鸟
        (setq es(if(listp e)e(entget e)))
        (setq a(cdr(assoc 50 es)))
        (if(= (cdr(assoc 0 es))"MTEXT")
                (setq l(cdr(assoc 42 es)) w(cdr(assoc 43 es))z(cdr(assoc 71 es))
                        w1(if(member z '(4 5 6))(* 0.5 w)(if(member z '(7 8 9))0 w))
                        l1(if(member z '(2 5 8))(* 0.5 l)(if(member z '(1 4 7))0 l))
                        p1(polar (polar (Rot2D(cdr(assoc 10 es))(- 0 a)) pi l1) (* 1.5 pi) w1)
                )
                (setq eb(textbox es) p1(car eb)
                        l(distance p1(list(caadr eb)(cadr p1)))
                        w(distance p1(list(car p1)(cadadr eb)))
                        p1(mapcar '+ p1(Rot2D(cdr(assoc 10 es))(- 0 a)))
                )
        )
        (setq p1(Rot2D p1 a) p2(polar p1 a l) a(+ a(* 0.5 pi)))
        (list p1 p2 (polar p2 a w)(polar p1 a w))
)

评分

参与人数 2明经币 +2 收起 理由
masterlong + 1 这个很棒
xj6019 + 1 很给力!

查看全部评分

"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2021-4-9 21:19 | 显示全部楼层
你很伟大 分享了那么多好的代码  
发表于 2021-4-9 21:52 | 显示全部楼层
谢谢楼主分享,学习一下
 楼主| 发表于 2021-4-9 22:48 | 显示全部楼层
应用例子
文字下划线标注
(defun c:xhx( / e es ps p1 p2 h r)
        (princ "\n选择文本:")
        (and(setq e (ssget ":E:S" '((0 . "*TEXT"))))
                (setq e (ssname e 0) es(entget e))               
                (setq ps(txtbox e))
                (setq h(cdr(assoc 40 es)) r(angle(last ps)(car ps)))
                (setq p1(polar (car ps) r (* h 0.2)) p2(polar (cadr ps) r (* h 0.2)))
                (command  ".pline"  "non"  p1 "w" (* h 0.08) (* h 0.08)  "non" p2 "")
        )
)
发表于 2021-4-10 09:30 | 显示全部楼层
wzg356 发表于 2021-4-9 22:48
应用例子
文字下划线标注
(defun c:xhx( / e es ps p1 p2 h r)

还有一个应用场景 文字加框(包括加方框和圆框)  可以开发一下代码吗
 楼主| 发表于 2021-4-10 09:33 | 显示全部楼层
依然小小鸟 发表于 2021-4-10 09:30
还有一个应用场景 文字加框(包括加方框和圆框)  可以开发一下代码吗

对你这是小儿科啊
发表于 2021-4-10 09:36 | 显示全部楼层
wzg356 发表于 2021-4-10 09:33
对你这是小儿科啊

我一点都不会编程  别看我等级高 我只是喜欢根据工作内容 收集代码和程序 来提高工作效率
 楼主| 发表于 2021-4-10 10:45 | 显示全部楼层
本帖最后由 wzg356 于 2021-4-11 15:12 编辑

原贴中
(setq eb(textbox es)                        
        l(apply 'distance eb) w(cdr(assoc 40 es))
)
改为下面更准确
(setq eb(textbox es) p1(car eb)
        l(distance p1(list(caadr eb)(cadr p1)))
        w(distance p1(list(car p1)(cadadr eb)))
)
发表于 2021-4-15 08:47 | 显示全部楼层
谢谢楼主分享。
发表于 2022-12-17 02:30 | 显示全部楼层
感谢大佬分享~~~
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-3-29 03:40 , Processed in 0.178199 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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