代码是一个标注文字居中的功能,通过修改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)
- )
录屏如下:
|