修改标注11组码后,为什么第一个标注的位置会上移(左移)?
代码是一个标注文字居中的功能,通过修改70和11组码实现。但是在使用过程中发现,每次修改完毕后,第一个标注,也就是左边或上边的第一个标注,位置会发现改变,其余标注不存在这个问题。第一个标注是用线性标注画的,其余是用连续标注画的。这是什么原因呢,要如何修改才能避免以上情况发生?代码如下:(defun c:tt(/ en ent i len p10 p10x p10y p11 p13 p13x p13y p14 p14x p14y pt1 ss zhigao)
(if (setq ss (ssget "I"))
t
(setq ss (ssget '((0 . "DIMENSION"))))
)
(setq len (sslength ss)
i len
)
(repeat len
(setq en (ssname ss (setq i (1- i))))
(setq ent (entget en))
(setq zhigao (Vlax-Get (Vlax-Ename->Vla-Object en) 'TextHeight));字高
(setq p10 (cdr(assoc 10 ent)));标注线右端点坐标
(setq p11 (cdr(assoc 11 ent)));标注文字坐标
(setq p13 (cdr(assoc 13 ent)));左标注点坐标
(setq p14 (cdr(assoc 14 ent)));右标注点坐标
(setq p10x (car p10)
p10y (cadr p10)
p13x (car p13)
p13y (cadr p13)
p14x (car p14)
p14y (cadr p14)
)
(cond
((= (fix (+ 0.5 p10x)) (fix (+ 0.5 p14x)));横向标注
(setq pt1 (list (* 0.5 (+ p13x p14x)) (+ p10y (* 0.3 zhigao)) 0));文字居中坐标
(setq ent (subst(cons 70 160)(assoc 70 ent)ent))
(setq ent (subst(cons 11 pt1)(assoc 11 ent)ent))
(entmod ent)
(entupd en)
)
((= (fix (+ 0.5 p10y)) (fix (+ 0.5 p14y)));纵向标注
(setq pt1 (list (- p10x (* 0.3 zhigao)) (* 0.5 (+ p13y p14y)) 0));文字居中坐标
(setq ent (subst(cons 70 160)(assoc 70 ent)ent))
(setq ent (subst(cons 11 pt1)(assoc 11 ent)ent))
(entmod ent)
(entupd en)
)
)
)
(princ)
)录屏如下:
这的原因
这个可以设置 文字移动方式(Vlax-put (Vlax-Ename->Vla-Object en) 'TextMovement 1) 谢谢大神指导。 谢谢神光大神,70组码的修改,也是为了设置文字移动方式,但是组码修改并不完美,属性修改和"AIDIMTEXTMOVE"命令是一致的,有三个设置,分别是0,acDimLineWithText 尺寸线跟随文字移动。1,acMoveTextAddLeader 文字独立于尺寸线移动,但添加一条从文字到尺寸线的引线。2,acMoveTextNoLeader 文字独立于尺寸线移动,不添加从文字到尺寸线的引线。这样设置和绘图结果一致。
修改之后的代码如下,可以实现标注文字居中,我主要用来处理结构缝处的标注:
(defun c:tt(/ en ent i len p10 p10x p10y p11 p13 p13x p13y p14 p14x p14y pt1 ss zhigao)
(if (setq ss (ssget "I"))
t
(setq ss (ssget '((0 . "DIMENSION"))))
)
(setq len (sslength ss)
i len
)
(repeat len
(setq en (ssname ss (setq i (1- i))))
(setq ent (entget en))
(setq zhigao (Vlax-Get (Vlax-Ename->Vla-Object en) 'TextHeight));字高
(setq p10 (cdr(assoc 10 ent)));标注线右端点坐标
(setq p11 (cdr(assoc 11 ent)));标注文字坐标
(setq p13 (cdr(assoc 13 ent)));左标注点坐标
(setq p14 (cdr(assoc 14 ent)));右标注点坐标
(setq p10x (car p10)
p10y (cadr p10)
p13x (car p13)
p13y (cadr p13)
p14x (car p14)
p14y (cadr p14)
)
(cond
((= (fix (+ 0.5 p10x)) (fix (+ 0.5 p14x)));横向标注
(setq pt1 (list (* 0.5 (+ p13x p14x)) (+ p10y (* 0.3 zhigao)) 0));文字居中坐标
(Vlax-put (Vlax-Ename->Vla-Object en) 'TextMovement 2)
(setq ent (subst(cons 11 pt1)(assoc 11 ent)ent))
(entmod ent)
(entupd en)
)
((= (fix (+ 0.5 p10y)) (fix (+ 0.5 p14y)));纵向标注
(setq pt1 (list (- p10x (* 0.3 zhigao)) (* 0.5 (+ p13y p14y)) 0));文字居中坐标
(Vlax-put (Vlax-Ename->Vla-Object en) 'TextMovement 2)
(setq ent (subst(cons 11 pt1)(assoc 11 ent)ent))
(entmod ent)
(entupd en)
)
)
)
(princ)
):
页:
[1]