// returns set of open curves (ie non-solids) public OpenCurvesInfo FindOpenCurves(double fSimplifyDeviationTol = 0.1) { List <SmoothCurveElement> curveElems = new List <SmoothCurveElement>(CurvesItr()); int N = curveElems.Count; int maxid = 0; foreach (var v in curveElems) { maxid = Math.Max(maxid, v.ID + 1); } // copy polygons, simplify if desired double fClusterTol = 0.0; // don't do simple clustering, can lose corners double fDeviationTol = fSimplifyDeviationTol; PolyLine2d[] polylines = new PolyLine2d[maxid]; IParametricCurve2d[] curves = new IParametricCurve2d[maxid]; foreach (var v in curveElems) { PolyLine2d p = new PolyLine2d(v.polyLine); if (fClusterTol > 0 || fDeviationTol > 0) { p.Simplify(fClusterTol, fDeviationTol); } polylines[v.ID] = p; curves[v.ID] = v.source; } OpenCurvesInfo ci = new OpenCurvesInfo() { Polylines = new List <PolyLine2d>(), Curves = new List <IParametricCurve2d>() }; for (int i = 0; i < polylines.Length; ++i) { if (polylines[i] != null && polylines[i].VertexCount > 0) { ci.Polylines.Add(polylines[i]); ci.Curves.Add(curves[i]); } } return(ci); }
public PolyLine2d(PolyLine2d copy) { vertices = new List <Vector2D>(copy.vertices); Timestamp = 0; }