Eclipse SUMO - Simulation of Urban MObility
Loading...
Searching...
No Matches
GUINet.h
Go to the documentation of this file.
1/****************************************************************************/
2// Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo
3// Copyright (C) 2001-2026 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
143 void drawGL(const GUIVisualizationSettings& s) const override;
145
146
148 const Boundary& getBoundary() const;
149
151 Position getJunctionPosition(const std::string& name) const;
152
154 bool vehicleExists(const std::string& name) const;
155
157 void guiSimulationStep();
158
161 void simulationStep();
162
165
169 int getWholeDuration() const;
170
171
175 int getSimDuration() const;
176
177
179 double getRTFactor() const;
180
182 double getUPS() const;
183
185 double getMeanRTFactor(int duration) const;
186
188 double getMeanUPS() const;
189
190 // Returns the duration of the last step's visualisation part (in ms)
191 //int getVisDuration() const;
192
194 int getIdleDuration() const;
195
197 void setSimDuration(int val);
198
199 // Sets the duration of the last step's visualisation part
200 //void setVisDuration(int val);
201
203 void setIdleDuration(int val);
204 //}
205
206 double getAvgRouteLength() const {
208 }
209 double getAvgDuration() const {
211 }
212 double getAvgWaitingTime() const {
214 }
215 double getAvgTimeLoss() const {
217 }
218 double getAvgDepartDelay() const {
220 }
227 double getAvgWalkDuration() const {
229 }
230 double getAvgWalkTimeLoss() const {
232 }
233
243
244
254
255
258 int getLinkTLID(const MSLink* const link) const;
259
262 int getLinkTLIndex(const MSLink* const link) const;
263
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
290
291
295 const SUMORTree& getVisualisationSpeedUp(bool secondary = false) const {
296 return secondary ? myGrid2 : myGrid;
297 }
298
301
308
315
317 double getEdgeData(const MSEdge* edge, const std::string& attr);
318
320 double getMeanData(const MSLane* lane, const std::string& id, const std::string& attr);
321
323 bool loadEdgeData(const std::string& file);
324
326 std::vector<std::string> getEdgeDataAttrs() const;
327
329 std::vector<std::string> getMeanDataIDs() const;
330
332 std::vector<std::string> getMeanDataAttrs(const std::string& meanDataID) const;
333
334#ifdef HAVE_OSG
335 void updateColor(const GUIVisualizationSettings& s);
336#endif
337
339 void lock();
340
342 void unlock();
343
345 void lockPendingEmits() const override;
346
348 void unlockPendingEmits() const override;
349
354 static GUINet* getGUIInstance();
355
357 void createTLWrapper(MSTrafficLightLogic* tll) override;
358
360 bool isSelected(const MSTrafficLightLogic* tll) const override;
361
363 void updateGUI() const override;
364
366 void addHotkey(int key, Command* press, Command* release = nullptr);
367
369 void flushOutputsAtEnd();
370
371 virtual bool skipFinalReset() const override {
372 return mySkipFinalReset;
373 }
374
375private:
377 void initTLMap();
378
379 friend class GUIOSGBuilder;
380
381protected:
384
387
390
392 std::vector<GUIEdge*> myEdgeWrapper;
393
395 std::vector<GUIJunctionWrapper*> myJunctionWrapper;
396
398 std::vector<GUIDetectorWrapper*> myDetectorWrapper;
399
401 std::vector<GUICalibrator*> myCalibratorWrapper;
402
404 typedef std::map<const MSLink*, std::string> Links2LogicMap;
407
408
410 typedef std::map<MSTrafficLightLogic*, GUITrafficLightLogicWrapper*> Logics2WrapperMap;
413
414
416 int myLastSimDuration, /*myLastVisDuration, */myLastIdleDuration;
417
420
422 std::map<std::string, MSEdgeWeightsStorage*> myLoadedEdgeData;
423
424 bool mySkipFinalReset = false;
425
428 public:
432 void myStartElement(int element, const SUMOSAXAttributes& attrs);
433 std::vector<std::string> getEdgeAttrs();
437 private:
438 std::set<std::string> edgeAttrs;
439 };
440
442 public:
445
448
457 void addEdgeWeight(const std::string& id, double val, double beg, double end) const;
458 void addEdgeRelWeight(const std::string& from, const std::string& to, double val, double beg, double end) const;
459
460 private:
463
464 };
465
466private:
468 mutable FXMutex myLock;
469
471 //MSInsertionControl (avoid the need to create GUIInsertionControl)
472 mutable FXMutex myPendingEmitsLock;
473
474};
long long int SUMOTime
Definition GUI.h:36
#define SUMOTime_MAX
Definition SUMOTime.h:34
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)
A road/street connecting two junctions (gui-version)
Definition GUIEdge.h:51
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:427
void myStartElement(int element, const SUMOSAXAttributes &attrs)
Callback method for an opening tag to implement by derived classes.
Definition GUINet.cpp:656
DiscoverAttributes(const std::string &file)
Definition GUINet.h:429
std::set< std::string > edgeAttrs
Definition GUINet.h:438
std::vector< std::string > getEdgeAttrs()
Definition GUINet.cpp:676
MSEdgeWeightsStorage * myWeightStorage
The storage that edges shall be added to.
Definition GUINet.h:462
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:683
void addEdgeRelWeight(const std::string &from, const std::string &to, double val, double beg, double end) const
Definition GUINet.cpp:695
EdgeFloatTimeLineRetriever_GUI(MSEdgeWeightsStorage *weightStorage)
Constructor.
Definition GUINet.h:444
A MSNet extended by some values for usage within the gui.
Definition GUINet.h:82
double getAvgTripSpeed() const
Definition GUINet.h:221
double getAvgRouteLength() const
Definition GUINet.h:206
double getAvgDuration() const
Definition GUINet.h:209
int getWholeDuration() const
Returns the duration of the last step (sim+visualisation+idle) (in ms)
Definition GUINet.cpp:387
Boundary getCenteringBoundary() const override
Returns the boundary to which the view shall be centered in order to show the object.
Definition GUINet.cpp:575
void setIdleDuration(int val)
Sets the duration of the last step's idle part.
Definition GUINet.cpp:465
GUIVehicleControl * getGUIVehicleControl()
Returns the vehicle control.
Definition GUINet.cpp:591
void unlock()
release exclusive access to the simulation state
Definition GUINet.cpp:603
double getUPS() const
Returns the update per seconds rate.
Definition GUINet.cpp:416
void unlockPendingEmits() const override
release exclusive access to pending emits
Definition GUINet.cpp:615
bool loadEdgeData(const std::string &file)
load edgeData from file
Definition GUINet.cpp:719
void drawGL(const GUIVisualizationSettings &s) const override
Draws the object.
Definition GUINet.cpp:570
virtual bool skipFinalReset() const override
gui may prevent final meanData reset to keep live data visible
Definition GUINet.h:371
long myLastVehicleMovementCount
Definition GUINet.h:418
std::vector< GUIGlID > getJunctionIDs(bool includeInternal) const
Definition GUINet.cpp:249
std::map< const MSLink *, std::string > Links2LogicMap
Definition of a link-to-logic-id map.
Definition GUINet.h:404
MSTransportableControl & getPersonControl() override
Returns the person control.
Definition GUINet.cpp:130
FXMutex myLock
The mutex used to avoid concurrent updates of the vehicle buffer.
Definition GUINet.h:468
void flushOutputsAtEnd()
flush outputs once the simulation has reached its end
Definition GUINet.cpp:814
bool mySkipFinalReset
Definition GUINet.h:424
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:788
~GUINet()
Destructor.
Definition GUINet.cpp:94
long myOverallVehicleCount
Definition GUINet.h:418
void simulationStep()
Performs a single simulation step (locking the simulation)
Definition GUINet.cpp:242
int getSimDuration() const
Returns the duration of the last step's simulation part (in ms)
Definition GUINet.cpp:393
SUMORTree myGrid2
The visualization speed-up for secondary shapes.
Definition GUINet.h:386
void initGUIStructures()
Initialises gui wrappers.
Definition GUINet.cpp:276
long myOverallSimDuration
Definition GUINet.h:419
std::vector< std::string > getEdgeDataAttrs() const
return list of loaded edgeData attributes
Definition GUINet.cpp:756
const Boundary & getBoundary() const
returns the bounder of the network
Definition GUINet.cpp:124
double getRTFactor() const
Returns the simulation speed as a factor to real time.
Definition GUINet.cpp:407
void registerRenderedObject(GUIGlObject *o)
add object into rtree
Definition GUINet.cpp:376
std::vector< GUIEdge * > myEdgeWrapper
Wrapped MS-edges.
Definition GUINet.h:392
std::map< MSTrafficLightLogic *, GUITrafficLightLogicWrapper * > Logics2WrapperMap
Definition of a traffic light-to-wrapper map.
Definition GUINet.h:410
GUITrafficLightLogicWrapper * getTLLWrapper(MSTrafficLightLogic *tll)
Definition GUINet.cpp:226
double getAvgWalkDuration() const
Definition GUINet.h:227
int getLinkTLID(const MSLink *const link) const
Definition GUINet.cpp:198
void setSimDuration(int val)
Sets the duration of the last step's simulation part.
Definition GUINet.cpp:449
SUMORTree & getVisualisationSpeedUp()
Returns the RTree used for visualisation speed-up.
Definition GUINet.h:287
std::vector< GUICalibrator * > myCalibratorWrapper
A calibrator dictionary.
Definition GUINet.h:401
std::vector< std::string > getMeanDataIDs() const
return list of loaded edgeData ids (being computed in the current simulation)
Definition GUINet.cpp:766
void lockPendingEmits() const override
grant exclusive access to pending emits
Definition GUINet.cpp:609
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:434
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:644
FXMutex myPendingEmitsLock
The mutex used to avoid concurrent updates of pending emits in.
Definition GUINet.h:472
void initTLMap()
Initialises the tl-logic map and wrappers.
Definition GUINet.cpp:148
int getLinkTLIndex(const MSLink *const link) const
Definition GUINet.cpp:213
Boundary myBoundary
The networks boundary.
Definition GUINet.h:389
double getAvgWalkTimeLoss() const
Definition GUINet.h:230
const SUMORTree & getVisualisationSpeedUp(bool secondary=false) const
Returns the RTree used for visualisation speed-up.
Definition GUINet.h:295
std::vector< GUIGlID > getTLSIDs() const
Returns the gl-ids of all traffic light logics within the net.
Definition GUINet.cpp:261
std::map< std::string, MSEdgeWeightsStorage * > myLoadedEdgeData
loaded edge data for visualization
Definition GUINet.h:422
GUIParameterTableWindow * getParameterWindow(GUIMainWindow &app, GUISUMOAbstractView &parent) override
Returns an own parameter window.
Definition GUINet.cpp:486
Logics2WrapperMap myLogics2Wrapper
The traffic light-to-wrapper map.
Definition GUINet.h:412
int getIdleDuration() const
Returns the duration of the last step's idle part (in ms)
Definition GUINet.cpp:443
double getMeanRTFactor(int duration) const
Returns the simulation speed as a factor to real time.
Definition GUINet.cpp:425
void createTLWrapper(MSTrafficLightLogic *tll) override
creates a wrapper for the given logic
Definition GUINet.cpp:157
bool vehicleExists(const std::string &name) const
returns the information whether the vehicle still exists
Definition GUINet.cpp:192
std::vector< GUIDetectorWrapper * > myDetectorWrapper
A detector dictionary.
Definition GUINet.h:398
void addHotkey(int key, Command *press, Command *release=nullptr)
register custom hotkey action
Definition GUINet.cpp:804
double getAvgWalkRouteLength() const
Definition GUINet.h:224
void lock()
grant exclusive access to the simulation state
Definition GUINet.cpp:597
std::vector< GUIJunctionWrapper * > myJunctionWrapper
Wrapped MS-junctions.
Definition GUINet.h:395
void updateGUI() const override
update view after simulation.loadState
Definition GUINet.cpp:794
static GUINet * getGUIInstance()
Returns the pointer to the unique instance of GUINet (singleton).
Definition GUINet.cpp:581
double getAvgTimeLoss() const
Definition GUINet.h:215
double getAvgDepartDelay() const
Definition GUINet.h:218
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:627
double getAvgWaitingTime() const
Definition GUINet.h:212
std::vector< std::string > getMeanDataAttrs(const std::string &meanDataID) const
return list of available attributes for the given meanData id
Definition GUINet.cpp:777
int myLastSimDuration
The step durations (simulation, /*visualisation, *‍/idle)
Definition GUINet.h:416
Position getJunctionPosition(const std::string &name) const
returns the position of a junction
Definition GUINet.cpp:185
GUIGLObjectPopupMenu * getPopUpMenu(GUIMainWindow &app, GUISUMOAbstractView &parent) override
Returns an own popup-menu.
Definition GUINet.cpp:471
int myLastIdleDuration
Definition GUINet.h:416
friend class GUIOSGBuilder
Definition GUINet.h:379
void guiSimulationStep()
Some further steps needed for gui processing.
Definition GUINet.cpp:235
MSTransportableControl & getContainerControl() override
Returns the container control.
Definition GUINet.cpp:139
GUIMEVehicleControl * getGUIMEVehicleControl()
Returns the vehicle control.
Definition GUINet.cpp:621
Links2LogicMap myLinks2Logic
The link-to-logic-id map.
Definition GUINet.h:406
LayeredRTree myGrid
The visualization speed-up.
Definition GUINet.h:383
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:52
Stores the information about how to visualize structures.
A RT-tree for efficient storing of SUMO's GL-objects in layers.
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.
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: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.
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.