Hallo Schmodi,
beiliegend ein kleines Beispiel wie so was ( 2-Dimensional ) aussehen könnte.
Program frägt zunächst einen Punkt ab,
anschließend ist die Linie zu tippen
(ohne großen Aufwand geschrieben, deshalb auch keine Fehlerabfrage)
Nun wird der Lotabstand ( sp ) über die Dreiecksseiten gerechnet
anschließend der neue Punkt
und vom getippten Punkt aus eine Linie gezeichnet.
Denke Du kannst damit Deine gewünschte Funktion basteln.
Grüße,
Klaus
Code:
Sub LotPunkt()
' Begin the selection
Dim returnObj As AcadObject
Dim basePnt As Variant
Dim lineobj As AcadLine
Dim returnPnt As Variant
Dim startPnt(0 To 2) As Double
Dim endPnt(0 To 2) As Double
Dim neuPnt(0 To 2) As Double
Dim dx As Double, dy As Double
Dim sa As Double, sb As Double, sc As Double
Dim sp As Double
On Error Resume Next
' The following example waits for a selection from the user
RETRY:
' Return a point using a prompt
returnPnt = ThisDrawing.Utility.GetPoint(, "Enter a point: ")
ThisDrawing.Utility.GetEntity returnObj, basePnt, "Select an object"
If Err <> 0 Then
Err.Clear
MsgBox "Program ended.", , "GetEntity Example"
Exit Sub
End If
Set lineobj = returnObj
startPnt(0) = lineobj.startPoint(0)
startPnt(1) = lineobj.startPoint(1)
startPnt(2) = lineobj.startPoint(2)
endPnt(0) = lineobj.endPoint(0)
endPnt(1) = lineobj.endPoint(1)
endPnt(2) = lineobj.endPoint(2)
dx = endPnt(0) - returnPnt(0)
dy = endPnt(1) - returnPnt(1)
sb = (dx * dx) + (dy * dy)
dx = returnPnt(0) - startPnt(0)
dy = returnPnt(1) - startPnt(1)
sa = (dx * dx) + (dy * dy)
dx = endPnt(0) - startPnt(0)
dy = endPnt(1) - startPnt(1)
sc = Sqr((dx * dx) + (dy * dy))
sp = (sa - sb + sc * sc) / (2 * sc)
neuPnt(0) = startPnt(0) + dx * sp / sc
neuPnt(1) = startPnt(1) + dy * sp / sc
neuPnt(2) = startPnt(2) + (endPnt(2) - startPnt(2)) * sp / sc
Set lineobj = ThisDrawing.ModelSpace.AddLine(returnPnt, neuPnt)
GoTo RETRYEnd Sub
[Edit] Für eine 3D berechnung müsste noch jeweils ein dz eingefügt werden [/Edit]
[Diese Nachricht wurde von KlaK am 27. Nov. 2007 editiert.]
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP