SUMO - Simulation of Urban MObility
|
00001 /****************************************************************************/ 00009 // The gui-version of a MS_E2_ZS_CollectorOverLanes. 00010 /****************************************************************************/ 00011 // SUMO, Simulation of Urban MObility; see http://sumo.sourceforge.net/ 00012 // Copyright (C) 2001-2012 DLR (http://www.dlr.de/) and contributors 00013 /****************************************************************************/ 00014 // 00015 // This file is part of SUMO. 00016 // SUMO is free software: you can redistribute it and/or modify 00017 // it under the terms of the GNU General Public License as published by 00018 // the Free Software Foundation, either version 3 of the License, or 00019 // (at your option) any later version. 00020 // 00021 /****************************************************************************/ 00022 00023 00024 // =========================================================================== 00025 // included modules 00026 // =========================================================================== 00027 #ifdef _MSC_VER 00028 #include <windows_config.h> 00029 #else 00030 #include <config.h> 00031 #endif 00032 00033 #include <utils/gui/globjects/GUIGlObject.h> 00034 #include <utils/gui/globjects/GUIGlObjectStorage.h> 00035 #include <utils/geom/PositionVector.h> 00036 #include <utils/gui/div/GLHelper.h> 00037 #include <utils/geom/Line.h> 00038 #include <utils/geom/GeomHelper.h> 00039 #include <utils/gui/div/GUIParameterTableWindow.h> 00040 #include <guisim/GUIEdge.h> 00041 #include "GUILaneWrapper.h" 00042 #include "GUI_E2_ZS_CollectorOverLanes.h" 00043 00044 #ifdef _WIN32 00045 #include <windows.h> 00046 #include <GL/gl.h> /* OpenGL header file */ 00047 #endif // _WIN32 00048 00049 #ifdef CHECK_MEMORY_LEAKS 00050 #include <foreign/nvwa/debug_new.h> 00051 #endif // CHECK_MEMORY_LEAKS 00052 00053 00054 // =========================================================================== 00055 // method definitions 00056 // =========================================================================== 00057 /* ------------------------------------------------------------------------- 00058 * GUI_E2_ZS_CollectorOverLanes-methods 00059 * ----------------------------------------------------------------------- */ 00060 GUI_E2_ZS_CollectorOverLanes::GUI_E2_ZS_CollectorOverLanes(std::string id, 00061 DetectorUsage usage, MSLane* lane, SUMOReal startPos, 00062 SUMOTime haltingTimeThreshold, 00063 SUMOReal haltingSpeedThreshold, 00064 SUMOReal jamDistThreshold) 00065 : MS_E2_ZS_CollectorOverLanes(id, usage, lane, startPos, 00066 haltingTimeThreshold, haltingSpeedThreshold, jamDistThreshold) {} 00067 00068 00069 00070 GUI_E2_ZS_CollectorOverLanes::~GUI_E2_ZS_CollectorOverLanes() {} 00071 00072 00073 GUIDetectorWrapper* 00074 GUI_E2_ZS_CollectorOverLanes::buildDetectorGUIRepresentation() { 00075 return new MyWrapper(*this, myAlreadyBuild); 00076 } 00077 00078 00079 MSE2Collector* 00080 GUI_E2_ZS_CollectorOverLanes::buildCollector(size_t c, size_t r, MSLane* l, 00081 SUMOReal start, SUMOReal end) { 00082 std::string id = makeID(myID, c, r); 00083 if (start + end < l->getLength()) { 00084 start = l->getLength() - end - (SUMOReal) 0.1; 00085 } 00086 return new GUI_E2_ZS_Collector(id, myUsage, 00087 l, start, end, haltingTimeThresholdM, 00088 haltingSpeedThresholdM, jamDistThresholdM); 00089 } 00090 00091 00092 /* ------------------------------------------------------------------------- 00093 * GUI_E2_ZS_CollectorOverLanes::MyWrapper-methods 00094 * ----------------------------------------------------------------------- */ 00095 GUI_E2_ZS_CollectorOverLanes::MyWrapper::MyWrapper( 00096 GUI_E2_ZS_CollectorOverLanes& detector, 00097 const LaneDetMap& detectors) 00098 : GUIDetectorWrapper("E2OverLanes detector", detector.getID()), 00099 myDetector(detector) { 00100 for (LaneDetMap::const_iterator i = detectors.begin(); i != detectors.end(); ++i) { 00101 MSLane* l = (*i).first; 00102 GUIEdge& edge = static_cast<GUIEdge&>(l->getEdge()); 00103 GUILaneWrapper& w = edge.getLaneGeometry(l); 00104 GUI_E2_ZS_Collector* c = static_cast<GUI_E2_ZS_Collector*>((*i).second); 00105 GUIDetectorWrapper* dw = c->buildDetectorGUIRepresentation(); 00106 mySubWrappers.push_back(dw); 00107 myBoundary.add(dw->getCenteringBoundary()); 00108 } 00109 } 00110 00111 00112 GUI_E2_ZS_CollectorOverLanes::MyWrapper::~MyWrapper() { 00113 for (std::vector<GUIDetectorWrapper*>::iterator i = mySubWrappers.begin(); i != mySubWrappers.end(); ++i) { 00114 delete(*i); 00115 } 00116 } 00117 00118 00119 Boundary 00120 GUI_E2_ZS_CollectorOverLanes::MyWrapper::getCenteringBoundary() const { 00121 Boundary b(myBoundary); 00122 return b; 00123 } 00124 00125 00126 GUIParameterTableWindow* 00127 GUI_E2_ZS_CollectorOverLanes::MyWrapper::getParameterWindow(GUIMainWindow& app, 00128 GUISUMOAbstractView&) { 00129 GUIParameterTableWindow* ret = new GUIParameterTableWindow(app, *this, 12); 00130 // add items 00131 /* 00132 myMkExistingItem(*ret, "density [?]", E2::DENSITY); 00133 myMkExistingItem(*ret, "jam lengths [veh]", E2::MAX_JAM_LENGTH_IN_VEHICLES); 00134 myMkExistingItem(*ret, "jam length [m]", E2::MAX_JAM_LENGTH_IN_METERS); 00135 myMkExistingItem(*ret, "jam len sum [veh]", E2::JAM_LENGTH_SUM_IN_VEHICLES); 00136 myMkExistingItem(*ret, "jam len sum [m]", E2::JAM_LENGTH_SUM_IN_METERS); 00137 myMkExistingItem(*ret, "queue length [veh]", E2::QUEUE_LENGTH_AHEAD_OF_TRAFFIC_LIGHTS_IN_VEHICLES); 00138 myMkExistingItem(*ret, "queue length [m]", E2::QUEUE_LENGTH_AHEAD_OF_TRAFFIC_LIGHTS_IN_METERS); 00139 myMkExistingItem(*ret, "vehicles [veh]", E2::N_VEHICLES); 00140 myMkExistingItem(*ret, "occupancy degree [?]", E2::OCCUPANCY_DEGREE); 00141 myMkExistingItem(*ret, "space mean speed [?]", E2::SPACE_MEAN_SPEED); 00142 myMkExistingItem(*ret, "halting duration [?]", E2::CURRENT_HALTING_DURATION_SUM_PER_VEHICLE); 00143 */ 00144 // 00145 ret->mkItem("length [m]", false, myDetector.getLength()); 00146 /* 00147 ret->mkItem("position [m]", false, 00148 myDetector.getStartPos());*/ 00149 // ret->mkItem("", false, myDetector.getStartLaneID()); 00150 // close building 00151 ret->closeBuilding(); 00152 return ret; 00153 } 00154 00155 00156 /* 00157 void 00158 GUI_E2_ZS_CollectorOverLanes::MyWrapper::myMkExistingItem(GUIParameterTableWindow &ret, 00159 const std::string &name, 00160 E2::DetType type) 00161 { 00162 if (!myDetector.hasDetector(type)) { 00163 return; 00164 } 00165 MyValueRetriever *binding = 00166 new MyValueRetriever(myDetector, type, 1); 00167 ret.mkItem(name.c_str(), true, binding); 00168 } 00169 */ 00170 00171 00172 void 00173 GUI_E2_ZS_CollectorOverLanes::MyWrapper::drawGL(const GUIVisualizationSettings& s) const { 00174 for (std::vector<GUIDetectorWrapper*>::const_iterator i = mySubWrappers.begin(); i != mySubWrappers.end(); ++i) { 00175 (*i)->drawGL(s); 00176 } 00177 } 00178 00179 00180 GUI_E2_ZS_CollectorOverLanes& 00181 GUI_E2_ZS_CollectorOverLanes::MyWrapper::getLoop() { 00182 return myDetector; 00183 } 00184 00185 00186 00187 /****************************************************************************/ 00188