SUMO - Simulation of Urban MObility
GUIInstantInductLoop.cpp
Go to the documentation of this file.
1 /****************************************************************************/
9 // The gui-version of the MSInstantInductLoop
10 /****************************************************************************/
11 // SUMO, Simulation of Urban MObility; see http://sumo.dlr.de/
12 // Copyright (C) 2003-2016 DLR (http://www.dlr.de/) and contributors
13 /****************************************************************************/
14 //
15 // This file is part of SUMO.
16 // SUMO is free software: you can redistribute it and/or modify
17 // it under the terms of the GNU General Public License as published by
18 // the Free Software Foundation, either version 3 of the License, or
19 // (at your option) any later version.
20 //
21 /****************************************************************************/
22 
23 
24 // ===========================================================================
25 // included modules
26 // ===========================================================================
27 #ifdef _MSC_VER
28 #include <windows_config.h>
29 #else
30 #include <config.h>
31 #endif
32 
35 #include "GUIInstantInductLoop.h"
36 #include <utils/gui/div/GLHelper.h>
40 #include <microsim/MSLane.h>
41 #include "GUIEdge.h"
43 
44 #ifdef CHECK_MEMORY_LEAKS
45 #include <foreign/nvwa/debug_new.h>
46 #endif // CHECK_MEMORY_LEAKS
47 
48 
49 // ===========================================================================
50 // method definitions
51 // ===========================================================================
52 /* -------------------------------------------------------------------------
53  * GUIInstantInductLoop-methods
54  * ----------------------------------------------------------------------- */
56  MSLane* const lane, SUMOReal positionInMeters)
57  : MSInstantInductLoop(id, od, lane, positionInMeters) {}
58 
59 
61 
62 
65  return new MyWrapper(*this, myPosition);
66 }
67 
68 
69 /* -------------------------------------------------------------------------
70  * GUIInstantInductLoop::MyWrapper-methods
71  * ----------------------------------------------------------------------- */
73  : GUIDetectorWrapper("instant induct loop", detector.getID()),
74  myDetector(detector), myPosition(pos) {
79 }
80 
81 
83 
84 
88  b.grow(20);
89  return b;
90 }
91 
92 
93 
96  GUISUMOAbstractView& /*parent !!! recheck this - never needed?*/) {
97  GUIParameterTableWindow* ret = new GUIParameterTableWindow(app, *this, 7);
98  // add items
99  // parameter
100  ret->mkItem("position [m]", false, myPosition);
101  ret->mkItem("lane", false, myDetector.getLane()->getID());
102  // values
103  // close building
104  ret->closeBuilding();
105  return ret;
106 }
107 
108 
109 void
111  glPushName(getGlID());
112  SUMOReal width = (SUMOReal) 2.0 * s.scale;
113  glLineWidth(1.0);
114  const SUMOReal exaggeration = s.addSize.getExaggeration(s);
115  // shape
116  glColor3d(1, 0, 1);
117  glPushMatrix();
118  glTranslated(0, 0, getType());
119  glTranslated(myFGPosition.x(), myFGPosition.y(), 0);
120  glRotated(myFGRotation, 0, 0, 1);
121  glScaled(exaggeration, exaggeration, 1);
122  glBegin(GL_QUADS);
123  glVertex2d(0 - 1.0, 2);
124  glVertex2d(-1.0, -2);
125  glVertex2d(1.0, -2);
126  glVertex2d(1.0, 2);
127  glEnd();
128  glTranslated(0, 0, .01);
129  glBegin(GL_LINES);
130  glVertex2d(0, 2 - .1);
131  glVertex2d(0, -2 + .1);
132  glEnd();
133 
134  // outline
135  if (width * exaggeration > 1) {
136  glColor3d(1, 1, 1);
137  glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
138  glBegin(GL_QUADS);
139  glVertex2f(0 - 1.0, 2);
140  glVertex2f(-1.0, -2);
141  glVertex2f(1.0, -2);
142  glVertex2f(1.0, 2);
143  glEnd();
144  glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
145  }
146 
147  // position indicator
148  if (width * exaggeration > 1) {
149  glRotated(90, 0, 0, -1);
150  glColor3d(1, 1, 1);
151  glBegin(GL_LINES);
152  glVertex2d(0, 1.7);
153  glVertex2d(0, -1.7);
154  glEnd();
155  }
156  glPopMatrix();
157  drawName(getCenteringBoundary().getCenter(), s.scale, s.addName);
158  glPopName();
159 }
160 
161 
164  return myDetector;
165 }
166 
167 
168 
169 /****************************************************************************/
170 
SUMOReal getExaggeration(const GUIVisualizationSettings &s, SUMOReal factor=20) const
return the drawing size including exaggeration and constantSize values
MyWrapper(GUIInstantInductLoop &detector, SUMOReal pos)
Constructor.
GUIInstantInductLoop(const std::string &id, OutputDevice &od, MSLane *const lane, SUMOReal positionInMeters)
Constructor.
GUIVisualizationTextSettings addName
void drawGL(const GUIVisualizationSettings &s) const
Draws the object.
Stores the information about how to visualize structures.
GUIParameterTableWindow * getParameterWindow(GUIMainWindow &app, GUISUMOAbstractView &parent)
Returns an own parameter window.
An instantaneous induction loop.
Boundary myBoundary
The detector&#39;s boundary.
const Position geometryPositionAtOffset(SUMOReal offset, SUMOReal lateralOffset=0) const
Definition: MSLane.h:439
SUMOReal x() const
Returns the x-position.
Definition: Position.h:63
GUIGlID getGlID() const
Returns the numerical id of the object.
A class that stores a 2D geometrical boundary.
Definition: Boundary.h:48
const MSLane * getLane() const
Returns the lane the reminder works on.
const SUMOReal myPosition
Detector&#39;s position on lane [m].
SUMOReal scale
information about a lane&#39;s width (temporary, used for a single view)
SUMOReal myFGRotation
The rotation in full-geometry mode.
GUIInstantInductLoop & myDetector
The wrapped detector.
const std::string & getID() const
Returns the id.
Definition: Named.h:66
GUIVisualizationSizeSettings addSize
GUIGlObjectType getType() const
Returns the type of the object as coded in GUIGlObjectType.
SUMOReal myPosition
The position on the lane.
Boundary getCenteringBoundary() const
Returns the boundary to which the view shall be centered in order to show the object.
GUIInstantInductLoop & getLoop()
Returns the detector itself.
~GUIInstantInductLoop()
Destructor.
void drawName(const Position &pos, const SUMOReal scale, const GUIVisualizationTextSettings &settings, const SUMOReal angle=0) const
draw name of item
SUMOReal rotationDegreeAtOffset(SUMOReal pos) const
Returns the rotation at the given length.
void add(SUMOReal x, SUMOReal y)
Makes the boundary include the given coordinate.
Definition: Boundary.cpp:76
Boundary & grow(SUMOReal by)
extends the boundary by the given amount
Definition: Boundary.cpp:201
The gui-version of the MSInstantInductLoop.
A MSInductLoop-visualiser.
SUMOReal y() const
Returns the y-position.
Definition: Position.h:68
const PositionVector & getShape() const
Returns this lane&#39;s shape.
Definition: MSLane.h:422
Static storage of an output device and its base (abstract) implementation.
Definition: OutputDevice.h:71
#define SUMOReal
Definition: config.h:213
Position myFGPosition
The position in full-geometry mode.
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:79
A window containing a gl-object&#39;s parameter.
virtual GUIDetectorWrapper * buildDetectorGUIRepresentation()
Returns this detector&#39;s visualisation-wrapper.