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; }