/*private*/ vector<MaximalEdgeRing*> * PolygonBuilder::buildMinimalEdgeRings(vector<MaximalEdgeRing*> *maxEdgeRings, vector<EdgeRing*> *newShellList, vector<EdgeRing*> *freeHoleList) { vector<MaximalEdgeRing*> *edgeRings=new vector<MaximalEdgeRing*>(); for(size_t i=0, n=maxEdgeRings->size(); i<n; ++i) { MaximalEdgeRing *er=(*maxEdgeRings)[i]; #if GEOS_DEBUG cerr<<"buildMinimalEdgeRings: maxEdgeRing "<<i<<" has "<<er->getMaxNodeDegree()<<" maxNodeDegree"<<endl; #endif if (er->getMaxNodeDegree()>2) { er->linkDirectedEdgesForMinimalEdgeRings(); vector<MinimalEdgeRing*> *minEdgeRings=er->buildMinimalRings(); // at this point we can go ahead and attempt to place // holes, if this EdgeRing is a polygon EdgeRing *shell=findShell(minEdgeRings); if(shell != NULL) { placePolygonHoles(shell, minEdgeRings); newShellList->push_back(shell); } else { freeHoleList->insert( freeHoleList->end(), minEdgeRings->begin(), minEdgeRings->end() ); } delete er; delete minEdgeRings; } else { edgeRings->push_back(er); } } return edgeRings; }
/*private*/ void PolygonBuilder::buildMinimalEdgeRings( vector<MaximalEdgeRing*> &maxEdgeRings, vector<EdgeRing*> &newShellList, vector<EdgeRing*> &freeHoleList, vector<MaximalEdgeRing*> &edgeRings) { for(size_t i=0, n=maxEdgeRings.size(); i<n; ++i) { MaximalEdgeRing *er = maxEdgeRings[i]; #if GEOS_DEBUG cerr<<"buildMinimalEdgeRings: maxEdgeRing "<<i<<" has "<<er->getMaxNodeDegree()<<" maxNodeDegree"<<endl; #endif if (er->getMaxNodeDegree()>2) { er->linkDirectedEdgesForMinimalEdgeRings(); vector<MinimalEdgeRing*> minEdgeRings; er->buildMinimalRings(minEdgeRings); // at this point we can go ahead and attempt to place // holes, if this EdgeRing is a polygon EdgeRing *shell=findShell(&minEdgeRings); if(shell != NULL) { placePolygonHoles(shell, &minEdgeRings); newShellList.push_back(shell); } else { freeHoleList.insert(freeHoleList.end(), minEdgeRings.begin(), minEdgeRings.end() ); } delete er; } else { edgeRings.push_back(er); } } }