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