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; }
GUIParameterTableWindow* GUIMEVehicle::getParameterWindow(GUIMainWindow& app, GUISUMOAbstractView&) { GUIParameterTableWindow* ret = new GUIParameterTableWindow(app, *this, 21); // add items ret->mkItem("edge [id]", false, getEdge()->getID()); ret->mkItem("segment [#]", false, getSegment()->getIndex()); ret->mkItem("position [m]", true, new FunctionBinding<GUIMEVehicle, SUMOReal>(this, &MEVehicle::getPositionOnLane)); ret->mkItem("speed [m/s]", true, new FunctionBinding<GUIMEVehicle, SUMOReal>(this, &MEVehicle::getSpeed)); ret->mkItem("angle [degree]", true, new FunctionBinding<GUIMEVehicle, SUMOReal>(this, &GUIBaseVehicle::getNaviDegree)); ret->mkItem("waiting time [s]", true, new FunctionBinding<GUIMEVehicle, SUMOReal>(this, &MEVehicle::getWaitingSeconds)); if (getChosenSpeedFactor() != 1) { ret->mkItem("speed factor", false, getChosenSpeedFactor()); } //ret->mkItem("time gap [s]", true, // new FunctionBinding<GUIMEVehicle, SUMOReal>(this, &MSVehicle::getTimeGap)); //ret->mkItem("waiting time [s]", true, // new FunctionBinding<GUIMEVehicle, SUMOReal>(this, &MSVehicle::getWaitingSeconds)); //ret->mkItem("impatience", true, // new FunctionBinding<GUIMEVehicle, SUMOReal>(this, &MSVehicle::getImpatience)); //ret->mkItem("last lane change [s]", true, // new FunctionBinding<GUIMEVehicle, SUMOReal>(this, &GUIMEVehicle::getLastLaneChangeOffset)); ret->mkItem("desired depart [s]", false, time2string(getParameter().depart)); ret->mkItem("depart delay [s]", false, time2string(getDepartDelay())); if (getParameter().repetitionNumber < INT_MAX) { ret->mkItem("remaining [#]", false, (unsigned int) getParameter().repetitionNumber - getParameter().repetitionsDone); } if (getParameter().repetitionOffset > 0) { ret->mkItem("insertion period [s]", false, time2string(getParameter().repetitionOffset)); } if (getParameter().repetitionProbability > 0) { ret->mkItem("insertion probability", false, getParameter().repetitionProbability); } //ret->mkItem("stop info", false, getStopInfo()); ret->mkItem("line", false, myParameter->line); //ret->mkItem("CO2 [mg/s]", true, // new FunctionBinding<GUIMEVehicle, SUMOReal>(this, &GUIMEVehicle::getCO2Emissions)); //ret->mkItem("CO [mg/s]", true, // new FunctionBinding<GUIMEVehicle, SUMOReal>(this, &GUIMEVehicle::getCOEmissions)); //ret->mkItem("HC [mg/s]", true, // new FunctionBinding<GUIMEVehicle, SUMOReal>(this, &GUIMEVehicle::getHCEmissions)); //ret->mkItem("NOx [mg/s]", true, // new FunctionBinding<GUIMEVehicle, SUMOReal>(this, &GUIMEVehicle::getNOxEmissions)); //ret->mkItem("PMx [mg/s]", true, // new FunctionBinding<GUIMEVehicle, SUMOReal>(this, &GUIMEVehicle::getPMxEmissions)); //ret->mkItem("fuel [ml/s]", true, // new FunctionBinding<GUIMEVehicle, SUMOReal>(this, &GUIMEVehicle::getFuelConsumption)); //ret->mkItem("noise (Harmonoise) [dB]", true, // new FunctionBinding<GUIMEVehicle, SUMOReal>(this, &GUIMEVehicle::getHarmonoise_NoiseEmissions)); std::ostringstream str; for (std::vector<MSDevice*>::const_iterator i = myDevices.begin(); i != myDevices.end(); ++i) { if (i != myDevices.begin()) { str << ' '; } str << (*i)->getID().substr(0, (*i)->getID().find(getID())); } ret->mkItem("devices", false, str.str()); //ret->mkItem("persons", true, // new FunctionBinding<GUIMEVehicle, unsigned int>(this, &GUIMEVehicle::getPersonNumber)); //ret->mkItem("containers", true, // new FunctionBinding<GUIMEVehicle, unsigned int>(this, &GUIMEVehicle::getContainerNumber)); ret->mkItem("parameters [key:val]", false, toString(getParameter().getMap())); // meso specific values ret->mkItem("event time [s]", true, new FunctionBinding<GUIMEVehicle, SUMOReal>(this, &MEVehicle::getEventTimeSeconds)); ret->mkItem("entry time [s]", true, new FunctionBinding<GUIMEVehicle, SUMOReal>(this, &MEVehicle::getLastEntryTimeSeconds)); ret->mkItem("block time [s]", true, new FunctionBinding<GUIMEVehicle, SUMOReal>(this, &MEVehicle::getBlockTimeSeconds)); ret->mkItem("tls penalty [s]", true, new FunctionBinding<GUIMEVehicle, SUMOReal>(this, &MEVehicle::getCurrentTLSPenaltySeconds)); // close building ret->closeBuilding(); return ret; }
GUIParameterTableWindow* GUIVehicle::getParameterWindow(GUIMainWindow& app, GUISUMOAbstractView&) { const int sublaneParams = MSGlobals::gLateralResolution > 0 ? 4 : 0; GUIParameterTableWindow* ret = new GUIParameterTableWindow(app, *this, 39 + sublaneParams + (int)getParameter().getParametersMap().size()); // add items ret->mkItem("lane [id]", false, Named::getIDSecure(myLane, "n/a")); if (MSAbstractLaneChangeModel::haveLateralDynamics()) { const MSLane* shadowLane = getLaneChangeModel().getShadowLane(); ret->mkItem("shadow lane [id]", false, shadowLane == nullptr ? "" : shadowLane->getID()); } if (MSGlobals::gLateralResolution > 0) { const MSLane* targetLane = getLaneChangeModel().getTargetLane(); ret->mkItem("target lane [id]", false, targetLane == nullptr ? "" : targetLane->getID()); } ret->mkItem("position [m]", true, new FunctionBinding<GUIVehicle, double>(this, &MSVehicle::getPositionOnLane)); ret->mkItem("lateral offset [m]", true, new FunctionBinding<GUIVehicle, double>(this, &GUIVehicle::getLateralPositionOnLane)); ret->mkItem("speed [m/s]", true, new FunctionBinding<GUIVehicle, double>(this, &MSVehicle::getSpeed)); ret->mkItem("lateral speed [m/s]", true, new FunctionBinding<MSAbstractLaneChangeModel, double>(&getLaneChangeModel(), &MSAbstractLaneChangeModel::getSpeedLat)); ret->mkItem("acceleration [m/s^2]", true, new FunctionBinding<GUIVehicle, double>(this, &MSVehicle::getAcceleration)); ret->mkItem("angle [degree]", true, new FunctionBinding<GUIVehicle, double>(this, &GUIBaseVehicle::getNaviDegree)); ret->mkItem("slope [degree]", true, new FunctionBinding<GUIVehicle, double>(this, &MSVehicle::getSlope)); ret->mkItem("speed factor", false, getChosenSpeedFactor()); ret->mkItem("time gap on lane [s]", true, new FunctionBinding<GUIVehicle, double>(this, &MSVehicle::getTimeGapOnLane)); ret->mkItem("waiting time [s]", true, new FunctionBinding<GUIVehicle, double>(this, &MSVehicle::getWaitingSeconds)); ret->mkItem(("waiting time (accumulated, " + time2string(MSGlobals::gWaitingTimeMemory) + "s) [s]").c_str(), true, new FunctionBinding<GUIVehicle, double>(this, &MSVehicle::getAccumulatedWaitingSeconds)); ret->mkItem("time loss [s]", true, new FunctionBinding<GUIVehicle, double>(this, &MSVehicle::getTimeLossSeconds)); ret->mkItem("impatience", true, new FunctionBinding<GUIVehicle, double>(this, &MSVehicle::getImpatience)); ret->mkItem("last lane change [s]", true, new FunctionBinding<GUIVehicle, double>(this, &GUIVehicle::getLastLaneChangeOffset)); ret->mkItem("desired depart [s]", false, time2string(getParameter().depart)); ret->mkItem("depart delay [s]", false, time2string(getDepartDelay())); if (getParameter().repetitionNumber < std::numeric_limits<int>::max()) { ret->mkItem("remaining [#]", false, (int) getParameter().repetitionNumber - getParameter().repetitionsDone); } if (getParameter().repetitionOffset > 0) { ret->mkItem("insertion period [s]", false, time2string(getParameter().repetitionOffset)); } if (getParameter().repetitionProbability > 0) { ret->mkItem("insertion probability", false, getParameter().repetitionProbability); } ret->mkItem("stop info", false, getStopInfo()); ret->mkItem("line", false, myParameter->line); ret->mkItem("CO2 [mg/s]", true, new FunctionBinding<GUIVehicle, double>(this, &MSVehicle::getCO2Emissions)); ret->mkItem("CO [mg/s]", true, new FunctionBinding<GUIVehicle, double>(this, &MSVehicle::getCOEmissions)); ret->mkItem("HC [mg/s]", true, new FunctionBinding<GUIVehicle, double>(this, &MSVehicle::getHCEmissions)); ret->mkItem("NOx [mg/s]", true, new FunctionBinding<GUIVehicle, double>(this, &MSVehicle::getNOxEmissions)); ret->mkItem("PMx [mg/s]", true, new FunctionBinding<GUIVehicle, double>(this, &MSVehicle::getPMxEmissions)); ret->mkItem("fuel [ml/s]", true, new FunctionBinding<GUIVehicle, double>(this, &MSVehicle::getFuelConsumption)); ret->mkItem("electricity [Wh/s]", true, new FunctionBinding<GUIVehicle, double>(this, &MSVehicle::getElectricityConsumption)); ret->mkItem("noise (Harmonoise) [dB]", true, new FunctionBinding<GUIVehicle, double>(this, &MSVehicle::getHarmonoise_NoiseEmissions)); ret->mkItem("devices", false, toString(myDevices)); ret->mkItem("persons", true, new FunctionBinding<GUIVehicle, int>(this, &MSVehicle::getPersonNumber)); ret->mkItem("containers", true, new FunctionBinding<GUIVehicle, int>(this, &MSVehicle::getContainerNumber)); ret->mkItem("lcState right", false, toString((LaneChangeAction)getLaneChangeModel().getSavedState(-1).second)); ret->mkItem("lcState left", false, toString((LaneChangeAction)getLaneChangeModel().getSavedState(1).second)); // close building if (MSGlobals::gLateralResolution > 0) { ret->mkItem("right side on edge [m]", true, new FunctionBinding<GUIVehicle, double>(this, &GUIVehicle::getRightSideOnEdge2)); ret->mkItem("left side on edge [m]", true, new FunctionBinding<GUIVehicle, double>(this, &GUIVehicle::getLeftSideOnEdge)); ret->mkItem("rightmost edge sublane [#]", true, new FunctionBinding<GUIVehicle, int>(this, &GUIVehicle::getRightSublaneOnEdge)); ret->mkItem("leftmost edge sublane [#]", true, new FunctionBinding<GUIVehicle, int>(this, &GUIVehicle::getLeftSublaneOnEdge)); ret->mkItem("lane change maneuver distance [m]", true, new FunctionBinding<GUIVehicle, double>(this, &GUIVehicle::getManeuverDist)); } ret->closeBuilding(&getParameter()); return ret; }
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; }