Exemple #1
0
        private Polyline2D method_24(DxfVertex2DCollection points)
        {
            bool       closed     = this.Closed;
            int        count      = points.Count;
            Polyline2D polyline2D = new Polyline2D(count, closed);

            if (count > 0)
            {
                DxfVertex2D dxfVertex2D = points[0];
                polyline2D.Add(dxfVertex2D.Position);
                for (int index = 1; index < count; ++index)
                {
                    DxfVertex2D point = points[index];
                    if (!(dxfVertex2D.Position == point.Position))
                    {
                        polyline2D.Add(point.Position);
                        dxfVertex2D = point;
                    }
                }
                if (closed && count > 1 && polyline2D[0] == polyline2D[polyline2D.Count - 1])
                {
                    polyline2D.RemoveAt(polyline2D.Count - 1);
                }
            }
            return(polyline2D);
        }
Exemple #2
0
        public static Polyline2DCollection GetFlattened(
            IShape2D shape,
            double epsilon)
        {
            if (epsilon == 0.0)
            {
                epsilon = -0.01;
            }
            Polyline2DCollection polyline2Dcollection = new Polyline2DCollection();

            if (epsilon < 0.0)
            {
                Bounds2D bounds = ShapeTool.GetBounds(shape);
                if (!bounds.Initialized)
                {
                    return(polyline2Dcollection);
                }
                epsilon *= -System.Math.Max(bounds.Delta.X, bounds.Delta.Y);
            }
            epsilon *= epsilon;
            ISegment2DIterator iterator = shape.CreateIterator();

            if (iterator.MoveNext())
            {
                Point2D[]  points   = new Point2D[3];
                Polyline2D polyline = (Polyline2D)null;
                do
                {
                    switch (iterator.Current(points, 0))
                    {
                    case SegmentType.MoveTo:
                        polyline = new Polyline2D();
                        polyline2Dcollection.Add(polyline);
                        polyline.Add(points[0]);
                        break;

                    case SegmentType.LineTo:
                        polyline.Add(points[0]);
                        break;

                    case SegmentType.QuadTo:
                        ShapeTool.smethod_7(polyline, polyline[polyline.Count - 1], points[0], points[1], epsilon);
                        break;

                    case SegmentType.CubicTo:
                        ShapeTool.smethod_11(polyline, polyline[polyline.Count - 1], points[0], points[1], points[2], epsilon);
                        break;

                    case SegmentType.Close:
                        polyline.Closed = true;
                        if (polyline.Count > 1 && polyline[polyline.Count - 1] == polyline[0])
                        {
                            polyline.RemoveAt(polyline.Count - 1);
                            break;
                        }
                        break;
                    }
                }while (iterator.MoveNext());
            }
            return(polyline2Dcollection);
        }