Public Function Dpp(P1, P2)
'oblicza odleglosc midzy 2 puntkami
If UBound(P1) = 2 And UBound(P2) = 2 Then
Dpp = Sqr((P2(0) - P1(0)) ^ 2# + (P2(1) - P1(1)) ^ 2# + (P2(2) - P1(2)) ^ 2#)
Else
Dpp = Sqr((P2(0) - P1(0)) ^ 2# + (P2(1) - P1(1)) ^ 2#)
End If
End Function
Public Function PLD(IP1, IP2, IDist)
'zwraca punkt (tablica współrzędnych) w określonej odległosci od 1 punktu w kierunku drugiego
Distance = Dpp(IP1, IP2)
Dim TmpVec(2) As Double
If IDist = 0 Then
readyVec = IP1
Else
If Distance > 0 Then
DispVec = Array(IP2(0) - IP1(0), IP2(1) - IP1(1), IP2(2) - IP1(2))
vecnor = Array(DispVec(0) / (Distance / IDist), DispVec(1) / (Distance / IDist), DispVec(2) / (Distance / IDist))
readyVec = Array(IP1(0) + vecnor(0), IP1(1) + vecnor(1), IP1(2) + vecnor(2))
Else
readyVec = IP1
End If
End If
TmpVec(0) = readyVec(0): TmpVec(1) = readyVec(1): TmpVec(2) = readyVec(2)
PLD = TmpVec
End Function
Public Sub Przyklad()
Dim P1 As Variant
Dim P2 As Variant
P1 = ThisDocument.Utility.GetPoint(, "Wskaż punkt: ")
P2 = ThisDocument.Utility.GetPoint(P1, "Wskaż punkt: ")
Dim lineObj As ZwcadLine
Set lineObj = ThisDocument.ModelSpace.AddLine(P1, P2)
Dim Dlugosc As Double ' Odległość od pierwszego do ostatniego punktu
Dim Odleglosc As Double ' Odległość dzieląca dwa sąsiednie punkty
Dim IlePunktow As Integer
IlePunktow = 5 ' Bo 2 na końcach + 3 w środku
Dlugosc = Dpp(P1, P2)
Odleglosc = Dlugosc / (IlePunktow - 1)
Dim Px
For i = 0 To IlePunktow - 1
Px = PLD(P1, P2, i * Odleglosc)
ThisDocument.ModelSpace.AddPointEntity (Px)
Next
ThisDocument.SetVariable "PDMODE", 64 ' Zmienna PMode kontroluje sposób wyświetlania punktów.
' Zmienna PDSIZE kontroluje wielkość wyświetlanego punktu.
ThisDocument.Regen
End Sub
'wstawia 5 punktów na odcinku