Eclipse SUMO - Simulation of Urban MObility
Loading...
Searching...
No Matches
MSTransportable.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-2024 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/****************************************************************************/
18// The common superclass for modelling transportable objects like persons and containers
19/****************************************************************************/
20#pragma once
21#include <config.h>
22
23#include <set>
24#include <cassert>
28#include <utils/geom/Position.h>
30#include <utils/geom/Boundary.h>
35#include "MSStage.h"
36
37
38// ===========================================================================
39// class declarations
40// ===========================================================================
41class MSEdge;
42class MSLane;
43class MSNet;
44class MSStoppingPlace;
45class OutputDevice;
47class SUMOVehicle;
49
50
51// ===========================================================================
52// class definitions
53// ===========================================================================
60public:
63 inline bool isPerson() const {
64 return myAmPerson;
65 }
66
67 inline bool isContainer() const {
68 return !myAmPerson;
69 }
70
71 inline std::string getObjectType() {
72 return myAmPerson ? "Person" : "Container";
73 }
74
75 inline NumericalID getNumericalID() const {
76 return myNumericalID;
77 }
78
79 inline bool isStopped() const {
81 }
82
83 double getSlope() const;
84
86
88 virtual bool isJammed() const {
89 return false;
90 }
91
95 double getMaxSpeed() const;
96
97 SUMOTime getWaitingTime(const bool accumulated = false) const;
98
99 double getPreviousSpeed() const {
100 return getSpeed();
101 }
102
103 double getAcceleration() const {
104 return 0.0;
105 }
106
107 double getPositionOnLane() const {
108 return getEdgePos();
109 }
110
111 double getBackPositionOnLane(const MSLane* lane) const;
112
113 Position getPosition(const double /*offset*/) const {
114 return getPosition();
115 }
117
119 typedef std::vector<MSStage*> MSTransportablePlan;
120
122 MSTransportable(const SUMOVehicleParameter* pars, MSVehicleType* vtype, MSTransportablePlan* plan, const bool isPerson);
123
125 virtual ~MSTransportable();
126
127 /* @brief proceeds to the next step of the route,
128 * @return Whether the transportables plan continues */
129 virtual bool proceed(MSNet* net, SUMOTime time, const bool vehicleArrived = false);
130
131 virtual bool checkAccess(const MSStage* const prior, const bool waitAtStop = true) {
132 UNUSED_PARAMETER(prior);
133 UNUSED_PARAMETER(waitAtStop);
134 return false;
135 }
136
138 void setID(const std::string& newID);
139
140 inline const SUMOVehicleParameter& getParameter() const {
141 return *myParameter;
142 }
143
144 inline const MSVehicleType& getVehicleType() const {
145 return *myVType;
146 }
147
151 inline const SUMOVTypeParameter& getVTypeParameter() const {
152 return myVType->getParameter();
153 }
154
156 SumoRNG* getRNG() const;
157
159 int getRNGIndex() const;
160
163
165 void setDeparted(SUMOTime now);
166
168 SUMOTime getDeparture() const;
169
171 const MSEdge* getDestination() const {
172 return (*myStep)->getDestination();
173 }
174
176 const MSEdge* getNextDestination() const {
177 return (*(myStep + 1))->getDestination();
178 }
179
181 const MSEdge* getEdge() const {
182 return (*myStep)->getEdge();
183 }
184
186 const MSLane* getLane() const {
187 return (*myStep)->getLane();
188 }
189
190 const MSLane* getBackLane() const {
191 return getLane();
192 }
193
195 const MSEdge* getFromEdge() const {
196 return (*myStep)->getFromEdge();
197 }
198
200 virtual double getEdgePos() const;
201
203 virtual int getDirection() const;
204
206 virtual Position getPosition() const;
207
209 virtual double getAngle() const;
210
212 virtual double getWaitingSeconds() const;
213
215 virtual double getSpeed() const;
216
218 virtual double getChosenSpeedFactor() const {
219 return 1;
220 }
221
224 return (*myStep)->getStageType();
225 }
226
228 MSStageType getStageType(int next) const {
229 assert(myStep + next < myPlan->end());
230 assert(myStep + next >= myPlan->begin());
231 return (*(myStep + next))->getStageType();
232 }
233
235 std::string getStageSummary(int stageIndex) const;
236
238 std::string getCurrentStageDescription() const {
239 return (*myStep)->getStageDescription(myAmPerson);
240 }
241
244 return *myStep;
245 }
246
248 inline MSStage* getNextStage(int offset) const {
249 assert(myStep + offset >= myPlan->begin());
250 assert(myStep + offset < myPlan->end());
251 return *(myStep + offset);
252 }
253
255 const std::set<NumericalID> getUpcomingEdgeIDs() const;
256
258 inline int getNumStages() const {
259 return (int)myPlan->size();
260 }
261
263 inline int getNumRemainingStages() const {
264 return (int)(myPlan->end() - myStep);
265 }
266
268 inline int getCurrentStageIndex() const {
269 return (int)(myStep - myPlan->begin());
270 }
271
273 inline int getRoutePosition() const {
274 return (*myStep)->getRoutePosition();
275 }
276
278 virtual const MSEdge* getNextEdgePtr() const {
279 return nullptr;
280 }
281
287 void tripInfoOutput(OutputDevice& os) const;
288
294 void routeOutput(OutputDevice& os, const bool withRouteLength) const;
295
297 bool isWaitingFor(const SUMOVehicle* vehicle) const {
298 return (*myStep)->isWaitingFor(vehicle);
299 }
300
302 bool isWaiting4Vehicle() const {
303 return (*myStep)->isWaiting4Vehicle();
304 }
305
306 void setAbortWaiting(const SUMOTime timeout);
307
310
313 return (*myStep)->getVehicle();
314 }
315
317 void appendStage(MSStage* stage, int next = -1);
318
320 void removeStage(int next, bool stayInSim = true);
321
323 void setSpeed(double speed);
324
326 double getArrivalPos() const {
327 return myPlan->back()->getArrivalPos();
328 }
329
331 const MSEdge* getArrivalEdge() const {
332 return myPlan->back()->getEdges().back();
333 }
334
340 return getArrivalEdge();
341 }
342
343 bool reroute(SUMOTime t, const std::string& info, MSTransportableRouter& router, const bool onInit = false, const bool withTaz = false, const bool silent = false, const MSEdge* sink = nullptr);
344
346 bool replaceRoute(ConstMSRoutePtr route, const std::string& info, bool onInit = false, int offset = 0, bool addStops = true, bool removeStops = true, std::string* msgReturn = nullptr);
347
357
366
369
371 bool hasArrived() const;
372
374 bool hasDeparted() const;
375
377 void rerouteParkingArea(MSStoppingPlace* orig, MSStoppingPlace* replacement);
378
380 MSDevice* getDevice(const std::type_info& type) const;
381
383 void setJunctionModelParameter(const std::string& key, const std::string& value);
384
388 inline const std::vector<MSTransportableDevice*>& getDevices() const {
389 return myDevices;
390 }
391
392 virtual bool hasInfluencer() const {
393 return false;
394 }
395
397 virtual bool isSelected() const {
398 return false;
399 }
400
402 virtual int getRoutingMode() const;
403
406 void saveState(OutputDevice& out);
407
410 void loadState(const std::string& state);
411
412protected:
415
419
422
425
427 MSTransportablePlan::iterator myStep;
428
430 std::vector<MSTransportableDevice*> myDevices;
431
432private:
433 const bool myAmPerson;
434
436
438
440
441private:
444
447
448};
long long int SUMOTime
Definition GUI.h:36
MSStageType
Definition MSStage.h:55
std::shared_ptr< const MSRoute > ConstMSRoutePtr
Definition Route.h:32
SUMOVehicleClass
Definition of vehicle classes to differ between different lane usage and authority types.
#define UNUSED_PARAMETER(x)
Definition StdDefs.h:30
Abstract in-vehicle / in-person device.
Definition MSDevice.h:62
A road/street connecting two junctions.
Definition MSEdge.h:77
Representation of a lane in the micro simulation.
Definition MSLane.h:84
The simulated network and simulation perfomer.
Definition MSNet.h:89
A lane area vehicles can halt at.
Abstract in-person device.
const MSEdge * getFromEdge() const
Returns the departure edge.
virtual double getChosenSpeedFactor() const
the current speed factor of the transportable (where applicable)
virtual double getEdgePos() const
Return the position on the edge.
bool hasDeparted() const
return whether the transportable has started its plan
int getRNGIndex() const
returns the index of the associated RNG
SUMOVehicleClass getVClass() const
Returns the object's access class.
static NumericalID myCurrentNumericalIndex
const std::vector< MSTransportableDevice * > & getDevices() const
Returns this vehicle's devices.
double getAcceleration() const
Returns the object's acceleration.
SUMOTime getDeparture() const
logs depart time of the current stage
std::string getCurrentStageDescription() const
Returns the current stage description as a string.
const MSLane * getLane() const
Returns the current lane (may be nullptr)
double getBackPositionOnLane(const MSLane *lane) const
Get the object's back position along the given lane.
const MSEdge * getDestination() const
Returns the current destination.
virtual double getAngle() const
return the current angle of the transportable
const MSEdge * getArrivalEdge() const
returns the final arrival edge
void setAbortWaiting(const SUMOTime timeout)
MSStageType getStageType(int next) const
the stage type for the nth next stage
MSStage * getNextStage(int offset) const
Return the next (or previous) stage denoted by the offset.
bool myWriteEvents
Whether events shall be written.
void routeOutput(OutputDevice &os, const bool withRouteLength) const
Called on writing vehroute output.
bool isWaiting4Vehicle() const
Whether the transportable waits for a vehicle.
void setJunctionModelParameter(const std::string &key, const std::string &value)
set individual junction model paramete (not type related)
int getNumRemainingStages() const
Return the number of remaining stages (including the current)
virtual double getSpeed() const
the current speed of the transportable
PositionVector getBoundingBox() const
return the bounding box of the person
const bool myAmPerson
virtual bool checkAccess(const MSStage *const prior, const bool waitAtStop=true)
SUMOTime abortStage(SUMOTime step)
Abort current stage (used for aborting waiting for a vehicle)
std::string getStageSummary(int stageIndex) const
return textual summary for the given stage
MSTransportable & operator=(const MSTransportable &)
Invalidated assignment operator.
MSStage * getCurrentStage() const
Return the current stage.
void setDeparted(SUMOTime now)
logs depart time of the current stage
const std::set< NumericalID > getUpcomingEdgeIDs() const
returns the numerical IDs of edges to be used (possibly of future stages)
void setSpeed(double speed)
set the speed for all present and future (walking) stages and modify the vType so that stages added l...
const MSLane * getBackLane() const
Returns the lane the where the rear of the object is currently at.
virtual bool proceed(MSNet *net, SUMOTime time, const bool vehicleArrived=false)
virtual bool isSelected() const
whether this transportable is selected in the GUI
MSTransportablePlan::iterator myStep
the iterator over the route
MSTransportablePlan * myPlan
the plan of the transportable
void removeStage(int next, bool stayInSim=true)
removes the nth next stage
const MSEdge * getNextDestination() const
Returns the destination after the current destination.
bool isStopped() const
Returns whether the object is at a stop.
SUMOVehicle * getVehicle() const
The vehicle associated with this transportable.
MSVehicleType * myVType
This transportable's type. (mainly used for drawing related information Note sure if it is really nec...
SUMOTime getWaitingTime(const bool accumulated=false) const
int getRoutePosition() const
return the index of the edge within the route
bool isPerson() const
Whether it is a person.
virtual Position getPosition() const
Return the Network coordinate of the transportable.
const SUMOVehicleParameter * myParameter
the plan of the transportable
double getPreviousSpeed() const
Returns the object's previous speed.
Position getPosition(const double) const
Return current position (x/y, cartesian)
double getArrivalPos() const
returns the final arrival pos
double getPositionOnLane() const
Get the object's position along the lane.
void saveState(OutputDevice &out)
Saves the current state into the given stream.
bool isContainer() const
Whether it is a container.
const MSVehicleType & getVehicleType() const
Returns the object's "vehicle" type.
virtual ~MSTransportable()
destructor
int getNumStages() const
Return the total number stages in this person's plan.
int getCurrentStageIndex() const
Return the index of the current stage.
MSStageType getCurrentStageType() const
the current stage type of the transportable
NumericalID getNumericalID() const
return the numerical ID which is only for internal usage
void rerouteParkingArea(MSStoppingPlace *orig, MSStoppingPlace *replacement)
adapt plan when the vehicle reroutes and now stops at replacement instead of orig
std::string getObjectType()
void loadState(const std::string &state)
Reconstructs the current state.
std::vector< MSTransportableDevice * > myDevices
The devices this transportable has.
virtual double getWaitingSeconds() const
the time this transportable spent waiting in seconds
bool hasArrived() const
return whether the person has reached the end of its plan
double getSlope() const
Returns the slope of the road at object's position in degrees.
bool reroute(SUMOTime t, const std::string &info, MSTransportableRouter &router, const bool onInit=false, const bool withTaz=false, const bool silent=false, const MSEdge *sink=nullptr)
void tripInfoOutput(OutputDevice &os) const
Called on writing tripinfo output.
const NumericalID myNumericalID
virtual bool hasInfluencer() const
whether the vehicle is individually influenced (via TraCI or special parameters)
void appendStage(MSStage *stage, int next=-1)
Appends the given stage to the current plan.
SumoRNG * getRNG() const
returns the associated RNG
const SUMOVTypeParameter & getVTypeParameter() const
Returns the object's "vehicle" type parameter.
virtual bool isJammed() const
whether the transportable (persons) is jammed as defined by the current pedestrian model
virtual int getRoutingMode() const
return routing mode (configures router choice but also handling of transient permission changes)
MSTransportable(const MSTransportable &)
Invalidated copy constructor.
MSVehicleType & getSingularType()
Replaces the current vehicle type with a new one used by this vehicle only.
const MSEdge * getEdge() const
Returns the current edge.
const MSEdge * getRerouteDestination() const
Returns the end point for reroutes (usually the last edge of the route)
bool replaceRoute(ConstMSRoutePtr route, const std::string &info, bool onInit=false, int offset=0, bool addStops=true, bool removeStops=true, std::string *msgReturn=nullptr)
Replaces the current route by the given one.
virtual const MSEdge * getNextEdgePtr() const
returns the next edge ptr (used by walking persons)
virtual int getDirection() const
Return the movement directon on the edge.
std::vector< MSStage * > MSTransportablePlan
the structure holding the plan of a transportable
MSDevice * getDevice(const std::type_info &type) const
Returns a device of the given type if it exists or nullptr if not.
void setID(const std::string &newID)
set the id (inherited from Named but forbidden for transportables)
WrappingCommand< MSTransportable > * myAbortCommand
void replaceVehicleType(MSVehicleType *type)
Replaces the current vehicle type by the one given.
bool isWaitingFor(const SUMOVehicle *vehicle) const
Whether the transportable waits for the given vehicle in the current step.
SUMOTime getDesiredDepart() const
Returns the desired departure time.
const SUMOVehicleParameter & getParameter() const
Returns the vehicle's parameter (including departure definition)
double getMaxSpeed() const
Returns the maximum speed (the minimum of desired and physical maximum speed)
The car-following model and parameter.
const SUMOVTypeParameter & getParameter() const
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
A list of positions.
Representation of a vehicle, person, or container.
long long int NumericalID
Structure representing possible vehicle parameter.
Representation of a vehicle.
Definition SUMOVehicle.h:62
Structure representing possible vehicle parameter.
A wrapper for a Command function.