diff -r c7ae8642a8d8 -r 879e47e5b731 dijkstrabox.cc --- a/dijkstrabox.cc Wed May 02 20:33:58 2007 +0000 +++ b/dijkstrabox.cc Wed Jan 02 21:03:09 2008 +0000 @@ -52,63 +52,64 @@ void DijkstraBox::run() { if( - tabcbt.get_active_text()!="" && - (edgemapcbts[INPUT])->get_active_text()!="" && - (edgemapcbts[OUTPUT])->get_active_text()!="" && - source.get_active_text()!="" && - target.get_active_text()!="" - ) + tabcbt.get_active_text()!="" && + (edgemapcbts[INPUT])->get_active_text()!="" && + (edgemapcbts[OUTPUT])->get_active_text()!="" && + source.get_active_text()!="" && + target.get_active_text()!="" + ) + { + const Graph &g=mapstorage->graph; + Node from, to; + + get_from_to(from, to, (Graph&)g); + + std::ostringstream o; + + if(!(from==to)) { - const Graph &g=mapstorage->graph; - Node from, to; + std::string inputmapName = edgemapcbts[INPUT]->get_active_text(); + std::string outputmapName = edgemapcbts[OUTPUT]->get_active_text(); - get_from_to(from, to, (Graph&)g); + MapStorage::NumericEdgeMap& inputmap = mapstorage->getNumericEdgeMap(inputmapName); + MapStorage::NumericEdgeMap& outputmap = mapstorage->getNumericEdgeMap(outputmapName); - std::ostringstream o; + //zero out output map + for (EdgeIt i(g); i!=INVALID; ++i) + { + outputmap[i]=0; + } - if(!(from==to)) - { - Graph::EdgeMap * inputmap= - (mapstorage->edgemap_storage)[(edgemapcbts[INPUT])->get_active_text()]; - Graph::EdgeMap * outputmap= - (mapstorage->edgemap_storage)[(edgemapcbts[OUTPUT])->get_active_text()]; + Dijkstra dijkstra(g, inputmap); + dijkstra.run(from, to); - //zero out output map - for (EdgeIt i(g); i!=INVALID; ++i) - { - (*outputmap)[i]=0; - } - - Dijkstra > dijkstra(g, *inputmap); - dijkstra.run(from, to); - - if(dijkstra.reached(to)) - { - Node n=to; - int length=0; - while (n!=INVALID && n!=from) - { - Edge e=dijkstra.predEdge(n); - (*outputmap)[e]=1; - n=dijkstra.predNode(n); - length++; - } - o << "Result: " << length << " long path, with cost " << dijkstra.dist(to); - } - else - { - o << "Result: failed to find shortest path between "; - o << source.get_active_text() << " and " << target.get_active_text(); - } - resultlabel.set_text(o.str()); - - mapstorage->mapChanged(true, (edgemapcbts[OUTPUT])->get_active_text()); - // mapstorage->changeActiveMap(true, E_COLOR, - // (edgemapcbts[OUTPUT])->get_active_text()); - // mapstorage->changeActiveMap(true, E_TEXT, - // (edgemapcbts[INPUT])->get_active_text()); - } + if(dijkstra.reached(to)) + { + Node n=to; + int length=0; + while (n!=INVALID && n!=from) + { + Edge e=dijkstra.predEdge(n); + outputmap[e]=1; + n=dijkstra.predNode(n); + length++; + } + o << "Result: " << length << " long path, with cost " << dijkstra.dist(to); + } + else + { + o << "Result: failed to find shortest path between "; + o << source.get_active_text() << " and " << target.get_active_text(); + } + resultlabel.set_text(o.str()); + + mapstorage->mapChanged(true, (edgemapcbts[OUTPUT])->get_active_text()); + // mapstorage->changeActiveMap(true, E_COLOR, + // (edgemapcbts[OUTPUT])->get_active_text()); + // mapstorage->changeActiveMap(true, E_TEXT, + // (edgemapcbts[INPUT])->get_active_text()); } + } } void SuurballeBox::run() @@ -130,18 +131,18 @@ if(!(from==to)) { - Graph::EdgeMap * inputmap= - (mapstorage->edgemap_storage)[(edgemapcbts[INPUT])->get_active_text()]; - Graph::EdgeMap * outputmap= - (mapstorage->edgemap_storage)[(edgemapcbts[OUTPUT])->get_active_text()]; + MapStorage::NumericEdgeMap& inputmap= + mapstorage->getNumericEdgeMap(edgemapcbts[INPUT]->get_active_text()); + MapStorage::NumericEdgeMap& outputmap= + mapstorage->getNumericEdgeMap(edgemapcbts[OUTPUT]->get_active_text()); //zero out output map for (EdgeIt i(g); i!=INVALID; ++i) { - (*outputmap)[i]=0; + outputmap[i]=0; } - Suurballe > sb((Graph&)g, *inputmap, from, to); + Suurballe sb((Graph&)g, inputmap, from, to); int found=sb.run(num_set->get_value_as_int()); if(found) @@ -152,7 +153,7 @@ path=sb.path(j); for(int k=0;knodemap_storage)["label"]))[i]; + text << mapstorage->getLabel(i); source.prepend_text(text.str()); target.prepend_text(text.str()); } @@ -225,7 +226,7 @@ for (NodeIt i(g); (i!=INVALID) && (assigned<2); ++i) { std::ostringstream text; - text << (*((mapstorage->nodemap_storage)["label"]))[i]; + text << mapstorage->getLabel(i); if(!(text.str().compare(source.get_active_text()))) { from=i;