Eclipse SUMO - Simulation of Urban MObility
GUINet.h
Go to the documentation of this file.
1 /****************************************************************************/
2 // Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.org/sumo
3 // Copyright (C) 2001-2020 German Aerospace Center (DLR) and others.
4 // This program and the accompanying materials are made available under the
5 // terms of the Eclipse Public License 2.0 which is available at
6 // https://www.eclipse.org/legal/epl-2.0/
7 // This Source Code may also be made available under the following Secondary
8 // Licenses when the conditions for such availability set forth in the Eclipse
9 // Public License 2.0 are satisfied: GNU General Public License, version 2
10 // or later which is available at
11 // https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html
12 // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-or-later
13 /****************************************************************************/
20 // A MSNet extended by some values for usage within the gui
21 /****************************************************************************/
22 #pragma once
23 #include <config.h>
24 
25 #include <string>
26 #include <utility>
27 #include <microsim/MSNet.h>
29 #include <utils/geom/Boundary.h>
30 #include <utils/geom/Position.h>
40 
41 
42 // ===========================================================================
43 // class declarations
44 // ===========================================================================
45 class MSEdgeControl;
46 class MSJunctionControl;
47 class MSTLLogicControl;
49 class MSLink;
50 class GUIJunctionWrapper;
51 class GUIDetectorWrapper;
52 class GUICalibrator;
54 class RGBColor;
55 class GUIEdge;
56 class OutputDevice;
57 class GUIVehicle;
58 class GUIVehicleControl;
59 class MSVehicleControl;
61 
62 
63 // ===========================================================================
64 // class definitions
65 // ===========================================================================
81 class GUINet : public MSNet, public GUIGlObject {
82 
83  friend class GUITrafficLightLogicWrapper; // see createTLWrapper
84 
85 public:
93  GUINet(MSVehicleControl* vc, MSEventControl* beginOfTimestepEvents,
94  MSEventControl* endOfTimestepEvents,
95  MSEventControl* insertionEvents);
96 
97 
99  ~GUINet();
100 
101 
105  bool isGUINet() const override {
106  return true;
107  }
108 
109 
111 
112 
121 
122 
131 
132 
138  Boundary getCenteringBoundary() const override;
139 
140 
145  void drawGL(const GUIVisualizationSettings& s) const override;
147 
148 
150  const Boundary& getBoundary() const;
151 
153  Position getJunctionPosition(const std::string& name) const;
154 
156  bool vehicleExists(const std::string& name) const;
157 
159  void guiSimulationStep();
160 
163  void simulationStep();
164 
167 
171  int getWholeDuration() const;
172 
173 
177  int getSimDuration() const;
178 
179 
181  double getRTFactor() const;
182 
184  double getUPS() const;
185 
187  double getMeanRTFactor(int duration) const;
188 
190  double getMeanUPS() const;
191 
192  // Returns the duration of the last step's visualisation part (in ms)
193  //int getVisDuration() const;
194 
196  int getIdleDuration() const;
197 
199  void setSimDuration(int val);
200 
201  // Sets the duration of the last step's visualisation part
202  //void setVisDuration(int val);
203 
205  void setIdleDuration(int val);
206  //}
207 
208  double getAvgRouteLength() const {
210  }
211  double getAvgDuration() const {
213  }
214  double getAvgWaitingTime() const {
216  }
217  double getAvgTimeLoss() const {
219  }
220  double getAvgDepartDelay() const {
222  }
223  double getAvgTripSpeed() const {
225  }
226  double getAvgWalkRouteLength() const {
228  }
229  double getAvgWalkDuration() const {
231  }
232  double getAvgWalkTimeLoss() const {
234  }
235 
245 
246 
256 
257 
260  int getLinkTLID(const MSLink* const link) const;
261 
264  int getLinkTLIndex(const MSLink* const link) const;
265 
266 
268 
269 
270  /* @brief Returns the gl-ids of all junctions within the net
271  * @param[in] includeInternal Whether to include ids of internal junctions
272  */
273  std::vector<GUIGlID> getJunctionIDs(bool includeInternal) const;
274 
276  std::vector<GUIGlID> getTLSIDs() const;
278 
279 
281  void initGUIStructures();
282 
283 
288  return myGrid;
289  }
290 
291 
296  return myGrid;
297  }
298 
305 
312 
314  double getEdgeData(const MSEdge* edge, const std::string& attr);
315 
317  bool loadEdgeData(const std::string& file);
318 
319 
321  std::vector<std::string> getEdgeDataAttrs() const;
322 
323 #ifdef HAVE_OSG
324  void updateColor(const GUIVisualizationSettings& s);
325 #endif
326 
328  void lock();
329 
331  void unlock();
332 
337  static GUINet* getGUIInstance();
338 
340  void createTLWrapper(MSTrafficLightLogic* tll) override;
341 
343  bool isSelected(const MSTrafficLightLogic* tll) const override;
344 
345 private:
347  void initTLMap();
348 
349  friend class GUIOSGBuilder;
350 
351 protected:
354 
357 
359  std::vector<GUIEdge*> myEdgeWrapper;
360 
362  std::vector<GUIJunctionWrapper*> myJunctionWrapper;
363 
365  std::vector<GUIDetectorWrapper*> myDetectorWrapper;
366 
368  std::vector<GUICalibrator*> myCalibratorWrapper;
369 
371  typedef std::map<const MSLink*, std::string> Links2LogicMap;
374 
375 
377  typedef std::map<MSTrafficLightLogic*, GUITrafficLightLogicWrapper*> Logics2WrapperMap;
380 
381 
383  int myLastSimDuration, /*myLastVisDuration, */myLastIdleDuration;
384 
387 
389  std::map<std::string, MSEdgeWeightsStorage*> myLoadedEdgeData;
390 
393  public:
394  DiscoverAttributes(const std::string& file):
395  SUMOSAXHandler(file), lastIntervalEnd(0) {};
397  void myStartElement(int element, const SUMOSAXAttributes& attrs);
398  std::vector<std::string> getEdgeAttrs();
400  private:
401  std::set<std::string> edgeAttrs;
402  };
403 
405  public:
408 
411 
420  void addEdgeWeight(const std::string& id, double val, double beg, double end) const;
421  void addEdgeRelWeight(const std::string& from, const std::string& to, double val, double beg, double end) const;
422 
423  private:
426 
427  };
428 
429 private:
431  mutable FXMutex myLock;
432 
433 };
long long int SUMOTime
Definition: SUMOTime.h:31
A class that stores a 2D geometrical boundary.
Definition: Boundary.h:39
Changes the speed allowed on a set of lanes (gui version)
Definition: GUICalibrator.h:42
A road/street connecting two junctions (gui-version)
Definition: GUIEdge.h:50
The popup menu of a globject.
The class responsible for building and deletion of vehicles (gui-version)
class for discovering edge attributes
Definition: GUINet.h:392
void myStartElement(int element, const SUMOSAXAttributes &attrs)
Callback method for an opening tag to implement by derived classes.
Definition: GUINet.cpp:576
DiscoverAttributes(const std::string &file)
Definition: GUINet.h:394
std::set< std::string > edgeAttrs
Definition: GUINet.h:401
std::vector< std::string > getEdgeAttrs()
Definition: GUINet.cpp:593
MSEdgeWeightsStorage * myWeightStorage
The storage that edges shall be added to.
Definition: GUINet.h:425
void addEdgeWeight(const std::string &id, double val, double beg, double end) const
Adds an effort for a given edge and time period.
Definition: GUINet.cpp:599
~EdgeFloatTimeLineRetriever_GUI()
Destructor.
Definition: GUINet.h:410
void addEdgeRelWeight(const std::string &from, const std::string &to, double val, double beg, double end) const
Definition: GUINet.cpp:610
EdgeFloatTimeLineRetriever_GUI(MSEdgeWeightsStorage *weightStorage)
Constructor.
Definition: GUINet.h:407
A MSNet extended by some values for usage within the gui.
Definition: GUINet.h:81
double getAvgTripSpeed() const
Definition: GUINet.h:223
double getAvgRouteLength() const
Definition: GUINet.h:208
double getAvgDuration() const
Definition: GUINet.h:211
int getWholeDuration() const
Returns the duration of the last step (sim+visualisation+idle) (in ms)
Definition: GUINet.cpp:338
Boundary getCenteringBoundary() const override
Returns the boundary to which the view shall be centered in order to show the object.
Definition: GUINet.cpp:520
void setIdleDuration(int val)
Sets the duration of the last step's idle part.
Definition: GUINet.cpp:416
GUIVehicleControl * getGUIVehicleControl()
Returns the vehicle control.
Definition: GUINet.cpp:536
void unlock()
release exclusive access to the simulation state
Definition: GUINet.cpp:548
double getUPS() const
Returns the update per seconds rate.
Definition: GUINet.cpp:367
const SUMORTree & getVisualisationSpeedUp() const
Returns the RTree used for visualisation speed-up.
Definition: GUINet.h:295
bool loadEdgeData(const std::string &file)
load edgeData from file
Definition: GUINet.cpp:632
void drawGL(const GUIVisualizationSettings &s) const override
Draws the object.
Definition: GUINet.cpp:516
long myLastVehicleMovementCount
Definition: GUINet.h:385
std::vector< GUIGlID > getJunctionIDs(bool includeInternal) const
Definition: GUINet.cpp:236
std::map< const MSLink *, std::string > Links2LogicMap
Definition of a link-to-logic-id map.
Definition: GUINet.h:371
MSTransportableControl & getPersonControl() override
Returns the person control.
Definition: GUINet.cpp:125
FXMutex myLock
The mutex used to avoid concurrent updates of the vehicle buffer.
Definition: GUINet.h:431
SUMORTree & getVisualisationSpeedUp()
Returns the RTree used for visualisation speed-up.
Definition: GUINet.h:287
bool isSelected(const MSTrafficLightLogic *tll) const override
return wheter the given logic (or rather it's wrapper) is selected in the GUI
Definition: GUINet.cpp:666
~GUINet()
Destructor.
Definition: GUINet.cpp:89
long myOverallVehicleCount
Definition: GUINet.h:385
void simulationStep()
Performs a single simulation step (locking the simulation)
Definition: GUINet.cpp:229
int getSimDuration() const
Returns the duration of the last step's simulation part (in ms)
Definition: GUINet.cpp:344
void initGUIStructures()
Initialises gui wrappers.
Definition: GUINet.cpp:263
long myOverallSimDuration
Definition: GUINet.h:386
std::vector< std::string > getEdgeDataAttrs() const
return list of loaded edgeData attributes
Definition: GUINet.cpp:657
const Boundary & getBoundary() const
returns the bounder of the network
Definition: GUINet.cpp:119
double getRTFactor() const
Returns the simulation speed as a factor to real time.
Definition: GUINet.cpp:358
std::vector< GUIEdge * > myEdgeWrapper
Wrapped MS-edges.
Definition: GUINet.h:359
std::map< MSTrafficLightLogic *, GUITrafficLightLogicWrapper * > Logics2WrapperMap
Definition of a traffic light-to-wrapper map.
Definition: GUINet.h:377
double getAvgWalkDuration() const
Definition: GUINet.h:229
int getLinkTLID(const MSLink *const link) const
Definition: GUINet.cpp:194
void setSimDuration(int val)
Sets the duration of the last step's simulation part.
Definition: GUINet.cpp:400
std::vector< GUICalibrator * > myCalibratorWrapper
A calibrator dictionary.
Definition: GUINet.h:368
bool isGUINet() const override
Returns whether this is a GUI Net.
Definition: GUINet.h:105
double getMeanUPS() const
Returns the update per seconds rate.
Definition: GUINet.cpp:385
void initTLMap()
Initialises the tl-logic map and wrappers.
Definition: GUINet.cpp:143
int getLinkTLIndex(const MSLink *const link) const
Definition: GUINet.cpp:209
Boundary myBoundary
The networks boundary.
Definition: GUINet.h:356
double getAvgWalkTimeLoss() const
Definition: GUINet.h:232
std::vector< GUIGlID > getTLSIDs() const
Returns the gl-ids of all traffic light logics within the net.
Definition: GUINet.cpp:248
std::map< std::string, MSEdgeWeightsStorage * > myLoadedEdgeData
loaded edge data for visualization
Definition: GUINet.h:389
GUIParameterTableWindow * getParameterWindow(GUIMainWindow &app, GUISUMOAbstractView &parent) override
Returns an own parameter window.
Definition: GUINet.cpp:434
Logics2WrapperMap myLogics2Wrapper
The traffic light-to-wrapper map.
Definition: GUINet.h:379
int getIdleDuration() const
Returns the duration of the last step's idle part (in ms)
Definition: GUINet.cpp:394
double getMeanRTFactor(int duration) const
Returns the simulation speed as a factor to real time.
Definition: GUINet.cpp:376
void createTLWrapper(MSTrafficLightLogic *tll) override
creates a wrapper for the given logic
Definition: GUINet.cpp:154
bool vehicleExists(const std::string &name) const
returns the information whether the vehicle still exists
Definition: GUINet.cpp:188
std::vector< GUIDetectorWrapper * > myDetectorWrapper
A detector dictionary.
Definition: GUINet.h:365
double getAvgWalkRouteLength() const
Definition: GUINet.h:226
void lock()
grant exclusive access to the simulation state
Definition: GUINet.cpp:542
std::vector< GUIJunctionWrapper * > myJunctionWrapper
Wrapped MS-junctions.
Definition: GUINet.h:362
static GUINet * getGUIInstance()
Returns the pointer to the unique instance of GUINet (singleton).
Definition: GUINet.cpp:526
double getAvgTimeLoss() const
Definition: GUINet.h:217
double getAvgDepartDelay() const
Definition: GUINet.h:220
double getEdgeData(const MSEdge *edge, const std::string &attr)
retrieve loaded edged weight for the given attribute and the current simulation time
Definition: GUINet.cpp:559
double getAvgWaitingTime() const
Definition: GUINet.h:214
int myLastSimDuration
The step durations (simulation, /*visualisation, *‍/idle)
Definition: GUINet.h:383
Position getJunctionPosition(const std::string &name) const
returns the position of a junction
Definition: GUINet.cpp:181
GUIGLObjectPopupMenu * getPopUpMenu(GUIMainWindow &app, GUISUMOAbstractView &parent) override
Returns an own popup-menu.
Definition: GUINet.cpp:422
int myLastIdleDuration
Definition: GUINet.h:383
friend class GUIOSGBuilder
Definition: GUINet.h:349
void guiSimulationStep()
Some further steps needed for gui processing.
Definition: GUINet.cpp:222
MSTransportableControl & getContainerControl() override
Returns the container control.
Definition: GUINet.cpp:134
GUINet(MSVehicleControl *vc, MSEventControl *beginOfTimestepEvents, MSEventControl *endOfTimestepEvents, MSEventControl *insertionEvents)
Constructor.
Definition: GUINet.cpp:78
GUIMEVehicleControl * getGUIMEVehicleControl()
Returns the vehicle control.
Definition: GUINet.cpp:553
Links2LogicMap myLinks2Logic
The link-to-logic-id map.
Definition: GUINet.h:373
LayeredRTree myGrid
The visualization speed-up.
Definition: GUINet.h:353
A window containing a gl-object's parameter.
The class responsible for building and deletion of vehicles (gui-version)
A MSVehicle extended by some values for usage within the gui.
Definition: GUIVehicle.h:51
Stores the information about how to visualize structures.
A RT-tree for efficient storing of SUMO's GL-objects in layers.
Definition: LayeredRTree.h:46
static double getAvgWalkRouteLength()
static double getAvgTimeLoss()
static double getAvgDepartDelay()
static double getAvgRouteLength()
accessors for GUINet-Parameters
static double getAvgWaitingTime()
static double getAvgDuration()
static double getAvgWalkDuration()
static double getAvgWalkTimeLoss()
Stores edges and lanes, performs moving of vehicle.
Definition: MSEdgeControl.h:81
A road/street connecting two junctions.
Definition: MSEdge.h:77
A storage for edge travel times and efforts.
Stores time-dependant events and executes them at the proper time.
Container for junctions; performs operations on all stored junctions.
The simulated network and simulation perfomer.
Definition: MSNet.h:89
A class that stores and controls tls and switching of their programs.
The parent class for traffic light logics.
The class responsible for building and deletion of vehicles.
Static storage of an output device and its base (abstract) implementation.
Definition: OutputDevice.h:60
A point in 2D or 3D with translation and scaling methods.
Definition: Position.h:36
Interface for a class which obtains read weights for named edges.
A RT-tree for efficient storing of SUMO's GL-objects.
Definition: SUMORTree.h:66
Encapsulated SAX-Attributes.
SAX-handler base for SUMO-files.