SUMOReal GUIMEVehicle::getColorValue(size_t activeScheme) const { switch (activeScheme) { case 8: return getSpeed(); case 9: return getWaitingSeconds(); case 11: return 0; // invalid getLastLaneChangeOffset(); case 12: return getSegment()->getEdge().getVehicleMaxSpeed(this); case 13: return 0; // invalid getCO2Emissions(); case 14: return 0; // invalid getCOEmissions(); case 15: return 0; // invalid getPMxEmissions(); case 16: return 0; // invalid getNOxEmissions(); case 17: return 0; // invalid getHCEmissions(); case 18: return 0; // invalid getFuelConsumption(); case 19: return 0; // invalid getHarmonoise_NoiseEmissions(); case 20: // !!! unused!? if (getNumberReroutes() == 0) { return -1; } return getNumberReroutes(); case 21: return gSelected.isSelected(GLO_VEHICLE, getGlID()); case 22: return 0; // invalid getBestLaneOffset(); case 23: return 0; // invalid getAcceleration(); case 24: return 0; // invalid getTimeGap(); case 25: return STEPS2TIME(getDepartDelay()); } return 0; }
double GUIVehicle::getColorValue(int activeScheme) const { switch (activeScheme) { case 8: return getSpeed(); case 9: // color by action step if (isActionStep(SIMSTEP)) { // Upcoming simstep is actionstep (t was already increased before drawing) return 1.; } else if (isActive()) { // Completed simstep was actionstep return 2.; } else { // not active return 0.; } case 10: return getWaitingSeconds(); case 11: return getAccumulatedWaitingSeconds(); case 12: return getLastLaneChangeOffset(); case 13: return getLane()->getVehicleMaxSpeed(this); case 14: return getCO2Emissions(); case 15: return getCOEmissions(); case 16: return getPMxEmissions(); case 17: return getNOxEmissions(); case 18: return getHCEmissions(); case 19: return getFuelConsumption(); case 20: return getHarmonoise_NoiseEmissions(); case 21: if (getNumberReroutes() == 0) { return -1; } return getNumberReroutes(); case 22: return gSelected.isSelected(GLO_VEHICLE, getGlID()); case 23: return getLaneChangeModel().isOpposite() ? -100 : getBestLaneOffset(); case 24: return getAcceleration(); case 25: return getTimeGapOnLane(); case 26: return STEPS2TIME(getDepartDelay()); case 27: return getElectricityConsumption(); case 28: return getTimeLossSeconds(); case 29: return getLaneChangeModel().getSpeedLat(); } return 0; }
bool MSBaseVehicle::replaceRouteEdges(ConstMSEdgeVector& edges, bool onInit) { if (edges.empty()) { WRITE_WARNING("No route for vehicle '" + getID() + "' found."); return false; } // build a new id, first std::string id = getID(); if (id[0] != '!') { id = "!" + id; } if (myRoute->getID().find("!var#") != std::string::npos) { id = myRoute->getID().substr(0, myRoute->getID().rfind("!var#") + 5) + toString(getNumberReroutes() + 1); } else { id = id + "!var#1"; } int oldSize = (int)edges.size(); if (!onInit) { const MSEdge* const origin = getRerouteOrigin(); if (origin != *myCurrEdge && edges.front() == origin) { edges.insert(edges.begin(), *myCurrEdge); oldSize = (int)edges.size(); } edges.insert(edges.begin(), myRoute->begin(), myCurrEdge); } if (edges == myRoute->getEdges()) { if (onInit) { // if edges = 'from to' we still need to calculate the arrivalPos once calculateArrivalParams(); } return true; } const RGBColor& c = myRoute->getColor(); MSRoute* newRoute = new MSRoute(id, edges, false, &c == &RGBColor::DEFAULT_COLOR ? 0 : new RGBColor(c), myRoute->getStops()); if (!MSRoute::dictionary(id, newRoute)) { delete newRoute; return false; } if (!replaceRoute(newRoute, onInit, (int)edges.size() - oldSize)) { newRoute->addReference(); newRoute->release(); return false; } calculateArrivalParams(); return true; }