林霄云 发表于 2014-1-4 19:18:21

文字绕自身中点反转 支持UCS

本帖最后由 林霄云 于 2014-1-5 17:46 编辑

文字绕自身中点反转 支持UCS —— textbox函数的应用实例
思路:
文字绕自身中点反转,关键是取中点。
思路一:可以利用通用函数get-textbox(关于取文本四个角点的通用函数(get-textbox)的解析与测试源码http://bbs.mjtd.com/forum.php?mo ... 910&fromuid=7303580
)取文本框四个角点,然后利用inters(注意转换到UCS下)取其中点。
思路二:利用向量计算,直接取中点。
本文为重点解释textbox函数的作用,按第二思路给出源码,如下RTT(RotaTe text)(defun C:RTT ( / ag ang-self ang en ent pt0-ll pt0-m pt0-tr pt-ins pt-list x y ) ;文字反转RotaTe Text
;;;(setq oldosmode (getvar "osmode"))
;;;(setvar "osmode" 0)

(princ "\n选择需要反转的文字:");提示不需要进入循环
(while (setq en (car (entsel)))

(setq ent (entget en))

(setq pt-ins (cdr (assoc 10 ent)));第一对齐点(在 OCS 中)插入点(非UCS)

(setq ang (cdr (assoc 50 ent)))    ;a 文字旋转角度 弧度(WCS)
      
(setq pt-list (textbox ent))    ;取文本虚拟框
(setq pt0-ll (car pt-list))      ;取左下点
(setq pt0-tr (cadr pt-list))    ;取右上点


(setq te-tr (mapcar '(lambda (x y) (+ x y)) pt0-ll pt0-tr)) ;取对应原点的右上点。

(setq ang-self (atan (cadr te-tr) (car te-tr)));取转角,基点为原点。 self-ang花了作者一晚上的时间,因为polar中的角度是从坐标轴开始的。需要加自身转角。
         
(setq pt-tr (mapcar '(lambda (x y) (+ x y)) te-tr pt-ins));取对应插入点的右上点

;相对pt-ins,将中点旋转角度ang

(setq dis (* 0.5 (distance pt-ins pt-tr)))         ;取长度
(setq pt0-m (polar pt-ins (+ ang-self ang) dis))
;;;(command "point" pt0-m)

(setq ag "180")
(vla-rotate
(vlax-ename->vla-object en)
(vlax-3d-point pt0-m)
(angtof ag)
)

);while 加入循环

;;;(setvar "osmode" oldosmode)    ;取消捕捉,当使用command命令时。
(princ)
);defun

(princ "\nRTT 文字反转命令加载成功\nDesigned by 林霄云 2014年1月4日")
(princ)
结论:此代码经过测试,在UCS下也可以,在文中解释其原因。Rotate text 常用于解决镜像问题。当加入块内文字识别操作时,能有更广泛的应用。

yoyoho 发表于 2014-1-5 09:14:37

指令: _-view 输入选项 [?/删除(D)/正投影(O)/还原(R)/储存(S)/设定(E)/视窗(W)]: _swiso 正在重生模型。
指令: _ucs
目前的 UCS 名称:*世界*
指定 UCS 的原点或 [面(F)/具名(NA)/物件(OB)/前一个(P)/视图(V)/世界(W)/X/Y/Z/Z 轴(ZA)] <世界>: _v
在以上的條件下測試程序沒成功!

香田里浪人 发表于 2014-1-5 19:03:11

有意思,有一定使用价值。

tianyi1230 发表于 2014-1-5 19:16:20

有时候经常用,但是明经上有的源码貌似不支持ucs,支持楼主

自贡黄明儒 发表于 2014-1-6 10:46:37

用trans吧,你的代码可以简化很多

迷不知途 发表于 2015-1-29 01:01:19

自贡黄明儒 发表于 2014-1-6 10:46 static/image/common/back.gif
用trans吧,你的代码可以简化很多

哈哈!!学习了一个新函数!!多谢多谢了!!

z397876224 发表于 2015-8-4 15:54:57

有意思 看看

yjjyjj 发表于 2016-5-29 11:59:26

能框选的话,那就更好了。

石井鱼 发表于 2016-7-10 09:31:48

只能点选,能框选就完美了
页: [1]
查看完整版本: 文字绕自身中点反转 支持UCS