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

'create the virtual point
arrVecBetweenPts = rhino.VectorCreate(arrPoint2,arrPoint1)
arrVecBetweenPts = rhino.VectorScale(arrVecBetweenPts,2)

'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

'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