bababarghi 发表于 2022-7-5 17:37:15

显示delta X和delta Y o

大家好,
 
我在这里找到了Lee的以下代码,它非常接近我需要的,但我需要稍微修改一下,以打印X和Y坐标差(dX,dY)对,而不是距离。有人能帮忙吗?
 
(defun c:dist2 (/ doc spc pt1 pt2 tObj gr)
(vl-load-com)
(or *Mac$Rot* (setq *Mac$Rot* 0.0))
(setq doc (vla-get-ActiveDocument (vlax-get-Acad-Object)) spc (if (zerop (vla-get-activespace doc)) (if (= (vla-get-mspace doc) :vlax-true)(vla-get-modelspace doc)(vla-get-paperspace doc)) (vla-get-modelspace doc)))
(while
        (and (setq pt1 (getpoint "\nSelect First Point: "))
               (setq pt2 (getpoint "\nSelect Second Point: " pt1)))
        (vla-put-Alignment (setq tObj (vla-addText spc (rtos (distance pt1 pt2)) (vlax-3D-point '(0 0 0))(getvar "TEXTSIZE"))) acAlignmentMiddleCenter)
        (while
                (or
                        (and (setq gr (grread t 7 0))
                               (eq 5 (car gr))
                        )
                        (and (eq 2 (car gr))
                               (eq 32 (cadr gr)))
                )
                (cond ((and (eq 5 (car gr))
                                        (listp (cadr gr))
                                )
                       (vla-move tObj (vla-get-TextAlignmentPoint tObj) (vlax-3D-point (cadr gr))))
                        (        (and         (eq 2 (car gr))
                                                (eq 32 (cadr gr))
                                )
                       (vla-put-Rotation tObj (setq *Mac$Rot* (+ *Mac$Rot* (/ pi 2.))))
                        )
                )
        )
)
(princ))

BIGAL 发表于 2022-7-5 18:11:15

你有超过100个帖子,你现在应该能够做到这一点,非常简单的要求自己至少试一试,如果你弄错了,我们会帮助你。
 
您需要更改此值(setq tObj(vla addText spc(rtos(distance pt1 pt2))而不是distance get这两个X和Y值之间的差
 

(nth pt1 0)
(nth pt1 1)
(nth pt2 0)
(nth pt2 1)
or (car pt1) (cadr pt1)

bababarghi 发表于 2022-7-5 18:23:53

感谢比格尔的激励。问题是我不知道该看哪里。只要你指出那一行代码,我想我已经破解了。
 
看看我是怎么走的(也许在你看来是中世纪!)
 
(defun c:dist2 (/ doc spc pt1 pt2 tObj gr)
(vl-load-com)
(or *Mac$Rot* (setq *Mac$Rot* 0.0))
(setq        doc (vla-get-ActiveDocument (vlax-get-Acad-Object))
spc (if        (zerop (vla-get-activespace doc))
      (if (= (vla-get-mspace doc) :vlax-true)
        (vla-get-modelspace doc)
        (vla-get-paperspace doc)
      )
      (vla-get-modelspace doc)
    )
)
(while
   (and (setq pt1 (getpoint "\nSelect First Point: "))
(setq pt2 (getpoint "\nSelect Second Point: " pt1))
   )
(setq        pt1x (car pt1)
                pt1y (cadr pt1)
                pt2x (car pt2)
                pt2y (cadr pt2)
                dx        (- pt1x pt2x)
                dy        (- pt1y pt2y)
)

    (vla-put-Alignment
      (setq tObj (vla-addText spc (strcat "(" (rtos dx) " , " (rtos dy) ")") (vlax-3D-point '(0 0 0)) (getvar "TEXTSIZE") ) )
      acAlignmentMiddleCenter
    )
    (while
      (or
(and (setq gr (grread t 7 0))
      (eq 5 (car gr))
)
(and (eq 2 (car gr))
      (eq 32 (cadr gr))
)
      )
(cond ((and (eq 5 (car gr))
          (listp (cadr gr))
       )
       (vla-move tObj
               (vla-get-TextAlignmentPoint tObj)
               (vlax-3D-point (cadr gr))
       )
      )
      ((and (eq 2 (car gr))
          (eq 32 (cadr gr))
       )
       (vla-put-Rotation
       tObj
       (setq *Mac$Rot* (+ *Mac$Rot* (/ pi 2.)))
       )
      )
)
    )
)
(princ)


)

BIGAL 发表于 2022-7-5 18:54:57

这是一个常见的问题,必须获得X-Y值,很高兴你解决了它。
页: [1]
查看完整版本: 显示delta X和delta Y o