Пример #1
0
        // 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);
        }
Пример #2
0
 public PolyLine2d(PolyLine2d copy)
 {
     vertices  = new List <Vector2D>(copy.vertices);
     Timestamp = 0;
 }