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-2022 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// ===========================================================================
45class MSEdgeControl;
49class MSLink;
52class GUICalibrator;
54class RGBColor;
55class GUIEdge;
56class OutputDevice;
57class GUIVehicle;
61class Command;
62
63
64// ===========================================================================
65// class definitions
66// ===========================================================================
82class GUINet : public MSNet, public GUIGlObject {
83
84 friend class GUITrafficLightLogicWrapper; // see createTLWrapper
85
86public:
94 GUINet(MSVehicleControl* vc, MSEventControl* beginOfTimestepEvents,
95 MSEventControl* endOfTimestepEvents,
96 MSEventControl* insertionEvents);
97
98
100 ~GUINet();
101
102
106 bool isGUINet() const override {
107 return true;
108 }
109
110
112
113
122
131
137 Boundary getCenteringBoundary() const override;
138
140 double getExaggeration(const GUIVisualizationSettings& s) const override;
141
146 void drawGL(const GUIVisualizationSettings& s) const override;
148
149
151 const Boundary& getBoundary() const;
152
154 Position getJunctionPosition(const std::string& name) const;
155
157 bool vehicleExists(const std::string& name) const;
158
160 void guiSimulationStep();
161
164 void simulationStep();
165
168
172 int getWholeDuration() const;
173
174
178 int getSimDuration() const;
179
180
182 double getRTFactor() const;
183
185 double getUPS() const;
186
188 double getMeanRTFactor(int duration) const;
189
191 double getMeanUPS() const;
192
193 // Returns the duration of the last step's visualisation part (in ms)
194 //int getVisDuration() const;
195
197 int getIdleDuration() const;
198
200 void setSimDuration(int val);
201
202 // Sets the duration of the last step's visualisation part
203 //void setVisDuration(int val);
204
206 void setIdleDuration(int val);
207 //}
208
209 double getAvgRouteLength() const {
211 }
212 double getAvgDuration() const {
214 }
215 double getAvgWaitingTime() const {
217 }
218 double getAvgTimeLoss() const {
220 }
221 double getAvgDepartDelay() const {
223 }
224 double getAvgTripSpeed() const {
226 }
227 double getAvgWalkRouteLength() const {
229 }
230 double getAvgWalkDuration() const {
232 }
233 double getAvgWalkTimeLoss() const {
235 }
236
246
247
257
258
261 int getLinkTLID(const MSLink* const link) const;
262
265 int getLinkTLIndex(const MSLink* const link) const;
266
267
269
270
271 /* @brief Returns the gl-ids of all junctions within the net
272 * @param[in] includeInternal Whether to include ids of internal junctions
273 */
274 std::vector<GUIGlID> getJunctionIDs(bool includeInternal) const;
275
277 std::vector<GUIGlID> getTLSIDs() const;
279
280
282 void initGUIStructures();
283
284
289 return myGrid;
290 }
291
292
297 return myGrid;
298 }
299
306
313
315 double getEdgeData(const MSEdge* edge, const std::string& attr);
316
318 double getMeanData(const MSLane* lane, const std::string& id, const std::string& attr);
319
321 bool loadEdgeData(const std::string& file);
322
324 std::vector<std::string> getEdgeDataAttrs() const;
325
327 std::vector<std::string> getMeanDataIDs() const;
328
330 std::vector<std::string> getMeanDataAttrs(const std::string& meanDataID) const;
331
332#ifdef HAVE_OSG
333 void updateColor(const GUIVisualizationSettings& s);
334#endif
335
337 void lock();
338
340 void unlock();
341
346 static GUINet* getGUIInstance();
347
349 void createTLWrapper(MSTrafficLightLogic* tll) override;
350
352 bool isSelected(const MSTrafficLightLogic* tll) const override;
353
355 void updateGUI() const override;
356
358 void addHotkey(int key, Command* press, Command* release = nullptr);
359
360private:
362 void initTLMap();
363
364 friend class GUIOSGBuilder;
365
366protected:
369
372
374 std::vector<GUIEdge*> myEdgeWrapper;
375
377 std::vector<GUIJunctionWrapper*> myJunctionWrapper;
378
380 std::vector<GUIDetectorWrapper*> myDetectorWrapper;
381
383 std::vector<GUICalibrator*> myCalibratorWrapper;
384
386 typedef std::map<const MSLink*, std::string> Links2LogicMap;
389
390
392 typedef std::map<MSTrafficLightLogic*, GUITrafficLightLogicWrapper*> Logics2WrapperMap;
395
396
398 int myLastSimDuration, /*myLastVisDuration, */myLastIdleDuration;
399
402
404 std::map<std::string, MSEdgeWeightsStorage*> myLoadedEdgeData;
405
408 public:
409 DiscoverAttributes(const std::string& file):
412 void myStartElement(int element, const SUMOSAXAttributes& attrs);
413 std::vector<std::string> getEdgeAttrs();
417 private:
418 std::set<std::string> edgeAttrs;
419 };
420
422 public:
425
428
437 void addEdgeWeight(const std::string& id, double val, double beg, double end) const;
438 void addEdgeRelWeight(const std::string& from, const std::string& to, double val, double beg, double end) const;
439
440 private:
443
444 };
445
446private:
448 mutable FXMutex myLock;
449
450};
long long int SUMOTime
Definition: GUI.h:36
#define SUMOTime_MAX
Definition: SUMOTime.h:33
A class that stores a 2D geometrical boundary.
Definition: Boundary.h:39
Base (microsim) event class.
Definition: Command.h:50
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:407
void myStartElement(int element, const SUMOSAXAttributes &attrs)
Callback method for an opening tag to implement by derived classes.
Definition: GUINet.cpp:600
SUMOTime firstIntervalBegin
Definition: GUINet.h:414
DiscoverAttributes(const std::string &file)
Definition: GUINet.h:409
std::set< std::string > edgeAttrs
Definition: GUINet.h:418
std::vector< std::string > getEdgeAttrs()
Definition: GUINet.cpp:620
MSEdgeWeightsStorage * myWeightStorage
The storage that edges shall be added to.
Definition: GUINet.h:442
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:627
~EdgeFloatTimeLineRetriever_GUI()
Destructor.
Definition: GUINet.h:427
void addEdgeRelWeight(const std::string &from, const std::string &to, double val, double beg, double end) const
Definition: GUINet.cpp:639
EdgeFloatTimeLineRetriever_GUI(MSEdgeWeightsStorage *weightStorage)
Constructor.
Definition: GUINet.h:424
A MSNet extended by some values for usage within the gui.
Definition: GUINet.h:82
double getAvgTripSpeed() const
Definition: GUINet.h:224
double getAvgRouteLength() const
Definition: GUINet.h:209
double getAvgDuration() const
Definition: GUINet.h:212
int getWholeDuration() const
Returns the duration of the last step (sim+visualisation+idle) (in ms)
Definition: GUINet.cpp:341
Boundary getCenteringBoundary() const override
Returns the boundary to which the view shall be centered in order to show the object.
Definition: GUINet.cpp:526
void setIdleDuration(int val)
Sets the duration of the last step's idle part.
Definition: GUINet.cpp:419
GUIVehicleControl * getGUIVehicleControl()
Returns the vehicle control.
Definition: GUINet.cpp:548
void unlock()
release exclusive access to the simulation state
Definition: GUINet.cpp:560
double getUPS() const
Returns the update per seconds rate.
Definition: GUINet.cpp:370
const SUMORTree & getVisualisationSpeedUp() const
Returns the RTree used for visualisation speed-up.
Definition: GUINet.h:296
bool loadEdgeData(const std::string &file)
load edgeData from file
Definition: GUINet.cpp:663
void drawGL(const GUIVisualizationSettings &s) const override
Draws the object.
Definition: GUINet.cpp:521
long myLastVehicleMovementCount
Definition: GUINet.h:400
std::vector< GUIGlID > getJunctionIDs(bool includeInternal) const
Definition: GUINet.cpp:237
std::map< const MSLink *, std::string > Links2LogicMap
Definition of a link-to-logic-id map.
Definition: GUINet.h:386
MSTransportableControl & getPersonControl() override
Returns the person control.
Definition: GUINet.cpp:127
FXMutex myLock
The mutex used to avoid concurrent updates of the vehicle buffer.
Definition: GUINet.h:448
double getExaggeration(const GUIVisualizationSettings &s) const override
return exaggeration associated with this GLObject
Definition: GUINet.cpp:532
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:726
~GUINet()
Destructor.
Definition: GUINet.cpp:91
long myOverallVehicleCount
Definition: GUINet.h:400
void simulationStep()
Performs a single simulation step (locking the simulation)
Definition: GUINet.cpp:230
int getSimDuration() const
Returns the duration of the last step's simulation part (in ms)
Definition: GUINet.cpp:347
void initGUIStructures()
Initialises gui wrappers.
Definition: GUINet.cpp:264
long myOverallSimDuration
Definition: GUINet.h:401
std::vector< std::string > getEdgeDataAttrs() const
return list of loaded edgeData attributes
Definition: GUINet.cpp:694
const Boundary & getBoundary() const
returns the bounder of the network
Definition: GUINet.cpp:121
double getRTFactor() const
Returns the simulation speed as a factor to real time.
Definition: GUINet.cpp:361
std::vector< GUIEdge * > myEdgeWrapper
Wrapped MS-edges.
Definition: GUINet.h:374
std::map< MSTrafficLightLogic *, GUITrafficLightLogicWrapper * > Logics2WrapperMap
Definition of a traffic light-to-wrapper map.
Definition: GUINet.h:392
double getAvgWalkDuration() const
Definition: GUINet.h:230
int getLinkTLID(const MSLink *const link) const
Definition: GUINet.cpp:195
void setSimDuration(int val)
Sets the duration of the last step's simulation part.
Definition: GUINet.cpp:403
SUMORTree & getVisualisationSpeedUp()
Returns the RTree used for visualisation speed-up.
Definition: GUINet.h:288
std::vector< GUICalibrator * > myCalibratorWrapper
A calibrator dictionary.
Definition: GUINet.h:383
std::vector< std::string > getMeanDataIDs() const
return list of loaded edgeData ids (being computed in the current simulation)
Definition: GUINet.cpp:704
bool isGUINet() const override
Returns whether this is a GUI Net.
Definition: GUINet.h:106
double getMeanUPS() const
Returns the update per seconds rate.
Definition: GUINet.cpp:388
double getMeanData(const MSLane *lane, const std::string &id, const std::string &attr)
retrieve live lane/edge weight for the given meanData id and attribute
Definition: GUINet.cpp:588
void initTLMap()
Initialises the tl-logic map and wrappers.
Definition: GUINet.cpp:145
int getLinkTLIndex(const MSLink *const link) const
Definition: GUINet.cpp:210
Boundary myBoundary
The networks boundary.
Definition: GUINet.h:371
double getAvgWalkTimeLoss() const
Definition: GUINet.h:233
std::vector< GUIGlID > getTLSIDs() const
Returns the gl-ids of all traffic light logics within the net.
Definition: GUINet.cpp:249
std::map< std::string, MSEdgeWeightsStorage * > myLoadedEdgeData
loaded edge data for visualization
Definition: GUINet.h:404
GUIParameterTableWindow * getParameterWindow(GUIMainWindow &app, GUISUMOAbstractView &parent) override
Returns an own parameter window.
Definition: GUINet.cpp:437
Logics2WrapperMap myLogics2Wrapper
The traffic light-to-wrapper map.
Definition: GUINet.h:394
int getIdleDuration() const
Returns the duration of the last step's idle part (in ms)
Definition: GUINet.cpp:397
double getMeanRTFactor(int duration) const
Returns the simulation speed as a factor to real time.
Definition: GUINet.cpp:379
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:189
std::vector< GUIDetectorWrapper * > myDetectorWrapper
A detector dictionary.
Definition: GUINet.h:380
void addHotkey(int key, Command *press, Command *release=nullptr)
register custom hotkey action
Definition: GUINet.cpp:742
double getAvgWalkRouteLength() const
Definition: GUINet.h:227
void lock()
grant exclusive access to the simulation state
Definition: GUINet.cpp:554
std::vector< GUIJunctionWrapper * > myJunctionWrapper
Wrapped MS-junctions.
Definition: GUINet.h:377
void updateGUI() const override
update view after simulation.loadState
Definition: GUINet.cpp:732
static GUINet * getGUIInstance()
Returns the pointer to the unique instance of GUINet (singleton).
Definition: GUINet.cpp:538
double getAvgTimeLoss() const
Definition: GUINet.h:218
double getAvgDepartDelay() const
Definition: GUINet.h:221
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:571
double getAvgWaitingTime() const
Definition: GUINet.h:215
std::vector< std::string > getMeanDataAttrs(const std::string &meanDataID) const
return list of available attributes for the given meanData id
Definition: GUINet.cpp:715
int myLastSimDuration
The step durations (simulation, /*visualisation, *‍/idle)
Definition: GUINet.h:398
Position getJunctionPosition(const std::string &name) const
returns the position of a junction
Definition: GUINet.cpp:182
GUIGLObjectPopupMenu * getPopUpMenu(GUIMainWindow &app, GUISUMOAbstractView &parent) override
Returns an own popup-menu.
Definition: GUINet.cpp:425
int myLastIdleDuration
Definition: GUINet.h:398
friend class GUIOSGBuilder
Definition: GUINet.h:364
void guiSimulationStep()
Some further steps needed for gui processing.
Definition: GUINet.cpp:223
MSTransportableControl & getContainerControl() override
Returns the container control.
Definition: GUINet.cpp:136
GUINet(MSVehicleControl *vc, MSEventControl *beginOfTimestepEvents, MSEventControl *endOfTimestepEvents, MSEventControl *insertionEvents)
Constructor.
Definition: GUINet.cpp:80
GUIMEVehicleControl * getGUIMEVehicleControl()
Returns the vehicle control.
Definition: GUINet.cpp:565
Links2LogicMap myLinks2Logic
The link-to-logic-id map.
Definition: GUINet.h:388
LayeredRTree myGrid
The visualization speed-up.
Definition: GUINet.h:368
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.
Representation of a lane in the micro simulation.
Definition: MSLane.h:84
The simulated network and simulation perfomer.
Definition: MSNet.h:88
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:61
A point in 2D or 3D with translation and scaling methods.
Definition: Position.h:37
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.