如何绘制 "不足居中,太长压窄" 的文字。
本帖最后由 千风 于 2013-12-2 10:50 编辑面临这样一个问题:
需要在CAD中绘制一个 属性定义 ,要求值文字居中显示且
①如果值文字总长不足10mm,则自动居中显示。
②如果值文字总长超过10mm,则自动被压扁到10mm。
我的问题出在:
如果我设定对齐方式为居中,填的值太长就会超10mm的限制
如果我设定对齐方式为布满,填一个字母的值就被拉长到10mm惨不忍睹了!
可以编程序实现,但是想对属性块编辑后实时实现可能只能用反应器了。 将文字属性设置为居中,然后计算每个文字的宽度,然后根据计算的文字宽度来修改文字的宽比因子! 属性文本f对齐 有一种想法,因为手
机上,所以没试过,当文字不足10的时候,补充不可见字符,如空格,我试过右对齐,没试过布满。 本帖最后由 llsheng_73 于 2013-12-11 10:16 编辑
得到属性图元名e后,得到它的旋转角(setq rota(cdr(assoc 50(entget e))))再得到它的左下角和右上角
(vla-getboundingbox (vlax-ename->vla-object (entnext e)) 'll 'ur)
(setq ll (vlax-safearray->list ll)
ur (vlax-safearray->list ur))
如果rota>(/ pi 4);;;45度通过(/(- (cadr ur)(cadr ll))(sin rota))计算出它的长度d
反之用(/(- (car ur)(car ll))(cos rota))计算d
接下来可以d和你设定的值决定要不要改(entget e)的41组以及改成多少了
至于居中不管它怎么样都设为居中不就OK? 用strlen获取文字个数,不足用m,太长用f。 ;;;;;示例
(setq str "明经CAD社区")
(if (< (strlen str) 5)
(command ".text" "m" pt "3" "0" str)
(command ".text" "f" pt1 pt2 "3" str)
) 这和字体有关系的,不同的字体同样的字高宽度也是不一样的,而且字母数字不同的字体也有变化,正常的解决思路是生成-测量宽度-修改宽比因子-生成-再测量,如此反复直到满足要求为止 firstinti 发表于 2013-12-10 19:59 static/image/common/back.gif
这和字体有关系的,不同的字体同样的字高宽度也是不一样的,而且字母数字不同的字体也有变化,正常的解决思 ...
因为在text没生成之前是不会知道字段的真实长度的,如果根据文字内容能算出来文字长度就根本就没有这个问题
页:
[1]
2