Find Closest Curve to Point
Windows only

Demonstrates how to find the closest curve to test point using RhinoScript.

Sub FindClosestCurve

  Const rhPoint = 1
  Const rhCurve = 4

  'Dim arrCurves : arrCurves = Rhino.ObjectsByType(rhCurve)
  Dim arrCurves: arrCurves = Rhino.GetObjects("Select curves to test", rhCurve)
  If Not IsArray(arrCurves) Then Exit Sub

  Dim strPoint : strPoint = Rhino.GetObject("Select test point", rhPoint)
  If IsNull(strPoint) Then Exit Sub

  Dim arrPoint : arrPoint = Rhino.PointCoordinates(strPoint)

  Dim dblDistance : dblDistance = Null
  Dim strCurve : strCurve = Null
  Dim dblParameter : dblParameter = Null
  Dim arrPt : arrPt = Null

  Dim i, b, t, pt, d
  For i = 0 To UBound(arrCurves)
    b = vbFalse
    t = Rhino.CurveClosestPoint( arrCurves(i), arrPoint )
    If Not IsNull(t) Then
      pt = Rhino.EvaluateCurve( arrCurves(i), t )
      If IsArray(pt) Then
        d = Rhino.Distance(pt, arrPoint)
        If IsNull(dblDistance) Then
          b = vbTrue
        ElseIf (d < dblDistance) Then
          b = vbTrue
        End If

        If (b = vbTrue) Then
          dblDistance = d
          strCurve = arrCurves(i)
          dblParameter = t
          arrPt = pt
        End If
      End If
    End If
  Next

  If Not IsNull(dblDistance) Then
    Rhino.Print "Closest curve = " & CStr(strCurve)
    Rhino.Print "Curve parameter = " & CStr(dblParameter)
    Rhino.Print "Point = " & Rhino.Pt2Str(arrPt)
    Rhino.Print "Distance = " & CStr(dblDistance)

    Rhino.SelectObject strCurve
    Rhino.SelectObject Rhino.AddPoint(arrPt)
  End If

End Sub