예제 #1
0
        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 }
            });
        }