Eclipse SUMO - Simulation of Urban MObility
GUIE2Collector.cpp
Go to the documentation of this file.
1 /****************************************************************************/
2 // Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.org/sumo
3 // Copyright (C) 2001-2019 German Aerospace Center (DLR) and others.
4 // This program and the accompanying materials
5 // are made available under the terms of the Eclipse Public License v2.0
6 // which accompanies this distribution, and is available at
7 // http://www.eclipse.org/legal/epl-v20.html
8 // SPDX-License-Identifier: EPL-2.0
9 /****************************************************************************/
18 // The gui-version of the MSE2Collector
19 /****************************************************************************/
20 
21 
22 // ===========================================================================
23 // included modules
24 // ===========================================================================
25 #include <config.h>
26 
29 #include "GUIE2Collector.h"
30 #include <utils/gui/div/GLHelper.h>
31 #include <utils/geom/GeomHelper.h>
34 #include "GUIEdge.h"
36 
37 
38 // ===========================================================================
39 // method definitions
40 // ===========================================================================
41 /* -------------------------------------------------------------------------
42  * GUIE2Collector-methods
43  * ----------------------------------------------------------------------- */
44 GUIE2Collector::GUIE2Collector(const std::string& id, DetectorUsage usage,
45  MSLane* lane, double startPos, double endPos, double detLength,
46  SUMOTime haltingTimeThreshold, double haltingSpeedThreshold,
47  double jamDistThreshold, const std::string& vTypes, bool showDetector)
48  : MSE2Collector(id, usage, lane, startPos, endPos, detLength, haltingTimeThreshold,
49  haltingSpeedThreshold, jamDistThreshold, vTypes),
50  myShowDetectorInGUI(showDetector) {}
51 
52 GUIE2Collector::GUIE2Collector(const std::string& id, DetectorUsage usage,
53  std::vector<MSLane*> lanes, double startPos, double endPos,
54  SUMOTime haltingTimeThreshold, double haltingSpeedThreshold,
55  double jamDistThreshold, const std::string& vTypes, bool showDetector)
56  : MSE2Collector(id, usage, lanes, startPos, endPos, haltingTimeThreshold,
57  haltingSpeedThreshold, jamDistThreshold, vTypes),
58  myShowDetectorInGUI(showDetector) {}
59 
61 
62 
65  return new MyWrapper(*this);
66 }
67 
68 // -------------------------------------------------------------------------
69 // GUIE2Collector::MyWrapper-methods
70 // -------------------------------------------------------------------------
71 
73  GUIDetectorWrapper(GLO_E2DETECTOR, detector.getID()),
74  myDetector(detector) {
75  // collect detector shape into one vector (v)
77  const std::vector<MSLane*> lanes = detector.getLanes();
78  double detectorLength = detector.getLength();
79  for (std::vector<MSLane*>::const_iterator li = lanes.begin(); li != lanes.end(); ++li) {
80  const PositionVector& shape = (*li)->getShape();
81  // account for gaps between lanes (e.g. in networks without internal lanes)
82  if (v.size() > 0) {
83  detectorLength += v.back().distanceTo2D(shape.front());
84  }
85  v.insert(v.end(), shape.begin(), shape.end());
86  }
87  // build geometry
89  lanes.front()->interpolateLanePosToGeometryPos(detector.getStartPos()),
90  lanes.back()->interpolateLanePosToGeometryPos(detector.getStartPos() + detectorLength));
91  //
92  myShapeRotations.reserve(myFullGeometry.size() - 1);
93  myShapeLengths.reserve(myFullGeometry.size() - 1);
94  int e = (int) myFullGeometry.size() - 1;
95  for (int i = 0; i < e; ++i) {
96  const Position& f = myFullGeometry[i];
97  const Position& s = myFullGeometry[i + 1];
98  myShapeLengths.push_back(f.distanceTo(s));
99  myShapeRotations.push_back((double) atan2((s.x() - f.x()), (f.y() - s.y())) * (double) 180.0 / (double) M_PI);
100  }
101  //
103 }
104 
105 
107 
108 
109 Boundary
111  Boundary b(myBoundary);
112  b.grow(20);
113  return b;
114 }
115 
116 
121  new GUIParameterTableWindow(app, *this, 13);
122  // add items
123  // parameter
124  ret->mkItem("length [m]", false, myDetector.getLength());
125  ret->mkItem("position [m]", false, myDetector.getStartPos());
126  ret->mkItem("lane", false, myDetector.getLane()->getID());
127  // values
128  ret->mkItem("vehicles [#]", true,
130  ret->mkItem("occupancy [%]", true,
132  ret->mkItem("mean speed [m/s]", true,
134  ret->mkItem("mean vehicle length [m]", true,
136  ret->mkItem("jam number [#]", true,
138  ret->mkItem("max jam length [veh]", true,
140  ret->mkItem("max jam length [m]", true,
142  ret->mkItem("jam length sum [veh]", true,
144  ret->mkItem("jam length sum [m]", true,
146  ret->mkItem("started halts [#]", true,
148  // close building
149  ret->closeBuilding();
150  return ret;
151 }
152 
153 
154 void
156  if (!myDetector.myShowDetectorInGUI) {
157  return;
158  }
159  glPushName(getGlID());
160  glPushMatrix();
161  glTranslated(0, 0, getType());
162  double dwidth = 1;
163  const double exaggeration = s.addSize.getExaggeration(s, this);
164  if (exaggeration > 0) {
165  if (myDetector.getUsageType() == DU_TL_CONTROL) {
166  dwidth = (double) 0.3;
167  glColor3d(0, (double) .6, (double) .8);
168  } else {
169  glColor3d(0, (double) .8, (double) .8);
170  }
171  double width = (double) 2.0 * s.scale;
172  if (width * exaggeration > 1.0) {
173  GLHelper::drawBoxLines(myFullGeometry, myShapeRotations, myShapeLengths, dwidth * exaggeration);
174  } else {
175  int e = (int) myFullGeometry.size() - 1;
176  for (int i = 0; i < e; ++i) {
177  GLHelper::drawLine(myFullGeometry[i], myShapeRotations[i], myShapeLengths[i]);
178  }
179  }
180  }
181  glPopMatrix();
182  drawName(getCenteringBoundary().getCenter(), s.scale, s.addName);
183  glPopName();
184 }
185 
186 
189  return myDetector;
190 }
191 
192 
193 
194 /****************************************************************************/
195 
GUIGlObject.h
GUIParameterTableWindow
A window containing a gl-object's parameter.
Definition: GUIParameterTableWindow.h:63
MSE2Collector::getCurrentJamLengthInVehicles
int getCurrentJamLengthInVehicles() const
Returns the length of all jams in vehicles.
Definition: MSE2Collector.h:450
GUISUMOAbstractView
Definition: GUISUMOAbstractView.h:73
MSE2Collector::getCurrentMeanLength
double getCurrentMeanLength() const
Returns the mean vehicle length of vehicles currently on the detector.
Definition: MSE2Collector.h:430
MSLane
Representation of a lane in the micro simulation.
Definition: MSLane.h:83
MSE2Collector::getCurrentOccupancy
double getCurrentOccupancy() const
Returns the current detector occupancy.
Definition: MSE2Collector.h:420
GUIParameterTableWindow.h
GUIDetectorWrapper
Definition: GUIDetectorWrapper.h:43
GLHelper::drawBoxLines
static void drawBoxLines(const PositionVector &geom, const std::vector< double > &rots, const std::vector< double > &lengths, double width, int cornerDetail=0, double offset=0)
Draws thick lines.
Definition: GLHelper.cpp:182
PositionVector::getSubpart
PositionVector getSubpart(double beginOffset, double endOffset) const
get subpart of a position vector
Definition: PositionVector.cpp:698
GUIE2Collector::MyWrapper::myBoundary
Boundary myBoundary
The detector's boundary.
Definition: GUIE2Collector.h:159
SUMOTime
long long int SUMOTime
Definition: SUMOTime.h:35
MSE2Collector
An areal detector corresponding to a sequence of consecutive lanes.
Definition: MSE2Collector.h:81
GLHelper.h
MSE2Collector::getLength
double getLength() const
Returns the length of the detector.
Definition: MSE2Collector.h:386
PositionVector
A list of positions.
Definition: PositionVector.h:46
GUIE2Collector::MyWrapper::myShapeLengths
std::vector< double > myShapeLengths
A sequence of lengths in full-geometry mode.
Definition: GUIE2Collector.h:165
GUIE2Collector::MyWrapper
Definition: GUIE2Collector.h:111
MSE2Collector::getStartPos
double getStartPos() const
Returns the begin position of the detector.
Definition: MSE2Collector.h:369
PositionVector::getBoxBoundary
Boundary getBoxBoundary() const
Returns a boundary enclosing this list of lines.
Definition: PositionVector.cpp:382
GUIParameterTableWindow::closeBuilding
void closeBuilding(const Parameterised *p=0)
Closes the building of the table.
Definition: GUIParameterTableWindow.cpp:220
GUIE2Collector::MyWrapper::drawGL
void drawGL(const GUIVisualizationSettings &s) const
Draws the object.
Definition: GUIE2Collector.cpp:155
MSE2Collector::getCurrentMeanSpeed
double getCurrentMeanSpeed() const
Returns the mean vehicle speed of vehicles currently on the detector.
Definition: MSE2Collector.h:425
GUIVisualizationSettings::addName
GUIVisualizationTextSettings addName
Definition: GUIVisualizationSettings.h:582
GUIE2Collector::GUIE2Collector
GUIE2Collector(const std::string &id, DetectorUsage usage, MSLane *lane, double startPos, double endPos, double detLength, SUMOTime haltingTimeThreshold, double haltingSpeedThreshold, double jamDistThreshold, const std::string &vTypes, bool showDetector)
Constructor with given end position and detector length.
Definition: GUIE2Collector.cpp:44
MSE2Collector::getCurrentJamNumber
int getCurrentJamNumber() const
Returns the current number of jams.
Definition: MSE2Collector.h:435
Position::distanceTo
double distanceTo(const Position &p2) const
returns the euclidean distance in 3 dimension
Definition: Position.h:234
GUIParameterTableWindow::mkItem
void mkItem(const char *name, bool dynamic, ValueSource< T > *src)
Adds a row which obtains its value from a ValueSource.
Definition: GUIParameterTableWindow.h:109
Boundary
A class that stores a 2D geometrical boundary.
Definition: Boundary.h:42
GUIVisualizationSettings::scale
double scale
information about a lane's width (temporary, used for a single view)
Definition: GUIVisualizationSettings.h:623
Position
A point in 2D or 3D with translation and scaling methods.
Definition: Position.h:39
Position::x
double x() const
Returns the x-position.
Definition: Position.h:57
GLHelper::drawLine
static void drawLine(const Position &beg, double rot, double visLength)
Draws a thin line.
Definition: GLHelper.cpp:274
MSE2Collector::getCurrentMaxJamLengthInVehicles
int getCurrentMaxJamLengthInVehicles() const
Returns the length in vehicles of the currently largest jam.
Definition: MSE2Collector.h:440
GUIE2Collector::~GUIE2Collector
~GUIE2Collector()
Destructor.
Definition: GUIE2Collector.cpp:60
DU_TL_CONTROL
Definition: MSDetectorFileOutput.h:54
GUIE2Collector::MyWrapper::getDetector
GUIE2Collector & getDetector()
Returns the detector itself.
Definition: GUIE2Collector.cpp:188
GUIE2Collector::buildDetectorGUIRepresentation
virtual GUIDetectorWrapper * buildDetectorGUIRepresentation()
Returns the wrapper for this detector.
Definition: GUIE2Collector.cpp:64
DetectorUsage
DetectorUsage
Definition: MSDetectorFileOutput.h:51
GLIncludes.h
MSE2Collector::getLanes
std::vector< MSLane * > getLanes()
Returns a vector containing pointers to the lanes covered by the detector ordered from its first to i...
Definition: MSE2Collector.cpp:589
FunctionBinding.h
GUIMainWindow
Definition: GUIMainWindow.h:47
Position::y
double y() const
Returns the y-position.
Definition: Position.h:62
M_PI
#define M_PI
Definition: odrSpiral.cpp:40
GUIE2Collector::MyWrapper::getParameterWindow
GUIParameterTableWindow * getParameterWindow(GUIMainWindow &app, GUISUMOAbstractView &parent)
Returns an own parameter window.
Definition: GUIE2Collector.cpp:118
GUIE2Collector::MyWrapper::getCenteringBoundary
Boundary getCenteringBoundary() const
Returns the boundary to which the view shall be centered in order to show the object.
Definition: GUIE2Collector.cpp:110
GUIEdge.h
MSE2Collector::getCurrentJamLengthInMeters
double getCurrentJamLengthInMeters() const
Returns the length of all jams in meters.
Definition: MSE2Collector.h:455
MSE2Collector::getCurrentMaxJamLengthInMeters
double getCurrentMaxJamLengthInMeters() const
Returns the length in meters of the currently largest jam.
Definition: MSE2Collector.h:445
config.h
GUIVisualizationSettings::addSize
GUIVisualizationSizeSettings addSize
Definition: GUIVisualizationSettings.h:580
MSE2Collector::getCurrentStartedHalts
int getCurrentStartedHalts() const
Returns the length of all jams in meters.
Definition: MSE2Collector.h:460
GUIE2Collector
The gui-version of the MSE2Collector.
Definition: GUIE2Collector.h:44
GeomHelper.h
MSE2Collector::getCurrentVehicleNumber
int getCurrentVehicleNumber() const
Returns the number of vehicles currently on the detector.
Definition: MSE2Collector.cpp:1387
Boundary::grow
Boundary & grow(double by)
extends the boundary by the given amount
Definition: Boundary.cpp:301
GUIE2Collector.h
GUIVisualizationSettings
Stores the information about how to visualize structures.
Definition: GUIVisualizationSettings.h:346
FunctionBinding
Definition: FunctionBinding.h:41
GUIE2Collector::MyWrapper::myShapeRotations
std::vector< double > myShapeRotations
A sequence of rotations in full-geometry mode.
Definition: GUIE2Collector.h:168
GUIE2Collector::MyWrapper::~MyWrapper
~MyWrapper()
Destrutor.
Definition: GUIE2Collector.cpp:106
GUIE2Collector::MyWrapper::myFullGeometry
PositionVector myFullGeometry
A sequence of positions in full-geometry mode.
Definition: GUIE2Collector.h:162
PositionVector.h
GLO_E2DETECTOR
a E2 detector
Definition: GUIGlObjectTypes.h:78
GUIVisualizationSizeSettings::getExaggeration
double getExaggeration(const GUIVisualizationSettings &s, const GUIGlObject *o, double factor=20) const
return the drawing size including exaggeration and constantSize values
Definition: GUIVisualizationSettings.cpp:212
GUIE2Collector::MyWrapper::MyWrapper
MyWrapper(GUIE2Collector &detector)
Constructor.
Definition: GUIE2Collector.cpp:72