/*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
}
Esempio n. 2
0
/*public*/
void
PolygonBuilder::add(const vector<DirectedEdge*> *dirEdges,
		const vector<Node*> *nodes)
		//throw(TopologyException *)
{
	PlanarGraph::linkResultDirectedEdges(nodes->begin(), nodes->end());

	vector<MaximalEdgeRing*> maxEdgeRings;
	buildMaximalEdgeRings(dirEdges, maxEdgeRings);

	vector<EdgeRing*> freeHoleList;
	vector<MaximalEdgeRing*> edgeRings;
	buildMinimalEdgeRings(maxEdgeRings, shellList, freeHoleList, edgeRings);

	sortShellsAndHoles(edgeRings, shellList, freeHoleList);

	placeFreeHoles(shellList, freeHoleList);
	//Assert: every hole on freeHoleList has a shell assigned to it
}