private List <VECTOR> preprocessOnly() { // Access the dependency properties outside the stopwatch area FLOAT linDist = ((FLOAT)PointDistance).clamp((FLOAT)POINT_DIST_MIN, (FLOAT)POINT_DIST_MAX); FLOAT rdpError = ((FLOAT)RdpError).clamp((FLOAT)RDP_ERROR_MIN, (FLOAT)RDP_ERROR_MAX); PreprocessModes ppMode = PreprocessMode; List <VECTOR> inPts = _points; _stopwatch.Reset(); _stopwatch.Start(); List <VECTOR> ppPts = preprocess(inPts, ppMode, linDist, rdpError); _stopwatch.Stop(); LastFitTime = ppMode == PreprocessModes.NONE ? double.NaN : _stopwatch.Elapsed.TotalMilliseconds; PointCount = inPts.Count + "/" + ppPts.Count; return(ppPts); }
private static List <VECTOR> preprocess(List <VECTOR> pts, PreprocessModes ppMode, FLOAT linDist, FLOAT rdpError) { switch (ppMode) { case PreprocessModes.NONE: return(pts); case PreprocessModes.LINEAR: return(CurvePreprocess.Linearize(pts, linDist)); case PreprocessModes.RDP: return(CurvePreprocess.RdpReduce(pts, rdpError)); default: _log.error("Invalid PreprocessMode"); return(CurvePreprocess.RemoveDuplicates(pts)); } }
private CubicBezier[] fitCurves() { // Access the dependency properties outside the stopwatch area FLOAT fitError = ((FLOAT)FittingError).clamp((FLOAT)FIT_ERROR_MIN, (FLOAT)FIT_ERROR_MAX); FLOAT linDist = ((FLOAT)PointDistance).clamp((FLOAT)POINT_DIST_MIN, (FLOAT)POINT_DIST_MAX); FLOAT rdpError = ((FLOAT)RdpError).clamp((FLOAT)RDP_ERROR_MIN, (FLOAT)RDP_ERROR_MAX); PreprocessModes ppMode = PreprocessMode; List <VECTOR> inPts = _points; _stopwatch.Reset(); _stopwatch.Start(); List <VECTOR> ppPts = preprocess(inPts, ppMode, linDist, rdpError); CubicBezier[] curves = CurveFit.Fit(ppPts, fitError); _stopwatch.Stop(); LastFitTime = _stopwatch.Elapsed.TotalMilliseconds; PointCount = inPts.Count + "/" + ppPts.Count; return(curves); }