Kheilmann 发表于 2006-4-1 01:01:39

同时获取距离和GetPoint

根据我对GetDistance实用程序的理解,您无法获得两个已知点的距离。
即。
CurDist = GetDistance(PointA,PointB)
显然你只能使用一个已知点,你必须选择下一个点或输入一些东西。
选择第二点并不是什么大不了的事情,除了我必须将同一点用于2个目的(获取距离并获得插入点)。
那么,有没有办法在一步之内利用GetDistance和Getpoint实用程序?
我希望这是有道理的...
**** Hidden Message *****

RbtDanforth 发表于 2006-4-1 04:34:59

嗨,凯文
,你可以做这样的事情:
Public Function MeGetPointOrDistance() As Variant
Dim aFstPnt As Variant
Dim aNxtPnt As Variant
On Error Resume Next

With ThisDrawing.Utility
    aFstPnt = .GetPoint(, vbCrLf & "Select first point: ")
    If Err.Number0 Then
      Err.Clear
      Exit Function
    End If
    aNxtPnt = .GetPoint(aFstPnt, vbCrLf & "Select next point/enter distance: ")
    If Err.Number0 Then
      Err.Clear
      TestPnt = aFstPnt
    Else
      TestPnt = Sqr(((aFstPnt(0) - aNxtPnt(0)) ^ 2) + _
                  ((aFstPnt(1) - aNxtPnt(1)) ^ 2) + _
                  ((aFstPnt(2) - aNxtPnt(2)) ^ 2))
    End If
End With

End Function
Use:
Dim vRetVal As Variant
vRetVal = MeGetPointOrDistance()
Select Case VarType(RetVal)
Case vbEmpty
    'User pressed enter - do nothing
Case vbDouble
    'User had enter a distance
Case Else
    'User had enter a point
End Select

Bryco 发表于 2006-4-1 10:44:07

不确定如果我理解您的问题,但选择的最后一个点存储在“lastpoint”系统变量中,或者如果两个点设置为变量,则该变量可用于其他任何操作。
(defun C:DS (/ A B)
            (PROMPT (STRCAT(RTOS (CAR(SETQ A(GETPOINT "START\t")))3 10)
                           "   "(RTOS (CADR A)3 10)
                           "   "(RTOS (CADDR A)3 10)"\n"
            ))
            (PROMPT(RTOS (DISTANCE A (SETQ B(GETPOINT A "TO\n") ))3 10))
            (PROMPT(STRCAT "\tX="(RTOS (SETQ DX(CAR(MAPCAR '- B A)))3 10)"\tor X="(RTOS (SETQ DX(CAR(MAPCAR '- B A)))2 10)
                   "\tY="(RTOS (SETQ DY(CADR(MAPCAR '- B A)))3 10)"\tor Y="(RTOS (SETQ DY(CADR(MAPCAR '- B A)))2 10)
                   "\tZ="(RTOS (SETQ DZ(CADDR(MAPCAR '- B A)))3 10)
                     )) (PRINC (DISTANCE A B))
(command "insert" (getstring "blockname") "s" 1 "r" 0 B)
(terpri)
   )
页: [1]
查看完整版本: 同时获取距离和GetPoint