Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
eclipse
GitHub Repository: eclipse/sumo
Path: blob/main/src/guisim/GUITriggeredRerouter.h
193884 views
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
/****************************************************************************/
14
/// @file GUITriggeredRerouter.h
15
/// @author Daniel Krajzewicz
16
/// @author Jakob Erdmann
17
/// @author Michael Behrisch
18
/// @date Mon, 25.07.2005
19
///
20
// Reroutes vehicles passing an edge (gui-version)
21
/****************************************************************************/
22
#pragma once
23
#include <config.h>
24
25
#include <vector>
26
#include <string>
27
#include <foreign/rtree/SUMORTree.h>
28
#include <microsim/trigger/MSTriggeredRerouter.h>
29
#include <utils/gui/globjects/GUIGlObject_AbstractAdd.h>
30
#include <utils/gui/globjects/GUIGLObjectPopupMenu.h>
31
#include <gui/GUIManipulator.h>
32
33
// ===========================================================================
34
// class declarations
35
// ===========================================================================
36
class GUIEdge;
37
38
// ===========================================================================
39
// class definitions
40
// ===========================================================================
41
/**
42
* @class GUITriggeredRerouter
43
* @brief Reroutes vehicles passing an edge
44
* One rerouter can be active on multiple edges. To reduce drawing load we
45
* instantiate GUIGlObjects for every edge
46
* XXX multiple rerouters active on the same edge are problematic
47
*/
48
class GUITriggeredRerouter
49
: public MSTriggeredRerouter,
50
public GUIGlObject_AbstractAdd {
51
public:
52
/** @brief Constructor
53
* @param[in] id The id of the rerouter
54
* @param[in] edges The edges the rerouter is placed at
55
* @param[in] prob The probability to reroute vehicles
56
* @param[in] off Whether the rerouter is off (not working) initially
57
*/
58
GUITriggeredRerouter(const std::string& id, const MSEdgeVector& edges, double prob,
59
bool off, bool optional, SUMOTime timeThreshold,
60
const std::string& vTypes, const Position& pos, const double radius,
61
SUMORTree& rtree);
62
63
64
/// @brief Destructor
65
~GUITriggeredRerouter();
66
67
68
/** @brief Called when a closing tag occurs
69
*
70
* @param[in] element ID of the currently opened element
71
* @exception ProcessError If something fails
72
* @see GenericSAXHandler::myEndElement
73
*/
74
void myEndElement(int element) override;
75
76
/// @name inherited from GUIGlObject
77
//@{
78
79
/** @brief Returns an own popup-menu
80
*
81
* @param[in] app The application needed to build the popup-menu
82
* @param[in] parent The parent window needed to build the popup-menu
83
* @return The built popup-menu
84
* @see GUIGlObject::getPopUpMenu
85
*/
86
GUIGLObjectPopupMenu* getPopUpMenu(GUIMainWindow& app, GUISUMOAbstractView& parent) override;
87
88
/** @brief Returns an own parameter window
89
*
90
* @param[in] app The application needed to build the parameter window
91
* @param[in] parent The parent window needed to build the parameter window
92
* @return The built parameter window
93
* @see GUIGlObject::getParameterWindow
94
*/
95
GUIParameterTableWindow* getParameterWindow(GUIMainWindow& app, GUISUMOAbstractView& parent) override;
96
97
/// @brief return exaggeration associated with this GLObject
98
double getExaggeration(const GUIVisualizationSettings& s) const override;
99
100
/** @brief Returns the boundary to which the view shall be centered in order to show the object
101
*
102
* @return The boundary the object is within
103
* @see GUIGlObject::getCenteringBoundary
104
*/
105
Boundary getCenteringBoundary() const override;
106
107
/** @brief Draws the object
108
* @param[in] s The settings for the current view (may influence drawing)
109
* @see GUIGlObject::drawGL
110
*/
111
void drawGL(const GUIVisualizationSettings& s) const override;
112
//@}
113
114
GUIManipulator* openManipulator(GUIMainWindow& app,
115
GUISUMOAbstractView& parent);
116
117
/// @brief shift route probabilities
118
void shiftProbs();
119
120
public:
121
122
enum RerouterEdgeType {
123
REROUTER_TRIGGER_EDGE,
124
REROUTER_CLOSED_EDGE,
125
REROUTER_SWITCH_EDGE
126
};
127
128
class GUITriggeredRerouterEdge : public GUIGlObject {
129
130
public:
131
GUITriggeredRerouterEdge(GUIEdge* edge, GUITriggeredRerouter* parent, RerouterEdgeType edgeType, int distIndex = -1,
132
const Position& pos = Position::INVALID, const double radius = std::numeric_limits<double>::max());
133
134
virtual ~GUITriggeredRerouterEdge();
135
136
/// @name inherited from GUIGlObject
137
//@{
138
139
/** @brief Returns an own popup-menu
140
*
141
* @param[in] app The application needed to build the popup-menu
142
* @param[in] parent The parent window needed to build the popup-menu
143
* @return The built popup-menu
144
* @see GUIGlObject::getPopUpMenu
145
*/
146
GUIGLObjectPopupMenu* getPopUpMenu(GUIMainWindow& app, GUISUMOAbstractView& parent) override;
147
148
/** @brief Returns an own parameter window
149
*
150
* @param[in] app The application needed to build the parameter window
151
* @param[in] parent The parent window needed to build the parameter window
152
* @return The built parameter window
153
* @see GUIGlObject::getParameterWindow
154
*/
155
GUIParameterTableWindow* getParameterWindow(GUIMainWindow& app, GUISUMOAbstractView& parent) override;
156
157
/// @brief return exaggeration associated with this GLObject
158
double getExaggeration(const GUIVisualizationSettings& s) const override;
159
160
/** @brief Returns the boundary to which the view shall be centered in order to show the object
161
*
162
* @return The boundary the object is within
163
* @see GUIGlObject::getCenteringBoundary
164
*/
165
Boundary getCenteringBoundary() const override;
166
167
/** @brief Draws the object
168
* @param[in] s The settings for the current view (may influence drawing)
169
* @see GUIGlObject::drawGL
170
*/
171
void drawGL(const GUIVisualizationSettings& s) const override;
172
173
void onLeftBtnPress(void* data) override;
174
175
RerouterEdgeType getRerouterEdgeType() const {
176
return myEdgeType;
177
}
178
179
const MSEdge* getEdge() const {
180
return myEdge;
181
}
182
//@}
183
184
private:
185
/// Definition of a positions container
186
typedef std::vector<Position> PosCont;
187
188
/// Definition of a rotation container
189
typedef std::vector<double> RotCont;
190
191
private:
192
/// The parent rerouter to which this edge instance belongs
193
GUITriggeredRerouter* myParent;
194
195
/// The edge for which this visualization applies
196
MSEdge* myEdge;
197
198
/// whether this edge instance visualizes a closed edge
199
const RerouterEdgeType myEdgeType;
200
201
/// The positions in full-geometry mode
202
PosCont myFGPositions;
203
204
/// The rotations in full-geometry mode
205
RotCont myFGRotations;
206
207
/// The boundary of this rerouter
208
Boundary myBoundary;
209
210
/// The sign half-widths
211
std::vector<double> myHalfWidths;
212
213
/// @brief the index for this in edge in routeProbs
214
int myDistIndex;
215
};
216
217
public:
218
class GUITriggeredRerouterPopupMenu : public GUIGLObjectPopupMenu {
219
FXDECLARE(GUITriggeredRerouterPopupMenu)
220
public:
221
222
GUITriggeredRerouterPopupMenu(GUIMainWindow& app, GUISUMOAbstractView& parent, GUIGlObject* o);
223
224
~GUITriggeredRerouterPopupMenu();
225
226
/** @brief Called if the object's manipulator shall be shown */
227
long onCmdOpenManip(FXObject*, FXSelector, void*);
228
229
protected:
230
GUITriggeredRerouterPopupMenu() { }
231
232
};
233
234
235
class GUIManip_TriggeredRerouter : public GUIManipulator {
236
FXDECLARE(GUIManip_TriggeredRerouter)
237
public:
238
enum {
239
MID_USER_DEF = FXDialogBox::ID_LAST,
240
MID_PRE_DEF,
241
MID_OPTION,
242
MID_CLOSE,
243
MID_SHIFT_PROBS,
244
ID_LAST
245
};
246
/// Constructor
247
GUIManip_TriggeredRerouter(GUIMainWindow& app, const std::string& name, GUITriggeredRerouter& o);
248
249
/// Destructor
250
virtual ~GUIManip_TriggeredRerouter();
251
252
long onCmdClose(FXObject*, FXSelector, void*);
253
long onCmdUserDef(FXObject*, FXSelector, void*);
254
long onUpdUserDef(FXObject*, FXSelector, void*);
255
long onCmdChangeOption(FXObject*, FXSelector, void*);
256
long onCmdShiftProbs(FXObject*, FXSelector, void*);
257
258
private:
259
GUIMainWindow* myParent;
260
261
FXint myChosenValue;
262
263
FXDataTarget myChosenTarget;
264
265
double myUsageProbability;
266
267
FXRealSpinner* myUsageProbabilityDial;
268
269
FXDataTarget myUsageProbabilityTarget;
270
271
GUITriggeredRerouter* myObject;
272
273
protected:
274
GUIManip_TriggeredRerouter() { }
275
276
};
277
278
279
private:
280
/// The boundary of this rerouter
281
Boundary myBoundary;
282
283
std::vector<GUITriggeredRerouterEdge*> myEdgeVisualizations;
284
285
int myShiftProbDistIndex;
286
};
287
288