public static Action <List <Vector3d> > MakeLoopOnSurfaceProcessorF(FScene scene, IProjectionTarget surface, Func <float> SampleRateF, Func <bool> ClosedF, float fSmoothAlpha = 0.2f, int nSmoothIter = 15) { return((vertices) => { CurveResampler resampler = new CurveResampler(); IWrappedCurve3d temp_curve = new IWrappedCurve3d() { VertexList = vertices, Closed = ClosedF() }; float rate = SampleRateF(); List <Vector3d> result = resampler.SplitCollapseResample(temp_curve, rate, rate * 0.6); if (result != null && result.Count > 3) { vertices.Clear(); vertices.AddRange(result); } CurveUtils.InPlaceSmooth(vertices, fSmoothAlpha, nSmoothIter, ClosedF()); gs.CurveDrawingUtil.ProjectToTarget_Scene(vertices, scene, surface); }); }