Join the Dots
Windows only
Demonstrates joining points into polylines in RhinoScript.
Option Explicit
'Script written by Steven Janssen
'Script version Monday, 9 July 2007 5:23:12 PM
Call Main()
Sub Main()
Dim arrPoints, arrPoint1, arrPoint2, arrVirtual, arrClosestPt, arrExtractedCoords
Dim arrVecBetweenPts, arrJoin
Dim intTolerance, intCurrentDist, intMinDist
Dim k, i
i = 0
arrPoint1 = Rhino.GetPoint("Choose starting point")
arrPoint2 = Rhino.GetPoint("Choose second point")
intTolerance = 2 * rhino.Distance(arrPoint1, arrPoint2)
'intTolerance = Rhino.GetReal("Maximum Distance?",intTolerance)
arrPoints = Rhino.GetObjects("Select other Points", 1)
Rhino.EnableRedraw vbFalse
Do
'add line between Point1 and Point2
i = i + 1
rhino.Print i
rhino.addline arrPoint1, arrPoint2
'create the virtual point
arrVecBetweenPts = rhino.VectorCreate(arrPoint2,arrPoint1)
arrVecBetweenPts = rhino.VectorScale(arrVecBetweenPts,2)
arrVirtual = rhino.VectorAdd(arrVecBetweenPts,arrPoint1)
'find closest point to the virtual point by sifting through all the other points
intMinDist = 10 * intTolerance 'starting distance
For k = 0 To Ubound(arrPoints)
arrExtractedCoords = rhino.PointCoordinates(arrPoints(k))
If rhino.Pointcompare(arrExtractedCoords,arrPoint2) = vbFalse Then
intCurrentDist = rhino.Distance(arrExtractedCoords,arrVirtual)
If intCurrentDist < intMinDist Then
intMinDist = intCurrentDist
arrClosestPt = arrExtractedCoords
End If
End If
Next
'adaptive Tolerance
'If (2 * intMinDist) > intTolerance Then
' intTolerance = (2 * intMinDist)
'End If
'check if distance is greater than tolerance and exit if it is
'rhino.print intMinDist & ", "
If intMinDist > intTolerance Then
Exit Do
End If
'move the points so that Point2 is Point1 and the newly found point is Point2
arrPoint1 = arrPoint2
arrPoint2 = arrClosestPt
'the following prevents endless loops when there are two points close together at the end
If rhino.distance(arrPoint1, arrPoint2) < (intTolerance/50) Then
Exit Do
End If
Loop
Rhino.EnableRedraw vbTrue
End Sub