明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2115|回复: 11

[讨论] 如何绘制 "不足居中,太长压窄" 的文字。

[复制链接]
发表于 2013-12-2 10:47 | 显示全部楼层 |阅读模式
本帖最后由 千风 于 2013-12-2 10:50 编辑

面临这样一个问题:

需要在CAD中绘制一个 属性定义 ,要求值文字居中显示且
①如果值文字总长不足10mm,则自动居中显示。
②如果值文字总长超过10mm,则自动被压扁到10mm。




我的问题出在:
如果我设定对齐方式为居中,填的值太长就会超10mm的限制
如果我设定对齐方式为布满,填一个字母的值就被拉长到10mm惨不忍睹了!

发表于 2013-12-2 10:58 | 显示全部楼层
可以编程序实现,但是想对属性块编辑后实时实现可能只能用反应器了。
发表于 2013-12-2 11:29 | 显示全部楼层
将文字属性设置为居中,然后计算每个文字的宽度,然后根据计算的文字宽度来修改文字的宽比因子!
发表于 2013-12-2 12:52 | 显示全部楼层
属性文本f对齐
发表于 2013-12-4 22:02 来自手机 | 显示全部楼层
有一种想法,因为手
机上,所以没试过,当文字不足10的时候,补充不可见字符,如空格,我试过右对齐,没试过布满。
发表于 2013-12-10 10:24 | 显示全部楼层
本帖最后由 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?
发表于 2013-12-10 13:16 | 显示全部楼层
用strlen获取文字个数,不足用m,太长用f。
发表于 2013-12-10 13:32 | 显示全部楼层
  1. ;;;;;示例
  2. (setq str "明经CAD社区")
  3. (if (< (strlen str) 5)
  4.            (command ".text" "m" pt "3" "0" str)
  5.            (command ".text" "f" pt1 pt2 "3" str)
  6.        )
发表于 2013-12-10 19:59 | 显示全部楼层
这和字体有关系的,不同的字体同样的字高宽度也是不一样的,而且字母数字不同的字体也有变化,正常的解决思路是生成-测量宽度-修改宽比因子-生成-再测量,如此反复直到满足要求为止

点评

可以直接计算出来为什么要不停重复?  发表于 2013-12-11 10:14
发表于 2013-12-11 19:35 | 显示全部楼层
firstinti 发表于 2013-12-10 19:59
这和字体有关系的,不同的字体同样的字高宽度也是不一样的,而且字母数字不同的字体也有变化,正常的解决思 ...

因为在text没生成之前是不会知道字段的真实长度的,如果根据文字内容能算出来文字长度就根本就没有这个问题
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-8 16:13 , Processed in 0.724260 second(s), 34 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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