/// <summary> /// Performs the polygonization, if it has not already been carried out. /// </summary> private void Polygonize() { // check if already computed if (_polyList != null) { return; } _polyList = new List <IGeometry>(); // if no geometries were supplied it's possible that graph is null if (_graph == null) { return; } _dangles = _graph.DeleteDangles(); _cutEdges = _graph.DeleteCutEdges(); var edgeRingList = _graph.GetEdgeRings(); var validEdgeRingList = new List <EdgeRing>(); _invalidRingLines = new List <IGeometry>(); FindValidRings(edgeRingList, validEdgeRingList, _invalidRingLines); FindShellsAndHoles(validEdgeRingList); AssignHolesToShells(_holeList, _shellList); _polyList = new List <IGeometry>(); foreach (EdgeRing er in _shellList) { _polyList.Add(er.Polygon); } }
/// <summary> /// Performs the polygonization, if it has not already been carried out. /// </summary> private void Polygonize() { // check if already computed if (_polyList != null) { return; } _polyList = new List <IGeometry>(); // if no geometries were supplied it's possible that graph is null if (_graph == null) { return; } _dangles = _graph.DeleteDangles(); _cutEdges = _graph.DeleteCutEdges(); var edgeRingList = _graph.GetEdgeRings(); IList <EdgeRing> validEdgeRingList = new List <EdgeRing>(); _invalidRingLines = new List <IGeometry>(); if (IsCheckingRingsValid) { FindValidRings(edgeRingList, validEdgeRingList, _invalidRingLines); } else { validEdgeRingList = edgeRingList; } FindShellsAndHoles(validEdgeRingList); AssignHolesToShells(_holeList, _shellList); // order the shells to make any subsequent processing deterministic _shellList.Sort(new EdgeRing.EnvelopeComparator()); var includeAll = true; if (_extractOnlyPolygonal) { FindDisjointShells(_shellList); includeAll = false; } _polyList = ExtractPolygons(_shellList, includeAll); }