public static Dictionary <string, object> BuildPolygons(List <Line> lines) { if (lines == null) { throw new ArgumentNullException("lines"); } if (lines.Count < 2) { throw new ArgumentException("Needs 2 or more lines", "lines"); } BaseGraph g = BaseGraph.ByLines(lines); g.graph.BuildPolygons(); var gPolygons = g.graph.Polygons; List <Polygon> dsPolygons = new List <Polygon>(); List <Line> dsLines = new List <Line>(); List <gEdge> polygonEdges = new List <gEdge>(); foreach (gPolygon gP in gPolygons) { var points = gP.Vertices.Select(v => DSPoint.ByCoordinates(v.X, v.Y, v.Z)).ToList(); if (gP.IsClosed) { dsPolygons.Add(Polygon.ByPoints(points)); } else if (gP.Edges.Count > 1) { foreach (gEdge edge in gP.Edges) { DSPoint start = Points.ToPoint(edge.StartVertex); DSPoint end = Points.ToPoint(edge.EndVertex); dsLines.Add(Line.ByStartPointEndPoint(start, end)); } } else { DSPoint start = Points.ToPoint(gP.Edges.First().StartVertex); DSPoint end = Points.ToPoint(gP.Edges.First().EndVertex); dsLines.Add(Line.ByStartPointEndPoint(start, end)); } } return(new Dictionary <string, object>() { { "polygons", dsPolygons }, { "ungrouped", dsLines } }); }