/** * Computes the EdgeRings formed by the edges in this graph. * @return a list of the EdgeRing found by the polygonization process. */ vector<polygonizeEdgeRing*>* PolygonizeGraph::getEdgeRings() { // maybe could optimize this, since most of these pointers should // be set correctly already // by deleteCutEdges() computeNextCWEdges(); // clear labels of all edges in graph label(dirEdges,-1); vector<PolygonizeDirectedEdge*> *maximalRings=findLabeledEdgeRings(dirEdges); convertMaximalToMinimalEdgeRings(maximalRings); delete maximalRings; // find all edgerings vector<polygonizeEdgeRing*> *edgeRingList=new vector<polygonizeEdgeRing*>(); for(int i=0;i<(int)dirEdges->size();i++) { PolygonizeDirectedEdge *de=(PolygonizeDirectedEdge*)(*dirEdges)[i]; if (de->isMarked()) continue; if (de->isInRing()) continue; polygonizeEdgeRing *er=findEdgeRing(de); edgeRingList->push_back(er); } return edgeRingList; }
/* public */ void PolygonizeGraph::getEdgeRings(std::vector<EdgeRing*>& edgeRingList) { // maybe could optimize this, since most of these pointers should // be set correctly already // by deleteCutEdges() computeNextCWEdges(); // clear labels of all edges in graph label(dirEdges, -1); std::vector<PolygonizeDirectedEdge*> maximalRings; findLabeledEdgeRings(dirEdges, maximalRings); convertMaximalToMinimalEdgeRings(maximalRings); maximalRings.clear(); // not needed anymore // find all edgerings for(unsigned int i=0; i<dirEdges.size(); ++i) { PolygonizeDirectedEdge *de=(PolygonizeDirectedEdge*)dirEdges[i]; if (de->isMarked()) continue; if (de->isInRing()) continue; EdgeRing *er=findEdgeRing(de); edgeRingList.push_back(er); } }