/*public*/ void PolygonBuilder::add(const vector<DirectedEdge*> *dirEdges, const vector<Node*> *nodes) //throw(TopologyException *) { // PlanarGraph::linkResultDirectedEdgesS(nodes); typedef vector<Node*>::const_iterator NodeIt; for ( NodeIt nodeit = nodes->begin(), nodeEnd = nodes->end(); nodeit != nodeEnd; ++nodeit) { Node *node=*nodeit; DirectedEdgeStar* des = dynamic_cast<DirectedEdgeStar*>(node->getEdges()); assert(des); // This might throw a TopologyException des->linkResultDirectedEdges(); } vector<MaximalEdgeRing*>* maxEdgeRings=buildMaximalEdgeRings(dirEdges); vector<EdgeRing*> freeHoleList; vector<MaximalEdgeRing*> *edgeRings; edgeRings= buildMinimalEdgeRings(maxEdgeRings,&shellList,&freeHoleList); sortShellsAndHoles(edgeRings,&shellList,&freeHoleList); placeFreeHoles(shellList, freeHoleList); delete maxEdgeRings; delete edgeRings; //Assert: every hole on freeHoleList has a shell assigned to it }
/*public static*/ void PlanarGraph::linkResultDirectedEdges() { #if GEOS_DEBUG cerr<<"PlanarGraph::linkResultDirectedEdges called"<<endl; #endif NodeMap::iterator nodeit=nodes->nodeMap.begin(); for (;nodeit!=nodes->nodeMap.end();nodeit++) { Node *node=nodeit->second; assert(node); EdgeEndStar* ees=node->getEdges(); assert(ees); assert(dynamic_cast<DirectedEdgeStar*>(ees)); DirectedEdgeStar* des = static_cast<DirectedEdgeStar*>(ees); // this might throw an exception des->linkResultDirectedEdges(); } }
/*public static*/ void PlanarGraph::linkResultDirectedEdges( std::vector<Node*>::iterator start, std::vector<Node*>::iterator end) //throw(TopologyException *) { for ( vector<Node*>::iterator nodeit=start; nodeit!=end; ++nodeit ) { Node *node=*nodeit; assert(node); EdgeEndStar* ees=node->getEdges(); assert(ees); assert(dynamic_cast<DirectedEdgeStar*>(ees)); DirectedEdgeStar* des = static_cast<DirectedEdgeStar*>(ees); // this might throw an exception des->linkResultDirectedEdges(); } }