Hi all, Is there a method in RhinoCommon to find the closest control on an interpolated curve to a given test point?
As of now I am using the following code to find the span which the closest point falls in, and I can find the point by testing to which side of the span the point is closer but I feel an easier way must be there !?
double t;
c.ClosestPoint(testPoint, out t);
for (int i = 0;i < c.SpanCount;i++)
{
if (c.SpanDomain(i).IncludesParameter(t))
{
B = i;
return;
}
}
no, that outputs the curve parameter, I would like to know the closest “control point” , let’s say you have an interpolated curve with 10 control points, which control points is closest to the given curve parameter ‘t’ ?
import Rhino
import scriptcontext
import rhinoscriptsyntax as rs
def nc_filter( rhino_object, geometry, component_index):
return isinstance(geometry, Rhino.Geometry.NurbsCurve)
def DoSomething():
crv_id = rs.GetObject("Select a nurbs curve", 4, True, False, nc_filter)
if not crv_id: return
test_point = rs.GetPoint("Test point")
if not test_point: return
curve = rs.coercecurve(crv_id, -1, True)
points = [pt.Location for pt in curve.Points]
# get closest index to picked point
index = Rhino.Collections.Point3dList.ClosestIndexInList(points, test_point)
print "Closest control point index to test point: {}".format(index)
DoSomething()