hubeiwdlue 发表于 2024-3-25 13:08:37

修改标注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)
)录屏如下:

飞雪神光 发表于 2024-3-26 01:08:40

这的原因

飞雪神光 发表于 2024-3-26 01:17:36

这个可以设置 文字移动方式(Vlax-put (Vlax-Ename->Vla-Object en) 'TextMovement 1)

hubeiwdlue 发表于 2024-3-26 07:03:33

谢谢大神指导。

hubeiwdlue 发表于 2024-3-26 08:54:15

谢谢神光大神,70组码的修改,也是为了设置文字移动方式,但是组码修改并不完美,属性修改和"AIDIMTEXTMOVE"命令是一致的,有三个设置,分别是0,acDimLineWithText 尺寸线跟随文字移动。1,acMoveTextAddLeader 文字独立于尺寸线移动,但添加一条从文字到尺寸线的引线。2,acMoveTextNoLeader 文字独立于尺寸线移动,不添加从文字到尺寸线的引线。这样设置和绘图结果一致。


hubeiwdlue 发表于 2024-3-26 09:04:14

修改之后的代码如下,可以实现标注文字居中,我主要用来处理结构缝处的标注:
(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]
查看完整版本: 修改标注11组码后,为什么第一个标注的位置会上移(左移)?