void RORouteHandler::parseFromViaTo(std::string element, const SUMOSAXAttributes& attrs) { myActiveRoute.clear(); bool useTaz = OptionsCont::getOptions().getBool("with-taz"); if (useTaz && !myVehicleParameter->wasSet(VEHPARS_FROM_TAZ_SET) && !myVehicleParameter->wasSet(VEHPARS_TO_TAZ_SET)) { WRITE_WARNING("Taz usage was requested but no taz present in " + element + " '" + myVehicleParameter->id + "'!"); useTaz = false; } bool ok = true; if ((useTaz || !attrs.hasAttribute(SUMO_ATTR_FROM)) && myVehicleParameter->wasSet(VEHPARS_FROM_TAZ_SET)) { const ROEdge* fromTaz = myNet.getEdge(myVehicleParameter->fromTaz + "-source"); if (fromTaz == 0) { myErrorOutput->inform("Source taz '" + myVehicleParameter->fromTaz + "' not known for " + element + " '" + myVehicleParameter->id + "'!"); } else if (fromTaz->getNumSuccessors() == 0) { myErrorOutput->inform("Source taz '" + myVehicleParameter->fromTaz + "' has no outgoing edges for " + element + " '" + myVehicleParameter->id + "'!"); } else { myActiveRoute.push_back(fromTaz); } } else { parseEdges(attrs.getOpt<std::string>(SUMO_ATTR_FROM, myVehicleParameter->id.c_str(), ok, "", true), myActiveRoute, "for " + element + " '" + myVehicleParameter->id + "'"); } if (!attrs.hasAttribute(SUMO_ATTR_VIA)) { myInsertStopEdgesAt = (int)myActiveRoute.size(); } ConstROEdgeVector viaEdges; parseEdges(attrs.getOpt<std::string>(SUMO_ATTR_VIA, myVehicleParameter->id.c_str(), ok, "", true), viaEdges, "for " + element + " '" + myVehicleParameter->id + "'"); for (ConstROEdgeVector::const_iterator i = viaEdges.begin(); i != viaEdges.end(); ++i) { myActiveRoute.push_back(*i); myVehicleParameter->via.push_back((*i)->getID()); } if ((useTaz || !attrs.hasAttribute(SUMO_ATTR_TO)) && myVehicleParameter->wasSet(VEHPARS_TO_TAZ_SET)) { const ROEdge* toTaz = myNet.getEdge(myVehicleParameter->toTaz + "-sink"); if (toTaz == 0) { myErrorOutput->inform("Sink taz '" + myVehicleParameter->toTaz + "' not known for " + element + " '" + myVehicleParameter->id + "'!"); } else if (toTaz->getNumPredecessors() == 0) { myErrorOutput->inform("Sink taz '" + myVehicleParameter->toTaz + "' has no incoming edges for " + element + " '" + myVehicleParameter->id + "'!"); } else { myActiveRoute.push_back(toTaz); } } else { parseEdges(attrs.getOpt<std::string>(SUMO_ATTR_TO, myVehicleParameter->id.c_str(), ok, "", true), myActiveRoute, "for " + element + " '" + myVehicleParameter->id + "'"); } myActiveRouteID = "!" + myVehicleParameter->id; if (myVehicleParameter->routeid == "") { myVehicleParameter->routeid = myActiveRouteID; } }
void GraphvizPlotter::parseSubgraphs(Agraph_t *g, GraphComponent *g_component, processedProperties *props) { // nacteni zpracovanych komponent pro jejich mozne budouci preskoceni v aktualni iteraci string_map node_attrs_bak = props->node_attrs; string_map edge_attrs_bak = props->edge_attrs; string_map graph_attrs_bak = props->graph_attrs; // prochazeni vsech podgrafu daneho grafu/podgrafu for (Agraph_t *subg = agfstsubg(g); subg; subg = agnxtsubg(subg)) { // vytvoreni podgrafu v datovem modelu Subgraph *subgraph = g_component->addSubgraph(agnameof(subg)); // zpracovani atributu grafu/podgrafu a ulozeni do datoveho modelu k danemu podgrafu parseGraphAttrs(subg, subgraph, props); // zpracovani podgrafu a ulozeni do datoveho modelu k danemu pdgrafu parseSubgraphs(subg, subgraph, props); // stejne zpracovani v pripade parseNodes(subg, subgraph, props); parseEdges(subg, subgraph, props); // pro dalsi podgraf nactu zpet zpracovane komponenty props->graph_attrs.clear(); props->node_attrs.clear(); props->edge_attrs.clear(); props->graph_attrs = graph_attrs_bak; props->node_attrs = node_attrs_bak; props->edge_attrs = edge_attrs_bak; } }
void RORouteHandler::parseFromViaTo(std::string element, const SUMOSAXAttributes& attrs) { bool useTaz = OptionsCont::getOptions().getBool("with-taz"); if (useTaz && !myVehicleParameter->wasSet(VEHPARS_TAZ_SET)) { WRITE_WARNING("Taz usage was requested but no taz present in " + element + " '" + myVehicleParameter->id + "'!"); useTaz = false; } else if (!useTaz && !attrs.hasAttribute(SUMO_ATTR_FROM) && myVehicleParameter->wasSet(VEHPARS_TAZ_SET)) { WRITE_WARNING("'from' attribute missing using taz for " + element + " '" + myVehicleParameter->id + "'!"); useTaz = true; } if (useTaz) { const ROEdge* fromTaz = myNet.getEdge(myVehicleParameter->fromTaz + "-source"); if (fromTaz == 0) { myErrorOutput->inform("Source taz '" + myVehicleParameter->fromTaz + "' not known for " + element + " '" + myVehicleParameter->id + "'!"); } else if (fromTaz->getNoFollowing() == 0) { myErrorOutput->inform("Source taz '" + myVehicleParameter->fromTaz + "' has no outgoing edges for " + element + " '" + myVehicleParameter->id + "'!"); } else { myActiveRoute.push_back(fromTaz); } const ROEdge* toTaz = myNet.getEdge(myVehicleParameter->toTaz + "-sink"); if (toTaz == 0) { myErrorOutput->inform("Sink taz '" + myVehicleParameter->toTaz + "' not known for " + element + " '" + myVehicleParameter->id + "'!"); } else { myActiveRoute.push_back(toTaz); } } else { bool ok = true; parseEdges(attrs.get<std::string>(SUMO_ATTR_FROM, myVehicleParameter->id.c_str(), ok), myActiveRoute, "for " + element + " '" + myVehicleParameter->id + "'"); parseEdges(attrs.getOpt<std::string>(SUMO_ATTR_VIA, myVehicleParameter->id.c_str(), ok, "", true), myActiveRoute, "for " + element + " '" + myVehicleParameter->id + "'"); parseEdges(attrs.get<std::string>(SUMO_ATTR_TO, myVehicleParameter->id.c_str(), ok, !myEmptyDestinationsAllowed), myActiveRoute, "for " + element + " '" + myVehicleParameter->id + "'"); } myActiveRouteID = "!" + myVehicleParameter->id; if (myVehicleParameter->routeid == "") { myVehicleParameter->routeid = myActiveRouteID; } closeRoute(true); }
void GraphvizPlotter::parse() { processedProperties processed_props; // zpracovani atributu grafu parseGraphAttrs(g_graph, graph, &processed_props); // zpracovani podgrafu grafu parseSubgraphs(g_graph, graph, &processed_props); // zpracovani vrcholu grafu parseNodes(g_graph, graph, &processed_props); // zpracovani hran grafu parseEdges(g_graph, graph, &processed_props); }
void RORouteHandler::openRoute(const SUMOSAXAttributes& attrs) { myActiveRoute.clear(); myInsertStopEdgesAt = -1; // check whether the id is really necessary std::string rid; if (myCurrentAlternatives != 0) { myActiveRouteID = myCurrentAlternatives->getID(); rid = "distribution '" + myCurrentAlternatives->getID() + "'"; } else if (myVehicleParameter != 0) { // ok, a vehicle is wrapping the route, // we may use this vehicle's id as default myVehicleParameter->routeid = myActiveRouteID = "!" + myVehicleParameter->id; // !!! document this if (attrs.hasAttribute(SUMO_ATTR_ID)) { WRITE_WARNING("Ids of internal routes are ignored (vehicle '" + myVehicleParameter->id + "')."); } } else { bool ok = true; myActiveRouteID = attrs.get<std::string>(SUMO_ATTR_ID, 0, ok); if (!ok) { return; } rid = "'" + myActiveRouteID + "'"; } if (myVehicleParameter != 0) { // have to do this here for nested route distributions rid = "for vehicle '" + myVehicleParameter->id + "'"; } bool ok = true; if (attrs.hasAttribute(SUMO_ATTR_EDGES)) { parseEdges(attrs.get<std::string>(SUMO_ATTR_EDGES, myActiveRouteID.c_str(), ok), myActiveRoute, rid); } myActiveRouteRefID = attrs.getOpt<std::string>(SUMO_ATTR_REFID, myActiveRouteID.c_str(), ok, ""); if (myActiveRouteRefID != "" && myNet.getRouteDef(myActiveRouteRefID) == 0) { myErrorOutput->inform("Invalid reference to route '" + myActiveRouteRefID + "' in route " + rid + "."); } if (myCurrentAlternatives != 0 && !attrs.hasAttribute(SUMO_ATTR_PROB)) { WRITE_WARNING("No probability for a route in '" + rid + "', using default."); } myActiveRouteProbability = attrs.getOpt<double>(SUMO_ATTR_PROB, myActiveRouteID.c_str(), ok, DEFAULT_VEH_PROB); if (ok && myActiveRouteProbability < 0) { myErrorOutput->inform("Invalid probability for route '" + myActiveRouteID + "'."); } myActiveRouteColor = attrs.hasAttribute(SUMO_ATTR_COLOR) ? new RGBColor(attrs.get<RGBColor>(SUMO_ATTR_COLOR, myActiveRouteID.c_str(), ok)) : 0; ok = true; myCurrentCosts = attrs.getOpt<double>(SUMO_ATTR_COST, myActiveRouteID.c_str(), ok, -1); if (ok && myCurrentCosts != -1 && myCurrentCosts < 0) { myErrorOutput->inform("Invalid cost for route '" + myActiveRouteID + "'."); } }