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); }
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); }