尘缘一生 发表于 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)
[*])





e2002 发表于 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值,有些可能 ...

暂时放下吧,但我相信,不炸开,是绝对可以处理了它。

e2002 发表于 2023-4-14 11:13:22

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

要么需要调整旋转角度的的块内对象,加上动态,程序只能处理特定的这种有动态参数的块内对象。

尘缘一生 发表于 2023-4-14 17:35:31

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

动态调整,这个启示很重要,试试。。。

chixun99 发表于 2023-4-15 17:35:43

尘缘一生 发表于 2023-4-14 17:35
动态调整,这个启示很重要,试试。。。

用动态文字的方向应该很容易。文字的角度要设置成了一个动态属性。

Bao_lai 发表于 2023-4-15 17:57:09

同一个块不同的角度,以哪个为准?

liuhe 发表于 2023-4-24 13:47:44

Bao_lai 发表于 2023-4-15 17:57
同一个块不同的角度,以哪个为准?

你这个是正解了啊   一个块不能有两个定义,除非所有的块插入都一样
页: [1]
查看完整版本: 块内文字,归正旋转方向