SUMO - Simulation of Urban MObility
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
GUIViewTraffic.cpp
Go to the documentation of this file.
1 /****************************************************************************/
11 // A view on the simulation; this view is a microscopic one
12 /****************************************************************************/
13 // SUMO, Simulation of Urban MObility; see http://sumo.dlr.de/
14 // Copyright (C) 2001-2014 DLR (http://www.dlr.de/) and contributors
15 /****************************************************************************/
16 //
17 // This file is part of SUMO.
18 // SUMO is free software: you can redistribute it and/or modify
19 // it under the terms of the GNU General Public License as published by
20 // the Free Software Foundation, either version 3 of the License, or
21 // (at your option) any later version.
22 //
23 /****************************************************************************/
24 
25 
26 // ===========================================================================
27 // included modules
28 // ===========================================================================
29 #ifdef _MSC_VER
30 #include <windows_config.h>
31 #else
32 #include <config.h>
33 #endif
34 
35 #include <iostream>
36 #include <utility>
37 #include <cmath>
38 #include <limits>
39 #include <guisim/GUINet.h>
40 #include <guisim/GUIEdge.h>
41 #include <guisim/GUILane.h>
42 #include <guisim/GUIVehicle.h>
43 #include <microsim/MSGlobals.h>
44 #include <microsim/MSEdge.h>
45 #include <microsim/MSLane.h>
48 #include <utils/common/RGBColor.h>
50 #include <utils/shapes/Polygon.h>
51 #include "GUISUMOViewParent.h"
52 #include "GUIViewTraffic.h"
65 #include <utils/gui/div/GLHelper.h>
67 
68 #ifdef CHECK_MEMORY_LEAKS
69 #include <foreign/nvwa/debug_new.h>
70 #endif // CHECK_MEMORY_LEAKS
71 
72 
73 // ===========================================================================
74 // member method definitions
75 // ===========================================================================
77  FXComposite* p,
78  GUIMainWindow& app,
79  GUISUMOViewParent* parent,
80  GUINet& net, FXGLVisual* glVis,
81  FXGLCanvas* share) :
82  GUISUMOAbstractView(p, app, parent, net.getVisualisationSpeedUp(), glVis, share),
83  myTrackedID(-1) {}
84 
85 
87 }
88 
89 
90 void
92  // build coloring tools
93  {
94  const std::vector<std::string>& names = gSchemeStorage.getNames();
95  for (std::vector<std::string>::const_iterator i = names.begin(); i != names.end(); ++i) {
96  v.getColoringSchemesCombo().appendItem((*i).c_str());
97  if ((*i) == myVisualizationSettings->name) {
98  v.getColoringSchemesCombo().setCurrentItem(v.getColoringSchemesCombo().getNumItems() - 1);
99  }
100  }
101  v.getColoringSchemesCombo().setNumVisible(5);
102  }
103  // for junctions
104  new FXButton(v.getLocatorPopup(),
105  "\tLocate Junction\tLocate a junction within the network.",
107  ICON_ABOVE_TEXT | FRAME_THICK | FRAME_RAISED);
108  // for edges
109  new FXButton(v.getLocatorPopup(),
110  "\tLocate Street\tLocate a street within the network.",
112  ICON_ABOVE_TEXT | FRAME_THICK | FRAME_RAISED);
113 
114  if (!MSGlobals::gUseMesoSim) { // there are no gui-vehicles in mesosim
115  // for vehicles
116  new FXButton(v.getLocatorPopup(),
117  "\tLocate Vehicle\tLocate a vehicle within the network.",
119  ICON_ABOVE_TEXT | FRAME_THICK | FRAME_RAISED);
120  }
121  // for tls
122  new FXButton(v.getLocatorPopup(),
123  "\tLocate TLS\tLocate a tls within the network.",
125  ICON_ABOVE_TEXT | FRAME_THICK | FRAME_RAISED);
126  // for additional stuff
127  new FXButton(v.getLocatorPopup(),
128  "\tLocate Additional\tLocate an additional structure within the network.",
130  ICON_ABOVE_TEXT | FRAME_THICK | FRAME_RAISED);
131  // for pois
132  new FXButton(v.getLocatorPopup(),
133  "\tLocate PoI\tLocate a PoI within the network.",
135  ICON_ABOVE_TEXT | FRAME_THICK | FRAME_RAISED);
136  // for polygons
137  new FXButton(v.getLocatorPopup(),
138  "\tLocate Polygon\tLocate a Polygon within the network.",
140  ICON_ABOVE_TEXT | FRAME_THICK | FRAME_RAISED);
141 }
142 
143 
144 bool
145 GUIViewTraffic::setColorScheme(const std::string& name) {
146  if (!gSchemeStorage.contains(name)) {
147  return false;
148  }
149  if (myVisualizationChanger != 0) {
150  if (myVisualizationChanger->getCurrentScheme() != name) {
152  }
153  }
154  myVisualizationSettings = &gSchemeStorage.get(name.c_str());
156  update();
157  return true;
158 }
159 
160 
161 int
162 GUIViewTraffic::doPaintGL(int mode, const Boundary& bound) {
163  // init view settings
164  glRenderMode(mode);
165  glMatrixMode(GL_MODELVIEW);
166  glPushMatrix();
167  glDisable(GL_TEXTURE_2D);
168  glDisable(GL_ALPHA_TEST);
169  glDisable(GL_BLEND);
170  glEnable(GL_DEPTH_TEST);
171 
172  // draw decals (if not in grabbing mode)
173  if (!myUseToolTips) {
174  drawDecals();
176  paintGLGrid();
177  }
178  }
179 
180  glLineWidth(1);
181  glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
182  float minB[2];
183  float maxB[2];
184  minB[0] = bound.xmin();
185  minB[1] = bound.ymin();
186  maxB[0] = bound.xmax();
187  maxB[1] = bound.ymax();
189  glEnable(GL_POLYGON_OFFSET_FILL);
190  glEnable(GL_POLYGON_OFFSET_LINE);
191  int hits2 = myGrid->Search(minB, maxB, *myVisualizationSettings);
192  //
193  if (myAdditionallyDrawn.size() > 0) {
194  glTranslated(0, 0, -.01);
196  for (std::map<GUIGlObject*, int>::iterator i = myAdditionallyDrawn.begin(); i != myAdditionallyDrawn.end(); ++i) {
197  (i->first)->drawGLAdditional(this, *myVisualizationSettings);
198  }
200  glTranslated(0, 0, .01);
201  }
202  glPopMatrix();
203  /*
204  // draw legends
205  glMatrixMode(GL_MODELVIEW);
206  glLoadIdentity();
207  glTranslated(1.-.2, 1.-.5, 0.);
208  glScaled(.2, .5, 1.);
209  GUIColoringSchemesMap<GUILane> &sm = GUIViewTraffic::getLaneSchemesMap(); //!!!
210  sm.getColorer(myVisualizationSettings->laneEdgeMode)->drawLegend();
211  */
212  return hits2;
213 }
214 
215 
216 void
218  myTrackedID = id;
219 }
220 
221 
222 void
224  myTrackedID = -1;
225 }
226 
227 
228 int
230  return myTrackedID;
231 }
232 
233 
234 void
237  const std::vector<MSTrafficLightLogic*>& logics = tlsControl.getAllLogics();
238  MSTrafficLightLogic* minTll = 0;
239  SUMOReal minDist = std::numeric_limits<SUMOReal>::infinity();
240  for (std::vector<MSTrafficLightLogic*>::const_iterator i = logics.begin(); i != logics.end(); ++i) {
241  // get the logic
242  MSTrafficLightLogic* tll = (*i);
243  if (tlsControl.isActive(tll)) {
244  // get the links
245  const MSTrafficLightLogic::LaneVector& lanes = tll->getLanesAt(0);
246  if (lanes.size() > 0) {
247  const Position& endPos = lanes[0]->getShape().back();
248  if (endPos.distanceTo(pos) < minDist) {
249  minDist = endPos.distanceTo(pos);
250  minTll = tll;
251  }
252  }
253  }
254  }
255  if (minTll != 0) {
256  const MSTLLogicControl::TLSLogicVariants& vars = tlsControl.get(minTll->getID());
257  const std::vector<MSTrafficLightLogic*> logics = vars.getAllLogics();
258  if (logics.size() > 1) {
260  for (unsigned int i = 0; i < logics.size() - 1; ++i) {
261  if (minTll->getProgramID() == logics[i]->getProgramID()) {
262  l = (MSSimpleTrafficLightLogic*) logics[i + 1];
263  tlsControl.switchTo(minTll->getID(), l->getProgramID());
264  }
265  }
266  if (l == logics[0]) {
267  tlsControl.switchTo(minTll->getID(), l->getProgramID());
268  }
270  update();
271  }
272  }
273 }
274 
275 
276 SUMOTime
279 }
280 /****************************************************************************/
void paintGLGrid()
paints a grid
void changeStepAndDuration(MSTLLogicControl &tlcontrol, SUMOTime simStep, unsigned int step, SUMOTime stepDuration)
Changes the current phase and her duration.
bool isActive(const MSTrafficLightLogic *tl) const
Returns whether the given tls program is the currently active for his tls.
virtual void buildViewToolBars(GUIGlChildWindow &)
builds the view toolbars
GUICompleteSchemeStorage gSchemeStorage
Locate poi - button.
Definition: GUIAppEnum.h:167
const SUMOReal SUMO_const_laneWidth
Definition: StdDefs.h:46
Storage for all programs of a single tls.
bool setColorScheme(const std::string &name)
void unlock()
release exclusive access to the simulation state
Definition: GUINet.cpp:496
SUMORTree * myGrid
The visualization speed-up.
void switchTo(const std::string &id, const std::string &programID)
Switches the named (id) tls to the named (programID) program.
bool gaming
whether the application is in gaming mode or not
Locate vehicle - button.
Definition: GUIAppEnum.h:161
SUMOTime getCurrentTimeStep() const
get the current simulation time
SUMOReal ymin() const
Returns minimum y-coordinate.
Definition: Boundary.cpp:124
GUIMainWindow * myApp
The application.
SUMOReal xmin() const
Returns minimum x-coordinate.
Definition: Boundary.cpp:112
Locate TLS - button.
Definition: GUIAppEnum.h:163
static MSNet * getInstance()
Returns the pointer to the unique instance of MSNet (singleton).
Definition: MSNet.cpp:156
void lock()
grant exclusive access to the simulation state
Definition: GUINet.cpp:490
SUMOReal distanceTo(const Position &p2) const
returns the euclidean distance in 3 dimension
Definition: Position.h:229
GUIDialog_ViewSettings * myVisualizationChanger
SUMOTime getCurrentTimeStep() const
Returns the current simulation step.
Definition: MSNet.h:230
bool isGaming() const
return whether the gui is in gaming mode
Definition: GUIMainWindow.h:77
Locate junction - button.
Definition: GUIAppEnum.h:157
SUMOReal xmax() const
Returns maximum x-coordinate.
Definition: Boundary.cpp:118
A class that stores a 2D geometrical boundary.
Definition: Boundary.h:48
A fixed traffic light logic.
SUMOReal scale
information about a lane&#39;s width (temporary, used for a single view)
A class that stores and controls tls and switching of their programs.
std::vector< MSTrafficLightLogic * > getAllLogics() const
const std::string & getID() const
Returns the id.
Definition: Named.h:60
SUMOTime duration
The duration of the phase.
const std::vector< std::string > & getNames() const
Returns a list of stored settings names.
int getTrackedID() const
Returns the id of the tracked vehicle (-1 if none)
std::string name
The name of this setting.
std::map< GUIGlObject *, int > myAdditionallyDrawn
List of objects for which GUIGlObject::drawGLAdditional is called.
void setCurrentScheme(const std::string &)
Sets the named scheme as the current.
Locate polygons - button.
Definition: GUIAppEnum.h:169
static GUINet * getGUIInstance()
Returns the pointer to the unique instance of GUINet (singleton).
Definition: GUINet.cpp:474
A point in 2D or 3D with translation and scaling methods.
Definition: Position.h:46
MSTLLogicControl & getTLSControl()
Returns the tls logics control.
Definition: MSNet.h:334
FXComboBox & getColoringSchemesCombo()
const LaneVector & getLanesAt(unsigned int i) const
Returns the list of lanes that are controlled by the signals at the given position.
bool contains(const std::string &name) const
Returns the information whether a setting with the given name is stored.
GUIVisualizationSettings & get(const std::string &name)
Returns the named scheme.
const MSPhaseDefinition & getPhase(unsigned int givenstep) const
Returns the definition of the phase from the given position within the plan.
void onGamingClick(Position pos)
handle mouse click in gaming mode
void startTrack(int id)
Starts vehicle tracking.
std::string getCurrentScheme() const
Returns the name of the currently chosen scheme.
A single child window which contains a view of the simulation area.
std::vector< MSLane * > LaneVector
Definition of the list of links that participate in this tl-light.
Locate addtional structure - button.
Definition: GUIAppEnum.h:165
GUIVisualizationSettings * myVisualizationSettings
A MSNet extended by some values for usage within the gui.
Definition: GUINet.h:90
virtual ~GUIViewTraffic()
destructor
int doPaintGL(int mode, const Boundary &bound)
SUMOReal m2p(SUMOReal meter) const
meter-to-pixels conversion method
int SUMOTime
Definition: SUMOTime.h:43
TLSLogicVariants & get(const std::string &id) const
Returns the variants of a named tls.
bool showGrid
Information whether a grid shall be shown.
void drawDecals()
Draws the stored decals.
virtual int Search(const float a_min[2], const float a_max[2], const GUIVisualizationSettings &c) const
Find all within search rectangle.
Definition: SUMORTree.h:120
The parent class for traffic light logics.
#define SUMOReal
Definition: config.h:218
static const bool gUseMesoSim
Definition: MSGlobals.h:102
const std::string & getProgramID() const
Returns this tl-logic&#39;s id.
SUMOReal ymax() const
Returns maximum y-coordinate.
Definition: Boundary.cpp:130
Locate edge - button.
Definition: GUIAppEnum.h:159
std::vector< MSTrafficLightLogic * > getAllLogics() const
Returns a vector which contains all logics.
static FXIcon * getIcon(GUIIcon which)
void stopTrack()
Stops vehicle tracking.
FXPopup * getLocatorPopup()