void ROPerson::addTrip(const ROEdge* const from, const ROEdge* const to, const SVCPermissions modeSet, const std::string& vTypes, const double departPos, const double arrivalPos, const std::string& busStop, double walkFactor) { PersonTrip* trip = new PersonTrip(from, to, modeSet, departPos, arrivalPos, busStop, walkFactor); RONet* net = RONet::getInstance(); SUMOVehicleParameter pars; pars.departProcedure = DEPART_TRIGGERED; for (StringTokenizer st(vTypes); st.hasNext();) { pars.vtypeid = st.next(); pars.parametersSet |= VEHPARS_VTYPE_SET; SUMOVTypeParameter* type = net->getVehicleTypeSecure(pars.vtypeid); if (type == nullptr) { delete trip; throw InvalidArgument("The vehicle type '" + pars.vtypeid + "' in a trip for person '" + getID() + "' is not known."); } pars.id = getID() + "_" + toString(trip->getVehicles().size()); trip->addVehicle(new ROVehicle(pars, new RORouteDef("!" + pars.id, 0, false, false), type, net)); } if (trip->getVehicles().empty()) { if ((modeSet & SVC_PASSENGER) != 0) { pars.id = getID() + "_0"; trip->addVehicle(new ROVehicle(pars, new RORouteDef("!" + pars.id, 0, false, false), net->getVehicleTypeSecure(DEFAULT_VTYPE_ID), net)); } if ((modeSet & SVC_BICYCLE) != 0) { pars.id = getID() + "_b0"; pars.vtypeid = DEFAULT_BIKETYPE_ID; pars.parametersSet |= VEHPARS_VTYPE_SET; trip->addVehicle(new ROVehicle(pars, new RORouteDef("!" + pars.id, 0, false, false), net->getVehicleTypeSecure(DEFAULT_BIKETYPE_ID), net)); } } myPlan.push_back(trip); }
void ROPerson::computeRoute(const RORouterProvider& provider, const bool /* removeLoops */, MsgHandler* errorHandler) { myRoutingSuccess = true; for (std::vector<PlanItem*>::iterator it = myPlan.begin(); it != myPlan.end(); ++it) { if ((*it)->needsRouting()) { PersonTrip* trip = static_cast<PersonTrip*>(*it); ConstROEdgeVector edges; std::vector<ROVehicle*>& vehicles = trip->getVehicles(); if (vehicles.empty()) { computeIntermodal(provider, trip, 0, errorHandler); } else { for (std::vector<ROVehicle*>::iterator v = vehicles.begin(); v != vehicles.end();) { if (!computeIntermodal(provider, trip, *v, errorHandler)) { v = vehicles.erase(v); } else { ++v; } } } } } }
void ROPerson::computeRoute(const RORouterProvider& provider, const bool /* removeLoops */, MsgHandler* errorHandler) { myRoutingSuccess = true; SUMOTime time = getParameter().depart; for (std::vector<PlanItem*>::iterator it = myPlan.begin(); it != myPlan.end(); ++it) { if ((*it)->needsRouting()) { PersonTrip* trip = static_cast<PersonTrip*>(*it); std::vector<ROVehicle*>& vehicles = trip->getVehicles(); if (vehicles.empty()) { computeIntermodal(time, provider, trip, nullptr, errorHandler); } else { for (std::vector<ROVehicle*>::iterator v = vehicles.begin(); v != vehicles.end();) { if (!computeIntermodal(time, provider, trip, *v, errorHandler)) { v = vehicles.erase(v); } else { ++v; } } } } time += (*it)->getDuration(); } }