/// <summary> /// For all DirectedEdges in result, form them into MaximalEdgeRings. /// </summary> /// <param name="dirEdges"></param> /// <returns></returns> private List <EdgeRing> BuildMaximalEdgeRings(IEnumerable <EdgeEnd> dirEdges) { var maxEdgeRings = new List <EdgeRing>(); foreach (DirectedEdge de in dirEdges) { if (de.IsInResult && de.Label.IsArea()) { // if this edge has not yet been processed if (de.EdgeRing == null) { var er = new MaximalEdgeRing(de, _geometryFactory); maxEdgeRings.Add(er); er.SetInResult(); } } } return(maxEdgeRings); }
/// <summary> /// Form <see cref="DirectedEdge" />s in graph into Minimal EdgeRings. /// (Minimal Edgerings must be used, because only they are guaranteed to provide /// a correct isHole computation). /// </summary> /// <param name="dirEdges"></param> /// <returns></returns> private IList<EdgeRing> BuildEdgeRings(IEnumerable<EdgeEnd> dirEdges) { IList<EdgeRing> edgeRings = new List<EdgeRing>(); foreach (DirectedEdge de in dirEdges) { // if this edge has not yet been processed if (de.IsInResult && de.EdgeRing == null) { MaximalEdgeRing er = new MaximalEdgeRing(de, _geometryFactory); er.LinkDirectedEdgesForMinimalEdgeRings(); IList<EdgeRing> minEdgeRings = er.BuildMinimalRings(); foreach(EdgeRing o in minEdgeRings) edgeRings.Add(o); } } return edgeRings; }
/// <summary> /// For all DirectedEdges in result, form them into MaximalEdgeRings. /// </summary> /// <param name="dirEdges"></param> /// <returns></returns> private List<EdgeRing> BuildMaximalEdgeRings(IEnumerable<EdgeEnd> dirEdges) { var maxEdgeRings = new List<EdgeRing>(); foreach (DirectedEdge de in dirEdges) { if (de.IsInResult && de.Label.IsArea()) { // if this edge has not yet been processed if (de.EdgeRing == null) { var er = new MaximalEdgeRing(de, _geometryFactory); maxEdgeRings.Add(er); er.SetInResult(); } } } return maxEdgeRings; }