using System; using System.Collections.Generic; namespace TriangleNet.Geometry { public class Polygon : IPolygon { private List points; private List holes; private List regions; private List segments; public List Points => points; public List Holes => holes; public List Regions => regions; public List Segments => segments; public bool HasPointMarkers { get; set; } public bool HasSegmentMarkers { get; set; } public int Count => points.Count; public Polygon() : this(3, markers: false) { } public Polygon(int capacity) : this(3, markers: false) { } public Polygon(int capacity, bool markers) { points = new List(capacity); holes = new List(); regions = new List(); segments = new List(); HasPointMarkers = markers; HasSegmentMarkers = markers; } [Obsolete("Use polygon.Add(contour) method instead.")] public void AddContour(IEnumerable points, int marker = 0, bool hole = false, bool convex = false) { Add(new Contour(points, marker, convex), hole); } [Obsolete("Use polygon.Add(contour) method instead.")] public void AddContour(IEnumerable points, int marker, Point hole) { Add(new Contour(points, marker), hole); } public Rectangle Bounds() { List list = points.ConvertAll((Converter)((Vertex x) => x)); Rectangle rectangle = new Rectangle(); rectangle.Expand(list); return rectangle; } public void Add(Vertex vertex) { points.Add(vertex); } public void Add(ISegment segment, bool insert = false) { segments.Add(segment); if (insert) { points.Add(segment.GetVertex(0)); points.Add(segment.GetVertex(1)); } } public void Add(ISegment segment, int index) { segments.Add(segment); points.Add(segment.GetVertex(index)); } public void Add(Contour contour, bool hole = false) { if (hole) { Add(contour, contour.FindInteriorPoint()); return; } points.AddRange(contour.Points); segments.AddRange(contour.GetSegments()); } public void Add(Contour contour, Point hole) { points.AddRange(contour.Points); segments.AddRange(contour.GetSegments()); holes.Add(hole); } } }