void MSRouteHandler::closeFlow() { // let's check whether vehicles had to depart before the simulation starts myVehicleParameter->repetitionsDone = 0; SUMOTime offsetToBegin = string2time(oc.getString("begin")) - myVehicleParameter->depart; while (myVehicleParameter->repetitionsDone * myVehicleParameter->repetitionOffset < offsetToBegin) { myVehicleParameter->repetitionsDone++; if (myVehicleParameter->repetitionsDone == myVehicleParameter->repetitionNumber) { return; } } if (MSNet::getInstance()->getVehicleControl().getVType(myVehicleParameter->vtypeid) == 0) { throw ProcessError("The vehicle type '" + myVehicleParameter->vtypeid + "' for vehicle '" + myVehicleParameter->id + "' is not known."); } if (MSRoute::dictionary("!" + myVehicleParameter->id) == 0) { // if not, try via the (hopefully) given route-id if (MSRoute::dictionary(myVehicleParameter->routeid) == 0) { if (myVehicleParameter->routeid != "") { throw ProcessError("The route '" + myVehicleParameter->routeid + "' for vehicle '" + myVehicleParameter->id + "' is not known."); } else { throw ProcessError("Vehicle '" + myVehicleParameter->id + "' has no route."); } } } else { myVehicleParameter->routeid = "!" + myVehicleParameter->id; } myActiveRouteID = ""; // check whether the vehicle shall be added directly to the network or // shall stay in the internal buffer if (checkLastDepart()) { MSNet::getInstance()->getInsertionControl().add(myVehicleParameter); } myVehicleParameter = 0; }
void MSRouteHandler::closePerson() { if (myActivePlan->size() == 0) { throw ProcessError("Person '" + myVehicleParameter->id + "' has no plan."); } MSPerson* person = new MSPerson(myVehicleParameter, myActivePlan); if (checkLastDepart() && MSNet::getInstance()->getPersonControl().add(myVehicleParameter->id, person)) { MSNet::getInstance()->getPersonControl().setArrival(myVehicleParameter->depart, person); } else { delete person; } myVehicleParameter = 0; myActivePlan = 0; }
void MSRouteHandler::closePerson() { if (myActivePlan->size() == 0) { throw ProcessError("Person '" + myVehicleParameter->id + "' has no plan."); } MSVehicleType* type = MSNet::getInstance()->getVehicleControl().getVType(myVehicleParameter->vtypeid); if (type == 0) { throw ProcessError("The type '" + myVehicleParameter->vtypeid + "' for person '" + myVehicleParameter->id + "' is not known."); } MSPerson* person = MSNet::getInstance()->getPersonControl().buildPerson(myVehicleParameter, type, myActivePlan); // @todo: consider myScale? if ((myAddVehiclesDirectly || checkLastDepart()) && MSNet::getInstance()->getPersonControl().add(myVehicleParameter->id, person)) { MSNet::getInstance()->getPersonControl().setDeparture(myVehicleParameter->depart, person); registerLastDepart(); } else { delete person; } myVehicleParameter = 0; myActivePlan = 0; }
void MSRouteHandler::closeVehicle() { if(oc.getLoadVerbosity()>1) { std::cout << "----> void MSRouteHandler::closeVehicle()" << std::endl; } // get nested route const MSRoute* route = MSRoute::dictionary("!" + myVehicleParameter->id); MSVehicleControl& vehControl = MSNet::getInstance()->getVehicleControl(); if (myVehicleParameter->departProcedure == DEPART_GIVEN) { // let's check whether this vehicle had to depart before the simulation starts if (!checkLastDepart() || myVehicleParameter->depart < string2time(oc.getString("begin"))) { if (route != 0) { route->addReference(); route->release(); } return; } } // get the vehicle's type MSVehicleType* vtype = 0; if(myVehicleParameter->vtypeid != "") { if(oc.getLoadVerbosity()>2) { std::cout << "[110] void MSRouteHandler::closeVehicle() - myVehiclePa" << "rameter->vtypeid=" << myVehicleParameter->vtypeid << std::endl; } vtype = vehControl.getVType(myVehicleParameter->vtypeid); if(vtype == 0){ throw ProcessError("The vehicle type '" + myVehicleParameter->vtypeid + "' for vehicle '" + myVehicleParameter->id + "' is not known."); } } else { if(oc.getLoadVerbosity()>2) { std::cout << "[120] void MSRouteHandler::closeVehicle() - myVehiclePa" << "rameter->vtypeid=" << myVehicleParameter->vtypeid << std::endl; } // there should be one (at least the default one) vtype = vehControl.getVType(); } if(route == 0){ // if there is no nested route, try via the (hopefully) given route-id route = MSRoute::dictionary(myVehicleParameter->routeid); } if(route == 0){ // nothing found? -> error if(myVehicleParameter->routeid != "") { throw ProcessError("The route '" + myVehicleParameter->routeid + "' for vehicle '" + myVehicleParameter->id + "' is not known."); }else{ throw ProcessError("Vehicle '" + myVehicleParameter->id + "' has no route."); } } myActiveRouteID = ""; // try to build the vehicle SUMOVehicle* vehicle = 0; if (vehControl.getVehicle(myVehicleParameter->id) == 0) { /* (UPREGO) HERE I THINK THAT THE VEHICLE WAS BEING INSERTED * INCORRECTLY AS (ALWAYS) DEFAULT_VTYPE_ID. Now it checks and uses also * default_elecvtype_id */ /* if(myVehicleParameter->id == DEFAULT_ELECVTYPE_ID) */ /* DANGER i was mistaking myVehicleParameter->id for * myVehicleParameter->vtypeid */ /* TODO Look for this vehicle in the vehicles to track list */ //VehicleToTrack::getVehiclesToTrackWithCharacteristicsList() void *lol = VehicleToTrack::getVehiclesToTrackWithCharacteristicsList(); //if(vehControl.getVehicle(myVehicleParameter->id) == ) if(VehicleToTrack::getVehiclesToTrackWithCharacteristicsList() && VehicleToTrack::getVehiclesToTrackWithCharacteristicsList()->size()>0 ) { /* int i = 0; while(i<VehicleToTrack::getVehiclesToTrackWithCharacteristicsList()->size()) { if(VehicleToTrack::getVehiclesToTrackWithCharacteristicsList()->at(i)->getIdentifier() == myVehicleParameter->id) { // TODO TASK This vehicle has to be parametrized MSVehicleType *vtype2 = new MSVehicleType (vtype, VehicleToTrack::getVehiclesToTrackWithCharacteristicsList().at(i) ); } else i++; } */ } vehicle = vehControl.buildVehicle(myVehicleParameter, route, vtype); // maybe we do not want this vehicle to be inserted due to scaling if (myScale < 0 || vehControl.isInQuota(myScale)) { // add the vehicle to the vehicle control vehControl.addVehicle(myVehicleParameter->id, vehicle); if (myVehicleParameter->departProcedure == DEPART_TRIGGERED) { vehControl.addWaiting(*route->begin(), vehicle); vehControl.registerOneWaitingForPerson(); } myVehicleParameter = 0; } else { vehControl.deleteVehicle(vehicle); myVehicleParameter = 0; vehicle = 0; } } else { // strange: another vehicle with the same id already exists #ifdef HAVE_MESOSIM if (!MSGlobals::gStateLoaded) { #endif // and was not loaded while loading a simulation state // -> error throw ProcessError("Another vehicle with the id '" + myVehicleParameter->id + "' exists."); #ifdef HAVE_MESOSIM } else { // ok, it seems to be loaded previously while loading a simulation state vehicle = 0; } #endif } // check whether the vehicle shall be added directly to the network or // shall stay in the internal buffer if (vehicle != 0) { if (vehicle->getParameter().departProcedure == DEPART_GIVEN) { MSNet::getInstance()->getInsertionControl().add(vehicle); } } }
void MSRouteHandler::closeVehicle() { // get nested route const MSRoute* route = MSRoute::dictionary("!" + myVehicleParameter->id); MSVehicleControl& vehControl = MSNet::getInstance()->getVehicleControl(); if (myVehicleParameter->departProcedure == DEPART_GIVEN) { // let's check whether this vehicle had to depart before the simulation starts if (!(myAddVehiclesDirectly || checkLastDepart()) || myVehicleParameter->depart < string2time(OptionsCont::getOptions().getString("begin"))) { if (route != 0) { route->addReference(); route->release(); } return; } } // get the vehicle's type MSVehicleType* vtype = 0; if (myVehicleParameter->vtypeid != "") { vtype = vehControl.getVType(myVehicleParameter->vtypeid); if (vtype == 0) { throw ProcessError("The vehicle type '" + myVehicleParameter->vtypeid + "' for vehicle '" + myVehicleParameter->id + "' is not known."); } } else { // there should be one (at least the default one) vtype = vehControl.getVType(); } if (route == 0) { // if there is no nested route, try via the (hopefully) given route-id route = MSRoute::dictionary(myVehicleParameter->routeid); } if (route == 0) { // nothing found? -> error if (myVehicleParameter->routeid != "") { throw ProcessError("The route '" + myVehicleParameter->routeid + "' for vehicle '" + myVehicleParameter->id + "' is not known."); } else { throw ProcessError("Vehicle '" + myVehicleParameter->id + "' has no route."); } } myActiveRouteID = ""; // try to build the vehicle SUMOVehicle* vehicle = 0; if (vehControl.getVehicle(myVehicleParameter->id) == 0) { vehicle = vehControl.buildVehicle(myVehicleParameter, route, vtype); // maybe we do not want this vehicle to be inserted due to scaling if (vehControl.isInQuota()) { // add the vehicle to the vehicle control vehControl.addVehicle(myVehicleParameter->id, vehicle); if (myVehicleParameter->departProcedure == DEPART_TRIGGERED) { vehControl.addWaiting(*route->begin(), vehicle); vehControl.registerOneWaitingForPerson(); } registerLastDepart(); myVehicleParameter = 0; } else { vehControl.deleteVehicle(vehicle, true); myVehicleParameter = 0; vehicle = 0; } } else { // strange: another vehicle with the same id already exists if (!MSGlobals::gStateLoaded) { // and was not loaded while loading a simulation state // -> error throw ProcessError("Another vehicle with the id '" + myVehicleParameter->id + "' exists."); } else { // ok, it seems to be loaded previously while loading a simulation state vehicle = 0; } } // check whether the vehicle shall be added directly to the network or // shall stay in the internal buffer if (vehicle != 0) { if (vehicle->getParameter().departProcedure == DEPART_GIVEN) { MSNet::getInstance()->getInsertionControl().add(vehicle); } } }