明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 4354|回复: 8

[源码] 文字绕自身中点反转 支持UCS

[复制链接]
发表于 2014-1-4 19:18:21 | 显示全部楼层 |阅读模式
本帖最后由 林霄云 于 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)
  1. (defun C:RTT ( / ag ang-self ang en ent pt0-ll pt0-m pt0-tr pt-ins pt-list x y ) ;文字反转RotaTe Text
  2. ;;;(setq oldosmode (getvar "osmode"))
  3. ;;;(setvar "osmode" 0)

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

  6. (setq ent (entget en))

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

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


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

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

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

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

  21. (setq ag "180")
  22. (vla-rotate
  23.   (vlax-ename->vla-object en)
  24.   (vlax-3d-point pt0-m)
  25.   (angtof ag)
  26. )

  27.   );while 加入循环

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

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

本帖子中包含更多资源

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

x
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 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 | 显示全部楼层
有意思,有一定使用价值。
发表于 2014-1-5 19:16:20 | 显示全部楼层
有时候经常用,但是明经上有的源码貌似不支持ucs,支持楼主
发表于 2014-1-6 10:46:37 | 显示全部楼层
用trans吧,你的代码可以简化很多

点评

今日回顾之,没有trans应用之处。textbox返回的点,就是WCS下的。The points returned by textbox describe the bounding box of the text object as if its insertion point is located at (0,0,0) and its rota...  发表于 2014-4-20 16:57
发表于 2015-1-29 01:01:19 | 显示全部楼层
自贡黄明儒 发表于 2014-1-6 10:46
用trans吧,你的代码可以简化很多

哈哈!!学习了一个新函数!!多谢多谢了!!
发表于 2015-8-4 15:54:57 | 显示全部楼层
有意思 看看
发表于 2016-5-29 11:59:26 | 显示全部楼层
能框选的话,那就更好了。
发表于 2016-7-10 09:31:48 | 显示全部楼层
只能点选,能框选就完美了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-12-24 01:33 , Processed in 0.216305 second(s), 35 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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