块内文字,归正旋转方向
本帖最后由 尘缘一生 于 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 14:58 编辑
同一个Block,在ModelSpace或者PaperSpace中的各个实例Insert对象,不一定都是同样的Rotation值,有些可能是需要旋转X度/Y度...无法统一。实际上并不需要这样做。
如果非要保持Block内的某些文字是永远正向显示,只能定义相应的 Annotative 的 Style,并勾选上 Match text orientation to layout。 注意这种显示的效果在布局中才能看到。 e2002 发表于 2023-4-13 09:56
同一个Block,在ModelSpace或者PaperSpace中的各个实例Insert对象,不一定都是同样的Rotation值,有些可能 ...
暂时放下吧,但我相信,不炸开,是绝对可以处理了它。 尘缘一生 发表于 2023-4-13 22:13
暂时放下吧,但我相信,不炸开,是绝对可以处理了它。
要么需要调整旋转角度的的块内对象,加上动态,程序只能处理特定的这种有动态参数的块内对象。 e2002 发表于 2023-4-14 11:13
要么需要调整旋转角度的的块内对象,加上动态,程序只能处理特定的这种有动态参数的块内对象。
动态调整,这个启示很重要,试试。。。 尘缘一生 发表于 2023-4-14 17:35
动态调整,这个启示很重要,试试。。。
用动态文字的方向应该很容易。文字的角度要设置成了一个动态属性。 同一个块不同的角度,以哪个为准? Bao_lai 发表于 2023-4-15 17:57
同一个块不同的角度,以哪个为准?
你这个是正解了啊 一个块不能有两个定义,除非所有的块插入都一样
页:
[1]