GUI_E2_ZS_CollectorOverLanes.cpp
Go to the documentation of this file.00001
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
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>
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
00053
00054
00055
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
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
00137
00138
00139
00140
00141
00142
00143
00144
00145
00146
00147
00148
00149
00150
00151 ret->mkItem("length [m]", false, myDetector.getLength());
00152
00153
00154
00155
00156
00157 ret->closeBuilding();
00158 return ret;
00159 }
00160
00161
00162
00163
00164
00165
00166
00167
00168
00169
00170
00171
00172
00173
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