Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
eclipse
GitHub Repository: eclipse/sumo
Path: blob/main/src/netedit/elements/demand/GNERouteHandler.h
185790 views
1
/****************************************************************************/
2
// Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo
3
// Copyright (C) 2001-2025 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 GNERouteHandler.h
15
/// @author Pablo Alvarez Lopez
16
/// @date Jan 2019
17
///
18
// Builds demand objects for netedit
19
/****************************************************************************/
20
#pragma once
21
#include <config.h>
22
23
#include <utils/handlers/RouteHandler.h>
24
25
// ===========================================================================
26
// class declarations
27
// ===========================================================================
28
29
class GNEAttributesEditor;
30
class GNEContainer;
31
class GNEDemandElement;
32
class GNEEdge;
33
class GNEJunction;
34
class GNENet;
35
class GNEPerson;
36
class GNEPlanCreator;
37
class GNETAZ;
38
class GNEUndoList;
39
class GNEVehicle;
40
class GNEViewNet;
41
42
// ===========================================================================
43
// class definitions
44
// ===========================================================================
45
46
class GNERouteHandler : public RouteHandler {
47
48
public:
49
/// @brief Constructor
50
GNERouteHandler(GNENet* net, FileBucket* bucket, const bool allowUndoRedo, const bool removeEmptyPersons);
51
52
/// @brief Destructor
53
virtual ~GNERouteHandler();
54
55
/// @name build functions
56
/// @{
57
58
/// @brief build vType
59
bool buildVType(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const SUMOVTypeParameter& vTypeParameter);
60
61
/// @brief build vType ref
62
bool buildVTypeRef(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const std::string& vTypeID, const double probability);
63
64
/// @brief build vType distribution
65
bool buildVTypeDistribution(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const std::string& id, const int deterministic);
66
67
/// @brief build route
68
bool buildRoute(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const std::string& id, SUMOVehicleClass vClass,
69
const std::vector<std::string>& edgeIDs, const RGBColor& color, const int repeat, const SUMOTime cycleTime,
70
const double probability, const Parameterised::Map& routeParameters);
71
72
/// @brief build route ref
73
bool buildRouteRef(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const std::string& routeID, const double probability);
74
75
/// @brief build route distribution
76
bool buildRouteDistribution(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const std::string& id);
77
78
/// @brief build a vehicle over an existent route
79
bool buildVehicleOverRoute(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const SUMOVehicleParameter& vehicleParameters);
80
81
/// @brief build a vehicle with an embedded route
82
bool buildVehicleEmbeddedRoute(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const SUMOVehicleParameter& vehicleParameters,
83
const std::vector<std::string>& edgeIDs, const RGBColor& color, const int repeat, const SUMOTime cycleTime,
84
const Parameterised::Map& routeParameters);
85
86
/// @brief build a flow over an existent route
87
bool buildFlowOverRoute(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const SUMOVehicleParameter& vehicleParameters);
88
89
/// @brief build a flow with an embedded route
90
bool buildFlowEmbeddedRoute(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const SUMOVehicleParameter& vehicleParameters,
91
const std::vector<std::string>& edgeIDs, const RGBColor& color, const int repeat, const SUMOTime cycleTime,
92
const Parameterised::Map& routeParameters);
93
94
/// @brief build trip
95
bool buildTrip(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const SUMOVehicleParameter& vehicleParameters,
96
const std::string& fromEdgeID, const std::string& toEdgeID);
97
98
/// @brief build trip over junctions
99
bool buildTripJunctions(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const SUMOVehicleParameter& vehicleParameters,
100
const std::string& fromJunctionID, const std::string& toJunctionID);
101
102
/// @brief build trip over TAZs
103
bool buildTripTAZs(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const SUMOVehicleParameter& vehicleParameters,
104
const std::string& fromTAZID, const std::string& toTAZID);
105
106
/// @brief build flow
107
bool buildFlow(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const SUMOVehicleParameter& vehicleParameters,
108
const std::string& fromEdgeID, const std::string& toEdgeIDs);
109
110
/// @brief build flow over junctions
111
bool buildFlowJunctions(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const SUMOVehicleParameter& vehicleParameters,
112
const std::string& fromJunctionID, const std::string& toJunctionID);
113
114
/// @brief build flow over junctions
115
bool buildFlowTAZs(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const SUMOVehicleParameter& vehicleParameters,
116
const std::string& fromTAZID, const std::string& toTAZID);
117
118
/// @brief build person
119
bool buildPerson(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const SUMOVehicleParameter& personParameters);
120
121
/// @brief build person flow
122
bool buildPersonFlow(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const SUMOVehicleParameter& personFlowParameters);
123
124
/// @brief build person trip
125
bool buildPersonTrip(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const CommonXMLStructure::PlanParameters& planParameters,
126
const double arrivalPos, const std::vector<std::string>& types, const std::vector<std::string>& modes,
127
const std::vector<std::string>& lines, const double walkFactor, const std::string& group);
128
129
/// @brief build walk
130
bool buildWalk(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const CommonXMLStructure::PlanParameters& planParameters,
131
const double arrivalPos, const double speed, const SUMOTime duration);
132
133
/// @brief build ride
134
bool buildRide(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const CommonXMLStructure::PlanParameters& planParameters,
135
const double arrivalPos, const std::vector<std::string>& lines, const std::string& group);
136
137
/// @brief build container
138
bool buildContainer(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const SUMOVehicleParameter& containerParameters);
139
140
/// @brief build container flow
141
bool buildContainerFlow(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const SUMOVehicleParameter& containerFlowParameters);
142
143
/// @brief build transport
144
bool buildTransport(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const CommonXMLStructure::PlanParameters& planParameters,
145
const double arrivalPos, const std::vector<std::string>& lines, const std::string& group);
146
147
/// @brief build tranship
148
bool buildTranship(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const CommonXMLStructure::PlanParameters& planParameters,
149
const double arrivalPosition, const double departPosition, const double speed, const SUMOTime duration);
150
151
/// @brief build person stop
152
bool buildPersonStop(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const CommonXMLStructure::PlanParameters& planParameters,
153
const double endPos, const SUMOTime duration, const SUMOTime until,
154
const std::string& actType, const bool friendlyPos, const int parameterSet);
155
156
/// @brief build container stop
157
bool buildContainerStop(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const CommonXMLStructure::PlanParameters& planParameters,
158
const double endPos, const SUMOTime duration, const SUMOTime until, const std::string& actType, const bool friendlyPos,
159
const int parameterSet);
160
161
/// @brief build stop
162
bool buildStop(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const CommonXMLStructure::PlanParameters& planParameters,
163
const SUMOVehicleParameter::Stop& stopParameters);
164
165
/// @brief build person plan
166
bool buildPersonPlan(const GNEDemandElement* planTemplate, GNEDemandElement* personParent, GNEAttributesEditor* personPlanAttributesEditor,
167
GNEPlanCreator* planCreator, const bool centerAfterCreation);
168
169
/// @brief build container plan
170
bool buildContainerPlan(const GNEDemandElement* planTemplate, GNEDemandElement* containerParent, GNEAttributesEditor* containerPlanAttributesEditor,
171
GNEPlanCreator* planCreator, const bool centerAfterCreation);
172
173
/// @}
174
175
/// @brief duplicate given plan in new parent
176
void duplicatePlan(const GNEDemandElement* originalPlan, GNEDemandElement* newParent);
177
178
/// @brief check if via attribute is valid
179
bool checkViaAttribute(const SumoXMLTag tag, const std::string& id, const std::vector<std::string>& via);
180
181
/// @brief transform vehicle functions
182
/// @{
183
184
/// @brief transform to vehicle over an existent route
185
static void transformToVehicle(GNEVehicle* originalVehicle, bool createEmbeddedRoute);
186
187
/// @brief transform routeFlow over an existent route
188
static void transformToRouteFlow(GNEVehicle* originalVehicle, bool createEmbeddedRoute);
189
190
/// @brief transform to trip
191
static void transformToTrip(GNEVehicle* originalVehicle);
192
193
/// @brief transform to flow
194
static void transformToFlow(GNEVehicle* originalVehicle);
195
196
/// @brief transform to trip over junctions
197
static void transformToTripJunctions(GNEVehicle* originalVehicle);
198
199
/// @brief transform to flow over junctions
200
static void transformToFlowJunctions(GNEVehicle* originalVehicle);
201
202
/// @brief transform to trip over TAZs
203
static void transformToTripTAZs(GNEVehicle* originalVehicle);
204
205
/// @brief transform to flow over TAZs
206
static void transformToFlowTAZs(GNEVehicle* originalVehicle);
207
208
/// @}
209
210
/// @brief transform person functions
211
/// @{
212
213
/// @brief transform to vehicle over an existent route
214
static void transformToPerson(GNEPerson* originalPerson);
215
216
/// @brief transform routeFlow over an existent route
217
static void transformToPersonFlow(GNEPerson* originalPerson);
218
219
/// @}
220
221
/// @brief transform container functions
222
/// @{
223
224
/// @brief transform to vehicle over an existent route
225
static void transformToContainer(GNEContainer* originalContainer);
226
227
/// @brief transform routeFlow over an existent route
228
static void transformToContainerFlow(GNEContainer* originalContainer);
229
230
/// @}
231
232
/// @brief reverse functions
233
/// @{
234
235
/// @brief check if the given vehicle can be reversed
236
static bool canReverse(const GNEDemandElement* element);
237
238
/// @brief check if the given list of edges can be reversed
239
static bool canReverse(GNENet* net, SUMOVehicleClass vClass, const std::vector<GNEEdge*>& edges);
240
241
/// @brief reverse given demand element
242
static void reverse(GNEDemandElement* element);
243
244
/// @brief add reverse for given demand element
245
static void addReverse(GNEDemandElement* element);
246
247
/// @}
248
249
protected:
250
/// @brief parse junction
251
GNEJunction* parseJunction(const SumoXMLTag tag, const std::string& id, const std::string& junctionID);
252
253
/// @brief parse TAZ
254
GNEAdditional* parseTAZ(const SumoXMLTag tag, const std::string& id, const std::string& TAZID);
255
256
/// @brief parse edge
257
GNEEdge* parseEdge(const SumoXMLTag tag, const std::string& id, const std::string& edgeID,
258
const CommonXMLStructure::SumoBaseObject* sumoBaseObject,
259
const bool firstEdge);
260
261
/// @brief parse stop edge
262
GNEEdge* parseStopEdge(const CommonXMLStructure::SumoBaseObject* sumoBaseObject) const;
263
264
/// @brief parse edge from lane ID
265
GNEEdge* parseEdgeFromLaneID(const std::string& laneID) const;
266
267
/// @brief parse edges
268
std::vector<GNEEdge*> parseEdges(const SumoXMLTag tag, const std::string& id, const std::vector<std::string>& edgeIDs);
269
270
/// @brief get type (Either type o typeDistribution)
271
GNEDemandElement* getType(const std::string& id) const;
272
273
/// @brief get route (Either route o routeDistribution)
274
GNEDemandElement* getRoute(const std::string& id) const;
275
276
/// @brief get person parent
277
GNEDemandElement* getPersonParent(const CommonXMLStructure::SumoBaseObject* sumoBaseObject) const;
278
279
/// @brief get container parent
280
GNEDemandElement* getContainerParent(const CommonXMLStructure::SumoBaseObject* sumoBaseObject) const;
281
282
/// @brief get route distribution parent
283
GNEDemandElement* getRouteDistributionParent(const CommonXMLStructure::SumoBaseObject* sumoBaseObject) const;
284
285
/// @brief get vType distribution parent
286
GNEDemandElement* getVTypeDistributionParent(const CommonXMLStructure::SumoBaseObject* sumoBaseObject) const;
287
288
/// @brief get distribution elements
289
bool getDistributionElements(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, SumoXMLTag distributionElementTag,
290
const std::vector<std::string>& distributionElementIDs, const std::vector<double>& probabilities,
291
std::vector<const GNEDemandElement*>& elements);
292
293
/// @brief get element by ID
294
GNEDemandElement* retrieveDemandElement(const std::vector<SumoXMLTag> tags, const std::string& id);
295
296
/// @brief check if element exist, and if overwrite
297
bool checkElement(const SumoXMLTag tag, GNEDemandElement* demandElement);
298
299
private:
300
/// @brief pointer to GNENet
301
GNENet* myNet;
302
303
/// @brief pointer for person and container plans
304
CommonXMLStructure::SumoBaseObject* myPlanObject;
305
306
/// @brief demand element parentplans (person and containers, used in postParserTasks)
307
std::set<GNEDemandElement*> myParentPlanElements;
308
309
/// @brief allow undo/redo
310
const bool myAllowUndoRedo = false;
311
312
/// @brief check if remove empty persons
313
const bool myRemoveEmptyPersons = false;
314
315
/// @brief invalidate default onstructor
316
GNERouteHandler() = delete;
317
318
/// @brief invalidate copy constructor
319
GNERouteHandler(const GNERouteHandler& s) = delete;
320
321
/// @brief invalidate assignment operator
322
GNERouteHandler& operator=(const GNERouteHandler& s) = delete;
323
};
324
325