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