第1个回答 2010-07-21
(defun c:xx1(/ en1 en2 en1_data en2_data pt1 old2_1 old2_2 pt2_1 pt2_2 pt2)
(setvar "cmdecho" 0)
(setq en1 (entsel "\n请选择一条直线:"))
(setq en2 (entsel "\n请选择一个文字:"))
(setq en1_data (entget (car en1)));;;获取直线的联合属性列表
(setq en2_data (entget (car en2)));;;获取文字的联合属性列表
(command "justifytext" en2 "" "c");;;将文字的对正方式设置为“中”
(setq pt1 (assoc 11 en2_data));;;获取文字的对正位置点坐标
(setq old2_1 (cdr (assoc 10 en1_data)));;;获取直线的起点坐标
(setq old2_2 (cdr (assoc 11 en1_data)));;;获取直线的终点坐标
(setq pt2_1 (/ (+ (car old2_1) (car old2_2)) 2));直线中点的横坐标
(setq pt2_2 (/ (+ (cadr old2_1) (cadr old2_2)) 2));直线中点的纵坐标
(setq pt2 (list 11 pt2_1 pt2_2 0.0));;;pt2为直线中点坐标
(setq en2_data (subst pt2 pt1 en2_data));设置文字的对正点到直线中点
(entmod en2_data);;;更新图形
(prin1);;;静默退出
)
写了个小程序,已经调试成功。程序没有判断直线是否水平,也就是说如果直线是斜线,也会将文字中点对正到直线中点,但是文字依然是水平的,如果要旋转文字,需要计算直线的角度,这个不难,自己加入几条代码就可以。
但是我的水平也只有这样了,如果要在改变直线长度的时候,自动更新文字位置,这个估计要用到反应器的技术,这个我还没学,所以无法给出代码了。
代码中已经加入简单的注释,应该可以看懂,如果有疑问,再找机会讨论。
= CAD技术智囊团 =