Attribute VB_Name = "MyTools" Option Explicit Private Function maxZ(Punkte() As Double) As Double 'Ermittelt den größten Wert einer Punktmenge Dim i As Long maxZ = Punkte(0) For i = 0 To UBound(Punkte) Step 2 If Punkte(i) <= maxZ Then maxZ = Punkte(i) End If Next i End Function Private Function minZ(Punkte() As Double) As Double 'Ermittelt den kleinsten Wert einer Punktmenge Dim i As Long minZ = Punkte(1) For i = 1 To UBound(Punkte) Step 2 If Punkte(i) >= minZ Then minZ = Punkte(i) End If Next i End Function Private Function betrag(value As Double) As Double 'Ermittelt den Betrag eines Double-Wertes betrag = value If betrag < 0 Then betrag = betrag * -1 End If End Function Public Function StringToDouble(str As String) As Double 'Wandelt eine String-Zahl in einen Double-Wert Dim pos As Long Dim pos1 As Long Dim nachKomma As String Dim Kommastellen As Long pos = InStr(str, ",") pos1 = InStr(str, ".") If pos Then nachKomma = Mid(str, pos + 1) Kommastellen = Len(nachKomma) StringToDouble = CDbl(Mid(str, 1, pos - 1)) + (1 / (10 ^ Kommastellen) * CDbl(nachKomma)) ElseIf pos1 Then nachKomma = Mid(str, pos1 + 1) Kommastellen = Len(nachKomma) StringToDouble = CDbl(Mid(str, 1, pos1 - 1)) + (1 / (10 ^ Kommastellen) * CDbl(nachKomma)) Else StringToDouble = CDbl(str) End If End Function Public Function ErsetzeKomma(str As String) As String 'Ersetzt ein Komma durch einen Punkt Dim pos As Long pos = InStr(str, ",") If pos Then ErsetzeKomma = (Mid(str, 1, pos - 1)) & "." _ & (Mid(str, pos + 1)) Else ErsetzeKomma = str End If End Function Public Function stringAdd(inputstr As String) As String ' zählt die hintenanstehende Zahl eines Strings um 1 höher ' die zahl kann mit Punkt oder ohne Zeichen am String angehängt sein ' Beispiel: Raum1 --> Raum2 oder Raum1.1 --> Raum1.2 Dim str As String Dim pos As Long Dim lastpos As Long Dim i As Long Dim nummer As Long On Error Resume Next str = Trim(inputstr) pos = InStr(str, ".") lastpos = 0 If pos <> 0 Then Do While pos And Len(str) > 0 If pos Then pos = InStr(str, ".") lastpos = lastpos + pos str = Mid(str, pos + 1) End If Loop str = CStr(CLng(str) + 1) str = Left(Trim(inputstr), lastpos) & str Else For i = 1 To Len(str) nummer = CLng(Right(str, i)) If Err Then Err.Clear i = Len(str) Else lastpos = i End If Next If nummer Then If nummer < 0 Then nummer = nummer - 1 Else nummer = nummer + 1 End If lastpos = Len(str) - lastpos str = Left(Trim(inputstr), lastpos) & CStr(nummer) Else str = Trim(inputstr) & "1" End If End If stringAdd = str End Function Public Function getLot(pkt1 As Variant, pkt2 As Variant, pkt3 As Variant) As Variant ' lotpunkt auf gerade durch pkt1 und pkt2 von pkt3 / 2D Dim det As Double Dim detX As Double Dim detY As Double Dim det1 As Double Dim det2 As Double Dim rVektor(2) As Double Dim lot(2) As Double rVektor(0) = pkt2(0) - pkt1(0) rVektor(1) = pkt2(1) - pkt1(1) rVektor(2) = 0# det = rVektor(0) ^ 2 + rVektor(1) ^ 2 det1 = rVektor(0) * pkt1(1) - rVektor(1) * pkt1(0) det2 = -1 * rVektor(1) * pkt3(1) - rVektor(0) * pkt3(0) detX = -1 * rVektor(0) * det2 - rVektor(1) * det1 detY = rVektor(0) * det1 - rVektor(1) * det2 lot(0) = detX / det lot(1) = detY / det lot(2) = 0# getLot = lot End Function Public Function getDistance(pkt1 As Variant, pkt2 As Variant, pkt3 As Variant) As Double ' Distanz von pkt3 auf gerade durch pkt1 und pkt2 / 2D Dim det As Double Dim detX As Double Dim detY As Double Dim det1 As Double Dim det2 As Double Dim rVektor(2) As Double Dim lot(2) As Double rVektor(0) = pkt2(0) - pkt1(0) rVektor(1) = pkt2(1) - pkt1(1) rVektor(2) = 0# det = rVektor(0) ^ 2 + rVektor(1) ^ 2 det1 = rVektor(0) * pkt1(1) - rVektor(1) * pkt1(0) det2 = -1 * rVektor(1) * pkt3(1) - rVektor(0) * pkt3(0) detX = -1 * rVektor(0) * det2 - rVektor(1) * det1 detY = rVektor(0) * det1 - rVektor(1) * det2 lot(0) = detX / det lot(1) = detY / det lot(2) = 0# getDistance = Sqr((lot(0) - pkt3(0)) ^ 2 + (lot(1) - pkt3(1)) ^ 2) End Function