明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1274|回复: 7

块内文字,归正旋转方向

[复制链接]
发表于 2023-4-12 16:26:28 | 显示全部楼层 |阅读模式
本帖最后由 尘缘一生 于 2023-4-12 17:34 编辑

    这个事,从透露出来,都说得炸开,处理。这么多年也是这么作的。

尝试不炸开处理,失败了,主要是角度怎么算是对得,没测试出来,下面是代码,
既然透过块能改变块内文字角度,哪这个角度转为锐角,即可文字归正,不会颠倒,关键怎么算?
指的是块内普通文字,不是块内属性文字,属性文字另外回事,

晓东论坛有涉及:http://bbs.xdcad.net/forum.php?m ... 8301&extra=page%3D8

本坛有人提问的,没有解决的,目前没有源码,还是等于个0


    • ;将角度修正到0~2π之间-----(一级)-------
    • (defun Angle-Mod (ang / )
    •   (while (>= ang 2pi) (setq ang (- ang 2pi)))
    •   (while (< ang 0) (setq ang (+ ang 2pi)))
    •   ang
    • )
    • ;角度转换至 锐角------(一级)----------
    • ;(angle-sharp ang)
    • (defun angle-sharp (ang /)
    •   (setq ang (Angle-Mod ang))
    •   (if (> ang pi) (setq ang (- ang pi)))
    •   (if (> ang pi2) (setq ang (- ang pi)))
    •   ang
    • )
    • ;块内文字归正测试
    • (defun c:tt ()
    •   (blk-wzgz (car (entsel)))
    • )
    • ;;块内文字归正角度---------(一级)------------
    • ;;(blk-wzgz (car(entsel)))
    • (defun blk-wzgz (entblkname / xblkname obj kuaiang txtang xblkdef nam1 tp tpnam)
    •   (setq xblkname (dxf1 entblkname 2)) ;;嵌套块名
    •   (setq blkobj (en2obj entblkname))   ;;嵌套块vla对象
    •   (setq kuaiang (dxf1 entblkname 50)) ;;块的旋转角度
    •   (setq xblkdef (tblobjname "Block" xblkname))
    •   (while (setq nam1 (entnext xblkdef))
    •     (setq tp (dxf1 nam1 0))  ;;子图元类型
    •     (setq obj (en2obj nam1))  ;;子图元vla对象
    •     (setq tpnam (vla-get-objectname obj))
    •     (if (= tp "INSERT")
    •       (blk-wzgz nam1)  ;;递归
    •       (if (or (= "AcDbText" tpnam) (= "AcDbMText" tpnam) (= "AcDbAttributeDefinition" tpnam) (= "AcDbAttribute" tpnam))
    •         (progn
    •           (setq txtang (+ (vla-get-Rotation obj) kuaiang))  ;;块的旋转角度+块内文字旋转角度
    •           ;(setq txtang (- pi txtang))
    •           ;(vla-put-rotation obj (angle-sharp txtang)) ;锐角
    •           (vla-put-rotation obj (angle-sharp txtang)) ;锐角 ,此处不对,
    •         )
    •       )
    •     )
    •     (setq xblkdef nam1)
    •   )
    •   (vla-update blkobj)
    • )





发表于 2023-4-13 09:56:18 | 显示全部楼层
本帖最后由 e2002 于 2023-4-13 14:58 编辑

同一个Block,在ModelSpace或者PaperSpace中的各个实例Insert对象,不一定都是同样的Rotation值,有些可能是需要旋转X度/Y度...无法统一。实际上并不需要这样做。

如果非要保持Block内的某些文字是永远正向显示,只能定义相应的 Annotative 的 Style,并勾选上 Match text orientation to layout。 注意这种显示的效果在布局中才能看到。
 楼主| 发表于 2023-4-13 22:13:14 | 显示全部楼层
e2002 发表于 2023-4-13 09:56
同一个Block,在ModelSpace或者PaperSpace中的各个实例Insert对象,不一定都是同样的Rotation值,有些可能 ...

暂时放下吧,但我相信,不炸开,是绝对可以处理了它。
发表于 2023-4-14 11:13:22 | 显示全部楼层
尘缘一生 发表于 2023-4-13 22:13
暂时放下吧,但我相信,不炸开,是绝对可以处理了它。

要么需要调整旋转角度的的块内对象,加上动态,程序只能处理特定的这种有动态参数的块内对象。
 楼主| 发表于 2023-4-14 17:35:31 | 显示全部楼层
e2002 发表于 2023-4-14 11:13
要么需要调整旋转角度的的块内对象,加上动态,程序只能处理特定的这种有动态参数的块内对象。

动态调整,这个启示很重要,试试。。。
发表于 2023-4-15 17:35:43 | 显示全部楼层
尘缘一生 发表于 2023-4-14 17:35
动态调整,这个启示很重要,试试。。。

用动态文字的方向应该很容易。文字的角度要设置成了一个动态属性。
发表于 2023-4-15 17:57:09 来自手机 | 显示全部楼层
同一个块不同的角度,以哪个为准?
发表于 2023-4-24 13:47:44 | 显示全部楼层
Bao_lai 发表于 2023-4-15 17:57
同一个块不同的角度,以哪个为准?

你这个是正解了啊   一个块  不能有两个定义,除非所有的块插入都一样
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-25 07:57 , Processed in 0.167496 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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