SUMO - Simulation of Urban MObility

GUI_E2_ZS_CollectorOverLanes.cpp

Go to the documentation of this file.
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 
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Friends Defines