SUMO - Simulation of Urban MObility
GUI_E2_ZS_Collector.cpp
Go to the documentation of this file.
1 /****************************************************************************/
10 // The gui-version of the MS_E2_ZS_Collector
11 /****************************************************************************/
12 // SUMO, Simulation of Urban MObility; see http://sumo.dlr.de/
13 // Copyright (C) 2001-2015 DLR (http://www.dlr.de/) and contributors
14 /****************************************************************************/
15 //
16 // This file is part of SUMO.
17 // SUMO is free software: you can redistribute it and/or modify
18 // it under the terms of the GNU General Public License as published by
19 // the Free Software Foundation, either version 3 of the License, or
20 // (at your option) any later version.
21 //
22 /****************************************************************************/
23 
24 
25 // ===========================================================================
26 // included modules
27 // ===========================================================================
28 #ifdef _MSC_VER
29 #include <windows_config.h>
30 #else
31 #include <config.h>
32 #endif
33 
36 #include "GUI_E2_ZS_Collector.h"
37 #include <utils/gui/div/GLHelper.h>
38 #include <utils/geom/Line.h>
39 #include <utils/geom/GeomHelper.h>
42 #include "GUIEdge.h"
44 
45 #ifdef CHECK_MEMORY_LEAKS
46 #include <foreign/nvwa/debug_new.h>
47 #endif // CHECK_MEMORY_LEAKS
48 
49 
50 // ===========================================================================
51 // method definitions
52 // ===========================================================================
53 /* -------------------------------------------------------------------------
54  * GUI_E2_ZS_Collector-methods
55  * ----------------------------------------------------------------------- */
57  MSLane* const lane, SUMOReal startPos, SUMOReal detLength,
58  SUMOTime haltingTimeThreshold, SUMOReal haltingSpeedThreshold,
59  SUMOReal jamDistThreshold)
60  : MSE2Collector(id, usage, lane, startPos, detLength, haltingTimeThreshold,
61  haltingSpeedThreshold, jamDistThreshold) {}
62 
63 
64 
66 
67 
70  return new MyWrapper(*this);
71 }
72 
73 
74 
75 /* -------------------------------------------------------------------------
76  * GUI_E2_ZS_Collector::MyWrapper-methods
77  * ----------------------------------------------------------------------- */
79  : GUIDetectorWrapper("E2 detector", detector.getID()),
80  myDetector(detector) {
81  const PositionVector& v = detector.getLane()->getShape();
82  Line l(v.front(), v.back());
83  // build geometry
84  myFullGeometry = v.getSubpart(detector.getStartPos(), detector.getEndPos());
85  //
86  myShapeRotations.reserve(myFullGeometry.size() - 1);
87  myShapeLengths.reserve(myFullGeometry.size() - 1);
88  int e = (int) myFullGeometry.size() - 1;
89  for (int i = 0; i < e; ++i) {
90  const Position& f = myFullGeometry[i];
91  const Position& s = myFullGeometry[i + 1];
92  myShapeLengths.push_back(f.distanceTo(s));
93  myShapeRotations.push_back((SUMOReal) atan2((s.x() - f.x()), (f.y() - s.y())) * (SUMOReal) 180.0 / (SUMOReal) PI);
94  }
95  //
96  myBoundary = myFullGeometry.getBoxBoundary();
97 }
98 
99 
101 
102 
103 Boundary
105  Boundary b(myBoundary);
106  b.grow(20);
107  return b;
108 }
109 
110 
115  new GUIParameterTableWindow(app, *this, 13);
116  // add items
117  // parameter
118  ret->mkItem("length [m]", false, myDetector.getEndPos() - myDetector.getStartPos());
119  ret->mkItem("position [m]", false, myDetector.getStartPos());
120  ret->mkItem("lane", false, myDetector.getLane()->getID());
121  // values
122  ret->mkItem("vehicles [#]", true,
124  ret->mkItem("occupancy [%]", true,
126  ret->mkItem("mean speed [m/s]", true,
128  ret->mkItem("mean vehicle length [m]", true,
130  ret->mkItem("jam number [#]", true,
132  ret->mkItem("max jam length [veh]", true,
134  ret->mkItem("max jam length [m]", true,
136  ret->mkItem("jam length sum [veh]", true,
138  ret->mkItem("jam length sum [m]", true,
140  ret->mkItem("started halts [#]", true,
142  // close building
143  ret->closeBuilding();
144  return ret;
145 }
146 
147 
148 void
150  glPushName(getGlID());
151  glPushMatrix();
152  glTranslated(0, 0, getType());
153  SUMOReal dwidth = 1;
154  const SUMOReal exaggeration = s.addSize.getExaggeration(s);
155  if (myDetector.getUsageType() == DU_TL_CONTROL) {
156  dwidth = (SUMOReal) 0.3;
157  glColor3d(0, (SUMOReal) .6, (SUMOReal) .8);
158  } else {
159  glColor3d(0, (SUMOReal) .8, (SUMOReal) .8);
160  }
161  SUMOReal width = (SUMOReal) 2.0 * s.scale;
162  if (width * exaggeration > 1.0) {
163  GLHelper::drawBoxLines(myFullGeometry, myShapeRotations, myShapeLengths, dwidth * exaggeration);
164  } else {
165  int e = (int) myFullGeometry.size() - 1;
166  for (int i = 0; i < e; ++i) {
167  GLHelper::drawLine(myFullGeometry[i], myShapeRotations[i], myShapeLengths[i]);
168  }
169  }
170  glPopMatrix();
171  drawName(getCenteringBoundary().getCenter(), s.scale, s.addName);
172  glPopName();
173 }
174 
175 
178  return myDetector;
179 }
180 
181 
182 
183 /****************************************************************************/
184 
Boundary myBoundary
The detector's boundary.
unsigned getCurrentJamNumber() const
Returns the current number of jams.
GUIVisualizationTextSettings addName
unsigned getCurrentStartedHalts() const
Returns the length of all jams in meters.
An areal (along a single lane) detector.
Definition: MSE2Collector.h:79
SUMOReal getCurrentMeanLength() const
Returns the mean vehicle length of vehicles currently on the detector.
Stores the information about how to visualize structures.
~GUI_E2_ZS_Collector()
Destructor.
unsigned getCurrentMaxJamLengthInVehicles() const
Returns the length in vehicles of the currently largest jam.
static void drawBoxLines(const PositionVector &geom, const std::vector< SUMOReal > &rots, const std::vector< SUMOReal > &lengths, SUMOReal width, int cornerDetail=0, SUMOReal offset=0)
Draws thick lines.
Definition: GLHelper.cpp:176
std::vector< SUMOReal > myShapeRotations
A sequence of rotations in full-geometry mode.
PositionVector myFullGeometry
A sequence of positions in full-geometry mode.
Boundary getCenteringBoundary() const
Returns the boundary to which the view shall be centered in order to show the object.
GUI_E2_ZS_Collector & getDetector()
Returns the detector itself.
SUMOReal getCurrentJamLengthInMeters() const
Returns the length of all jams in meters.
GUI_E2_ZS_Collector(const std::string &id, DetectorUsage usage, MSLane *const lane, SUMOReal startPos, SUMOReal detLength, SUMOTime haltingTimeThreshold, SUMOReal haltingSpeedThreshold, SUMOReal jamDistThreshold)
Constructor.
void drawGL(const GUIVisualizationSettings &s) const
Draws the object.
SUMOReal distanceTo(const Position &p2) const
returns the euclidean distance in 3 dimension
Definition: Position.h:229
virtual GUIDetectorWrapper * buildDetectorGUIRepresentation()
Returns the wrapper for this detector.
SUMOReal x() const
Returns the x-position.
Definition: Position.h:63
A class that stores a 2D geometrical boundary.
Definition: Boundary.h:48
const MSLane * getLane() const
Returns the lane the reminder works on.
GUIParameterTableWindow * getParameterWindow(GUIMainWindow &app, GUISUMOAbstractView &parent)
Returns an own parameter window.
SUMOReal scale
information about a lane's width (temporary, used for a single view)
GUIVisualizationSizeSettings addSize
MyWrapper(GUI_E2_ZS_Collector &detector)
Constructor.
#define PI
Definition: polyfonts.c:61
A point in 2D or 3D with translation and scaling methods.
Definition: Position.h:46
A list of positions.
SUMOReal getStartPos() const
Returns the begin position of the detector.
std::vector< SUMOReal > myShapeLengths
A sequence of lengths in full-geometry mode.
SUMOReal getCurrentMeanSpeed() const
Returns the mean vehicle speed of vehicles currently on the detector.
Definition: Line.h:51
Boundary & grow(SUMOReal by)
extends the boundary by the given amount
Definition: Boundary.cpp:200
SUMOReal getCurrentOccupancy() const
Returns the curent detector occupancy.
SUMOReal y() const
Returns the y-position.
Definition: Position.h:68
unsigned getCurrentVehicleNumber() const
Returns the number of vehicles currently on the detector.
int SUMOTime
Definition: SUMOTime.h:43
The gui-version of the MS_E2_ZS_Collector.
const PositionVector & getShape() const
Returns this lane's shape.
Definition: MSLane.h:323
static void drawLine(const Position &beg, SUMOReal rot, SUMOReal visLength)
Draws a thin line.
Definition: GLHelper.cpp:269
SUMOReal getCurrentMaxJamLengthInMeters() const
Returns the length in meters of the currently largest jam.
unsigned getCurrentJamLengthInVehicles() const
Returns the length of all jams in vehicles.
#define SUMOReal
Definition: config.h:218
void mkItem(const char *name, bool dynamic, ValueSource< unsigned > *src)
Adds a row which obtains its value from an unsigned-ValueSource.
void closeBuilding()
Closes the building of the table.
Representation of a lane in the micro simulation.
Definition: MSLane.h:77
A window containing a gl-object's parameter.
PositionVector getSubpart(SUMOReal beginOffset, SUMOReal endOffset) const
SUMOReal getExaggeration(const GUIVisualizationSettings &s) const
return the drawing size including exaggeration and constantSize values
SUMOReal getEndPos() const
Returns the end position of the detector.