/* private */ void PolygonizeGraph::convertMaximalToMinimalEdgeRings( std::vector<PolygonizeDirectedEdge*> &ringEdges) { typedef std::vector<Node*> IntersectionNodes; typedef std::vector<PolygonizeDirectedEdge*> RingEdges; IntersectionNodes intNodes; for(RingEdges::size_type i=0, in=ringEdges.size(); i<in; ++i) { PolygonizeDirectedEdge *de = ringEdges[i]; long label=de->getLabel(); findIntersectionNodes(de, label, intNodes); // set the next pointers for the edges around each node for(IntersectionNodes::size_type j=0, jn=intNodes.size(); j<jn; ++j) { Node *node=intNodes[j]; computeNextCCWEdges(node, label); } intNodes.clear(); } }
/* * Convert the maximal edge rings found by the initial graph traversal * into the minimal edge rings required by JTS polygon topology rules. * * @param ringEdges the list of start edges for the edgeRings to convert. */ void PolygonizeGraph::convertMaximalToMinimalEdgeRings(vector<PolygonizeDirectedEdge*> *ringEdges) { for(int i=0;i<(int)ringEdges->size();i++) { PolygonizeDirectedEdge *de=(*ringEdges)[i]; long label=de->getLabel(); vector<planarNode*> *intNodes=findIntersectionNodes(de, label); if (intNodes==NULL) continue; // flip the next pointers on the intersection nodes to // create minimal edge rings //vector<planarNode*> *pns=getNodes(); // set the next pointers for the edges around each node for(int j=0;j<(int)intNodes->size();j++) { planarNode *node=(*intNodes)[j]; computeNextCCWEdges(node, label); } delete intNodes; } }