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 2001-2010 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/geom/Position2DVector.h>
00032 #include "GUILaneWrapper.h"
00033 #include "GUI_E2_ZS_CollectorOverLanes.h"
00034 #include <utils/gui/globjects/GUIGlObjectStorage.h>
00035 #include <guisim/GUIEdge.h>
00036 #include <utils/gui/div/GLHelper.h>
00037 #include <utils/geom/Line2D.h>
00038 #include <utils/geom/GeomHelper.h>
00039 #include <utils/gui/div/GUIParameterTableWindow.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         MetersPerSecond 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::buildDetectorWrapper(GUIGlObjectStorage &,
00072         GUILaneWrapper &) {
00073     throw 1;
00074 }
00075 
00076 
00077 GUIDetectorWrapper *
00078 GUI_E2_ZS_CollectorOverLanes::buildDetectorWrapper(GUIGlObjectStorage &idStorage) {
00079     return new MyWrapper(*this, idStorage, myAlreadyBuild);
00080 }
00081 
00082 
00083 MSE2Collector *
00084 GUI_E2_ZS_CollectorOverLanes::buildCollector(size_t c, size_t r, MSLane *l,
00085         SUMOReal start, SUMOReal end) throw() {
00086     std::string id = makeID(myID, c, r);
00087     if (start+end<l->getLength()) {
00088         start = l->getLength() - end - (SUMOReal) 0.1;
00089     }
00090     return new GUI_E2_ZS_Collector(id, myUsage,
00091                                    l, start, end, haltingTimeThresholdM,
00092                                    haltingSpeedThresholdM, jamDistThresholdM);
00093 }
00094 
00095 
00096 /* -------------------------------------------------------------------------
00097  * GUI_E2_ZS_CollectorOverLanes::MyWrapper-methods
00098  * ----------------------------------------------------------------------- */
00099 GUI_E2_ZS_CollectorOverLanes::MyWrapper::MyWrapper(
00100     GUI_E2_ZS_CollectorOverLanes &detector,
00101     GUIGlObjectStorage &idStorage,
00102     const LaneDetMap &detectors) throw()
00103         : GUIDetectorWrapper(idStorage, "E2OverLanes detector:"+detector.getID()),
00104         myDetector(detector) {
00105     GLuint glID = idStorage.getUniqueID();
00106     for (LaneDetMap::const_iterator i=detectors.begin(); i!=detectors.end(); ++i) {
00107         MSLane *l = (*i).first;
00108         GUIEdge &edge = static_cast<GUIEdge&>(l->getEdge());
00109         GUILaneWrapper &w = edge.getLaneGeometry(l);
00110         GUI_E2_ZS_Collector *c = static_cast<GUI_E2_ZS_Collector*>((*i).second);
00111         GUIDetectorWrapper *dw = c->buildDetectorWrapper(idStorage, w, detector, glID);
00112         mySubWrappers.push_back(dw);
00113         myBoundary.add(dw->getCenteringBoundary());
00114     }
00115 }
00116 
00117 
00118 GUI_E2_ZS_CollectorOverLanes::MyWrapper::~MyWrapper() throw() {
00119     for (std::vector<GUIDetectorWrapper*>::iterator i=mySubWrappers.begin(); i!=mySubWrappers.end(); ++i) {
00120         delete(*i);
00121     }
00122 }
00123 
00124 
00125 Boundary
00126 GUI_E2_ZS_CollectorOverLanes::MyWrapper::getCenteringBoundary() const throw() {
00127     Boundary b(myBoundary);
00128     return b;
00129 }
00130 
00131 
00132 GUIParameterTableWindow *
00133 GUI_E2_ZS_CollectorOverLanes::MyWrapper::getParameterWindow(GUIMainWindow &app,
00134         GUISUMOAbstractView &) throw() {
00135     GUIParameterTableWindow *ret = new GUIParameterTableWindow(app, *this, 12);
00136     // add items
00137     /*
00138     myMkExistingItem(*ret, "density [?]", E2::DENSITY);
00139     myMkExistingItem(*ret, "jam lengths [veh]", E2::MAX_JAM_LENGTH_IN_VEHICLES);
00140     myMkExistingItem(*ret, "jam length [m]", E2::MAX_JAM_LENGTH_IN_METERS);
00141     myMkExistingItem(*ret, "jam len sum [veh]", E2::JAM_LENGTH_SUM_IN_VEHICLES);
00142     myMkExistingItem(*ret, "jam len sum [m]", E2::JAM_LENGTH_SUM_IN_METERS);
00143     myMkExistingItem(*ret, "queue length [veh]", E2::QUEUE_LENGTH_AHEAD_OF_TRAFFIC_LIGHTS_IN_VEHICLES);
00144     myMkExistingItem(*ret, "queue length [m]", E2::QUEUE_LENGTH_AHEAD_OF_TRAFFIC_LIGHTS_IN_METERS);
00145     myMkExistingItem(*ret, "vehicles [veh]", E2::N_VEHICLES);
00146     myMkExistingItem(*ret, "occupancy degree [?]", E2::OCCUPANCY_DEGREE);
00147     myMkExistingItem(*ret, "space mean speed [?]", E2::SPACE_MEAN_SPEED);
00148     myMkExistingItem(*ret, "halting duration [?]", E2::CURRENT_HALTING_DURATION_SUM_PER_VEHICLE);
00149     */
00150     //
00151     ret->mkItem("length [m]", false, myDetector.getLength());
00152     /*
00153     ret->mkItem("position [m]", false,
00154         myDetector.getStartPos());*/
00155 //    ret->mkItem("", false, myDetector.getStartLaneID());
00156     // close building
00157     ret->closeBuilding();
00158     return ret;
00159 }
00160 
00161 
00162 /*
00163 void
00164 GUI_E2_ZS_CollectorOverLanes::MyWrapper::myMkExistingItem(GUIParameterTableWindow &ret,
00165     const std::string &name,
00166     E2::DetType type)
00167 {
00168 if (!myDetector.hasDetector(type)) {
00169     return;
00170 }
00171 MyValueRetriever *binding =
00172     new MyValueRetriever(myDetector, type, 1);
00173 ret.mkItem(name.c_str(), true, binding);
00174 }
00175 */
00176 
00177 
00178 const std::string &
00179 GUI_E2_ZS_CollectorOverLanes::MyWrapper::getMicrosimID() const throw() {
00180     return myDetector.getID();
00181 }
00182 
00183 
00184 void
00185 GUI_E2_ZS_CollectorOverLanes::MyWrapper::drawGL(const GUIVisualizationSettings &s) const throw() {
00186     for (std::vector<GUIDetectorWrapper*>::const_iterator i=mySubWrappers.begin(); i!=mySubWrappers.end(); ++i) {
00187         (*i)->drawGL(s);
00188     }
00189 }
00190 
00191 
00192 GUI_E2_ZS_CollectorOverLanes &
00193 GUI_E2_ZS_CollectorOverLanes::MyWrapper::getLoop() {
00194     return myDetector;
00195 }
00196 
00197 
00198 
00199 /****************************************************************************/
00200 

Generated on Wed May 5 00:06:29 2010 for Sumo - Simulation of Urban MObility by  doxygen 1.5.6