Eclipse SUMO - Simulation of Urban MObility
Helper.h
Go to the documentation of this file.
1 /****************************************************************************/
2 // Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.org/sumo
3 // Copyright (C) 2012-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 /****************************************************************************/
19 // C++ TraCI client API implementation
20 /****************************************************************************/
21 #pragma once
22 #include <vector>
23 #include <memory>
24 #include <libsumo/Subscription.h>
25 #include <microsim/MSNet.h>
28 
29 
30 // ===========================================================================
31 // class declarations
32 // ===========================================================================
33 class Position;
34 class PositionVector;
35 class RGBColor;
36 class MSEdge;
37 class SUMOTrafficObject;
38 class MSPerson;
39 class MSVehicle;
40 class MSBaseVehicle;
41 class MSVehicleType;
42 
43 
44 // ===========================================================================
45 // type definitions
46 // ===========================================================================
47 typedef std::map<const MSLane*, std::pair<double, double> > LaneCoverageInfo; // also declared in MSLane.h!
48 
49 // ===========================================================================
50 // class definitions
51 // ===========================================================================
52 
54 public:
56  LaneStoringVisitor(std::set<const Named*>& objects, const PositionVector& shape,
57  const double range, const int domain)
58  : myObjects(objects), myShape(shape), myRange(range), myDomain(domain) {}
59 
62 
64  void add(const MSLane* const l) const;
65 
67  std::set<const Named*>& myObjects;
69  const double myRange;
70  const int myDomain;
71 
72 private:
75 
78 };
79 
80 #define LANE_RTREE_QUAL RTree<MSLane*, MSLane, float, 2, LaneStoringVisitor>
81 template<>
82 inline float LANE_RTREE_QUAL::RectSphericalVolume(Rect* a_rect) {
83  ASSERT(a_rect);
84  const float extent0 = a_rect->m_max[0] - a_rect->m_min[0];
85  const float extent1 = a_rect->m_max[1] - a_rect->m_min[1];
86  return .78539816f * (extent0 * extent0 + extent1 * extent1);
87 }
88 
89 template<>
90 inline LANE_RTREE_QUAL::Rect LANE_RTREE_QUAL::CombineRect(Rect* a_rectA, Rect* a_rectB) {
91  ASSERT(a_rectA && a_rectB);
92  Rect newRect;
93  newRect.m_min[0] = rtree_min(a_rectA->m_min[0], a_rectB->m_min[0]);
94  newRect.m_max[0] = rtree_max(a_rectA->m_max[0], a_rectB->m_max[0]);
95  newRect.m_min[1] = rtree_min(a_rectA->m_min[1], a_rectB->m_min[1]);
96  newRect.m_max[1] = rtree_max(a_rectA->m_max[1], a_rectB->m_max[1]);
97  return newRect;
98 }
99 
100 namespace libsumo {
101 
106 class Helper {
107 public:
108  static void subscribe(const int commandId, const std::string& id, const std::vector<int>& variables,
109  const double beginTime, const double endTime, const libsumo::TraCIResults& params,
110  const int contextDomain = 0, const double range = 0.);
111 
112  static void handleSubscriptions(const SUMOTime t);
113 
114  static bool needNewSubscription(libsumo::Subscription& s, std::vector<Subscription>& subscriptions, libsumo::Subscription*& modifiedSubscription);
115 
116  static void clearSubscriptions();
117 
119 
121  static TraCIPositionVector makeTraCIPositionVector(const PositionVector& positionVector);
122  static TraCIPosition makeTraCIPosition(const Position& position, const bool includeZ = false);
123  static Position makePosition(const TraCIPosition& position);
124 
126  static TraCIColor makeTraCIColor(const RGBColor& color);
127  static RGBColor makeRGBColor(const TraCIColor& color);
128 
129  static MSEdge* getEdge(const std::string& edgeID);
130  static const MSLane* getLaneChecking(const std::string& edgeID, int laneIndex, double pos);
131  static std::pair<MSLane*, double> convertCartesianToRoadMap(const Position& pos, const SUMOVehicleClass vClass);
132  static double getDrivingDistance(std::pair<const MSLane*, double>& roadPos1, std::pair<const MSLane*, double>& roadPos2);
133 
134  static MSBaseVehicle* getVehicle(const std::string& id);
135  static MSPerson* getPerson(const std::string& id);
136  static SUMOTrafficObject* getTrafficObject(int domain, const std::string& id);
137  static const MSVehicleType& getVehicleType(const std::string& vehicleID);
138  static MSTLLogicControl::TLSLogicVariants& getTLS(const std::string& id);
139 
140  static SUMOVehicleParameter::Stop buildStopParameters(const std::string& edgeOrStoppingPlaceID,
141  double pos, int laneIndex, double startPos, int flags, double duration, double until);
142 
144 
145  static void findObjectShape(int domain, const std::string& id, PositionVector& shape);
146 
147  static void collectObjectsInRange(int domain, const PositionVector& shape, double range, std::set<const Named*>& into);
148  static void collectObjectIDsInRange(int domain, const PositionVector& shape, double range, std::set<std::string>& into);
149 
158  static void applySubscriptionFilters(const Subscription& s, std::set<std::string>& objIDs);
159 
171  static void applySubscriptionFilterLanes(const Subscription& s, std::set<const SUMOTrafficObject*>& vehs, std::vector<int>& filterLanes,
172  double downstreamDist, double upstreamDist, bool disregardOppositeDirection);
173 
180  static void applySubscriptionFilterTurn(const Subscription& s, std::set<const SUMOTrafficObject*>& vehs);
181 
182  static void applySubscriptionFilterFieldOfVision(const Subscription& s, std::set<std::string>& objIDs);
183 
194  static void applySubscriptionFilterLateralDistance(const Subscription& s, std::set<const SUMOTrafficObject*>& vehs, double downstreamDist,
195  double upstreamDist, double lateralDist);
196 
198  std::set<std::string>& objIDs,
199  std::set<const SUMOTrafficObject*>& vehs,
200  const std::vector<const MSLane*>& lanes,
201  double posOnLane, double posLat, bool isDownstream);
202 
203  static void setRemoteControlled(MSVehicle* v, Position xyPos, MSLane* l, double pos, double posLat, double angle,
204  int edgeOffset, ConstMSEdgeVector route, SUMOTime t);
205 
206  static void setRemoteControlled(MSPerson* p, Position xyPos, MSLane* l, double pos, double posLat, double angle,
207  int edgeOffset, ConstMSEdgeVector route, SUMOTime t);
208 
209  static void postProcessRemoteControl();
210 
211  static void cleanup();
212 
213  static void registerVehicleStateListener();
214 
215  static const std::vector<std::string>& getVehicleStateChanges(const MSNet::VehicleState state);
216 
217  static void clearVehicleStates();
218 
220 
221  static const std::vector<std::string>& getTransportableStateChanges(const MSNet::TransportableState state);
222 
223  static void clearTransportableStates();
224 
227  static bool moveToXYMap(const Position& pos, double maxRouteDistance, bool mayLeaveNetwork, const std::string& origID,
228  const double angle, double speed, const ConstMSEdgeVector& currentRoute, const int routePosition,
229  const MSLane* currentLane, double currentLanePos, bool onRoad, SUMOVehicleClass vClass, bool setLateralPos,
230  double& bestDistance, MSLane** lane, double& lanePos, int& routeOffset, ConstMSEdgeVector& edges);
231 
232  static bool moveToXYMap_matchingRoutePosition(const Position& pos, const std::string& origID,
233  const ConstMSEdgeVector& currentRoute, int routeIndex,
234  SUMOVehicleClass vClass, bool setLateralPos,
235  double& bestDistance, MSLane** lane, double& lanePos, int& routeOffset);
236 
237  static bool findCloserLane(const MSEdge* edge, const Position& pos, SUMOVehicleClass vClass, double& bestDistance, MSLane** lane);
238 
239  class LaneUtility {
240  public:
241  LaneUtility(double dist_, double perpendicularDist_, double lanePos_, double angleDiff_, bool ID_,
242  bool onRoute_, bool sameEdge_, const MSEdge* prevEdge_, const MSEdge* nextEdge_) :
243  dist(dist_), perpendicularDist(perpendicularDist_), lanePos(lanePos_), angleDiff(angleDiff_), ID(ID_),
244  onRoute(onRoute_), sameEdge(sameEdge_), prevEdge(prevEdge_), nextEdge(nextEdge_) {}
246 
247  double dist;
249  double lanePos;
250  double angleDiff;
251  bool ID;
252  bool onRoute;
253  bool sameEdge;
254  const MSEdge* prevEdge;
255  const MSEdge* nextEdge;
256  };
258 
259  class SubscriptionWrapper final : public VariableWrapper {
260  public:
262  void setContext(const std::string& refID);
263  void clear();
264  bool wrapDouble(const std::string& objID, const int variable, const double value);
265  bool wrapInt(const std::string& objID, const int variable, const int value);
266  bool wrapString(const std::string& objID, const int variable, const std::string& value);
267  bool wrapStringList(const std::string& objID, const int variable, const std::vector<std::string>& value);
268  bool wrapPosition(const std::string& objID, const int variable, const TraCIPosition& value);
269  bool wrapPositionVector(const std::string& objID, const int variable, const TraCIPositionVector& value);
270  bool wrapColor(const std::string& objID, const int variable, const TraCIColor& value);
271  bool wrapStringDoublePair(const std::string& objID, const int variable, const std::pair<std::string, double>& value);
272  bool wrapStringPair(const std::string& objID, const int variable, const std::pair<std::string, std::string>& value);
273  private:
277  private:
280  };
281 
282 private:
283  static void handleSingleSubscription(const Subscription& s);
284 
290  static void fuseLaneCoverage(std::shared_ptr<LaneCoverageInfo> aggregatedLaneCoverage, const std::shared_ptr<LaneCoverageInfo> newLaneCoverage);
291 
292  static void debugPrint(const SUMOTrafficObject* veh);
293 
294 private:
296  public:
297  void vehicleStateChanged(const SUMOVehicle* const vehicle, MSNet::VehicleState to, const std::string& info = "");
299  std::map<MSNet::VehicleState, std::vector<std::string> > myVehicleStateChanges;
300  };
301 
303  public:
304  void transportableStateChanged(const MSTransportable* const transportable, MSNet::TransportableState to, const std::string& info = "");
306  std::map<MSNet::TransportableState, std::vector<std::string> > myTransportableStateChanges;
307  };
308 
310  static std::vector<Subscription> mySubscriptions;
311 
314 
316  static std::map<int, std::shared_ptr<VariableWrapper> > myWrapper;
317 
320 
323 
326 
327  static std::map<std::string, MSVehicle*> myRemoteControlledVehicles;
328  static std::map<std::string, MSPerson*> myRemoteControlledPersons;
329 
331  Helper() = delete;
332 };
333 
334 }
std::map< const MSLane *, std::pair< double, double > > LaneCoverageInfo
Definition: Helper.h:41
#define LANE_RTREE_QUAL
Definition: Helper.h:80
std::vector< const MSEdge * > ConstMSEdgeVector
Definition: MSEdge.h:74
#define rtree_min(a, b)
Definition: RTree.h:20
#define rtree_max(a, b)
Definition: RTree.h:21
#define ASSERT
Definition: RTree.h:12
long long int SUMOTime
Definition: SUMOTime.h:32
SUMOVehicleClass
Definition of vehicle classes to differ between different lane usage and authority types.
LaneStoringVisitor(const LaneStoringVisitor &src)
invalidated copy constructor
const double myRange
Definition: Helper.h:69
~LaneStoringVisitor()
Destructor.
Definition: Helper.h:61
const int myDomain
Definition: Helper.h:70
std::set< const Named * > & myObjects
The container.
Definition: Helper.h:67
void add(const MSLane *const l) const
Adds the given object to the container.
Definition: Helper.cpp:66
const PositionVector & myShape
Definition: Helper.h:68
LaneStoringVisitor & operator=(const LaneStoringVisitor &src)
invalidated assignment operator
LaneStoringVisitor(std::set< const Named * > &objects, const PositionVector &shape, const double range, const int domain)
Constructor.
Definition: Helper.h:56
The base class for microscopic and mesoscopic vehicles.
Definition: MSBaseVehicle.h:51
A road/street connecting two junctions.
Definition: MSEdge.h:77
Representation of a lane in the micro simulation.
Definition: MSLane.h:82
Interface for objects listening to transportable state changes.
Definition: MSNet.h:686
Interface for objects listening to vehicle state changes.
Definition: MSNet.h:627
VehicleState
Definition of a vehicle state.
Definition: MSNet.h:594
TransportableState
Definition of a transportable state.
Definition: MSNet.h:671
Storage for all programs of a single tls.
Representation of a vehicle in the micro simulation.
Definition: MSVehicle.h:75
The car-following model and parameter.
Definition: MSVehicleType.h:62
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.
Representation of a vehicle.
Definition: SUMOVehicle.h:60
Definition of vehicle stop (position and duration)
LaneUtility(double dist_, double perpendicularDist_, double lanePos_, double angleDiff_, bool ID_, bool onRoute_, bool sameEdge_, const MSEdge *prevEdge_, const MSEdge *nextEdge_)
Definition: Helper.h:241
const MSEdge * nextEdge
Definition: Helper.h:255
const MSEdge * prevEdge
Definition: Helper.h:254
void setContext(const std::string &refID)
Definition: Helper.cpp:1776
SubscriptionResults & myResults
Definition: Helper.h:274
bool wrapDouble(const std::string &objID, const int variable, const double value)
Definition: Helper.cpp:1790
bool wrapPositionVector(const std::string &objID, const int variable, const TraCIPositionVector &value)
Definition: Helper.cpp:1827
bool wrapColor(const std::string &objID, const int variable, const TraCIColor &value)
Definition: Helper.cpp:1834
bool wrapInt(const std::string &objID, const int variable, const int value)
Definition: Helper.cpp:1797
bool wrapStringList(const std::string &objID, const int variable, const std::vector< std::string > &value)
Definition: Helper.cpp:1811
bool wrapPosition(const std::string &objID, const int variable, const TraCIPosition &value)
Definition: Helper.cpp:1820
bool wrapString(const std::string &objID, const int variable, const std::string &value)
Definition: Helper.cpp:1804
bool wrapStringPair(const std::string &objID, const int variable, const std::pair< std::string, std::string > &value)
Definition: Helper.cpp:1848
bool wrapStringDoublePair(const std::string &objID, const int variable, const std::pair< std::string, double > &value)
Definition: Helper.cpp:1841
ContextSubscriptionResults & myContextResults
Definition: Helper.h:275
SubscriptionWrapper(VariableWrapper::SubscriptionHandler handler, SubscriptionResults &into, ContextSubscriptionResults &context)
Definition: Helper.cpp:1769
SubscriptionResults * myActiveResults
Definition: Helper.h:276
SubscriptionWrapper & operator=(const SubscriptionWrapper &s)=delete
Invalidated assignment operator.
void transportableStateChanged(const MSTransportable *const transportable, MSNet::TransportableState to, const std::string &info="")
Called if a transportable changes its state.
Definition: Helper.cpp:1864
std::map< MSNet::TransportableState, std::vector< std::string > > myTransportableStateChanges
Changes in the states of simulated transportables.
Definition: Helper.h:306
std::map< MSNet::VehicleState, std::vector< std::string > > myVehicleStateChanges
Changes in the states of simulated vehicles.
Definition: Helper.h:299
void vehicleStateChanged(const SUMOVehicle *const vehicle, MSNet::VehicleState to, const std::string &info="")
Called if a vehicle changes its state.
Definition: Helper.cpp:1858
C++ TraCI client API implementation.
Definition: Helper.h:106
static Position makePosition(const TraCIPosition &position)
Definition: Helper.cpp:388
static MSEdge * getEdge(const std::string &edgeID)
Definition: Helper.cpp:394
static void postProcessRemoteControl()
Definition: Helper.cpp:1348
static void cleanup()
Definition: Helper.cpp:674
static void registerTransportableStateListener()
Definition: Helper.cpp:711
static double getDrivingDistance(std::pair< const MSLane *, double > &roadPos1, std::pair< const MSLane *, double > &roadPos2)
Definition: Helper.cpp:453
static void collectObjectsInRange(int domain, const PositionVector &shape, double range, std::set< const Named * > &into)
Definition: Helper.cpp:776
static TraCIPosition makeTraCIPosition(const Position &position, const bool includeZ=false)
Definition: Helper.cpp:378
static LANE_RTREE_QUAL * myLaneTree
A storage of lanes.
Definition: Helper.h:325
static void applySubscriptionFilterTurn(const Subscription &s, std::set< const SUMOTrafficObject * > &vehs)
Apply the subscription filter "turn": Gather upcoming junctions and vialanes within downstream distan...
Definition: Helper.cpp:1119
static void findObjectShape(int domain, const std::string &id, PositionVector &shape)
Definition: Helper.cpp:733
static PositionVector makePositionVector(const TraCIPositionVector &vector)
Definition: Helper.cpp:348
static void fuseLaneCoverage(std::shared_ptr< LaneCoverageInfo > aggregatedLaneCoverage, const std::shared_ptr< LaneCoverageInfo > newLaneCoverage)
Adds lane coverage information from newLaneCoverage into aggregatedLaneCoverage.
Definition: Helper.cpp:320
static bool moveToXYMap_matchingRoutePosition(const Position &pos, const std::string &origID, const ConstMSEdgeVector &currentRoute, int routeIndex, SUMOVehicleClass vClass, bool setLateralPos, double &bestDistance, MSLane **lane, double &lanePos, int &routeOffset)
Definition: Helper.cpp:1659
static void debugPrint(const SUMOTrafficObject *veh)
Definition: Helper.cpp:130
static MSPerson * getPerson(const std::string &id)
Definition: Helper.cpp:489
static void subscribe(const int commandId, const std::string &id, const std::vector< int > &variables, const double beginTime, const double endTime, const libsumo::TraCIResults &params, const int contextDomain=0, const double range=0.)
Definition: Helper.cpp:142
Helper()=delete
invalidated standard constructor
static TraCIPositionVector makeTraCIPositionVector(const PositionVector &positionVector)
helper functions
Definition: Helper.cpp:338
static void registerVehicleStateListener()
Definition: Helper.cpp:689
static const std::vector< std::string > & getTransportableStateChanges(const MSNet::TransportableState state)
Definition: Helper.cpp:719
static std::map< int, std::shared_ptr< VariableWrapper > > myWrapper
Map of commandIds -> their executors; applicable if the executor applies to the method footprint.
Definition: Helper.h:316
static void clearVehicleStates()
Definition: Helper.cpp:703
static void clearSubscriptions()
Definition: Helper.cpp:233
static MSBaseVehicle * getVehicle(const std::string &id)
Definition: Helper.cpp:475
static void applySubscriptionFilterLateralDistanceSinglePass(const Subscription &s, std::set< std::string > &objIDs, std::set< const SUMOTrafficObject * > &vehs, const std::vector< const MSLane * > &lanes, double posOnLane, double posLat, bool isDownstream)
Definition: Helper.cpp:1257
static void clearTransportableStates()
Definition: Helper.cpp:725
static TraCIColor makeTraCIColor(const RGBColor &color)
Definition: Helper.cpp:361
static void applySubscriptionFilterFieldOfVision(const Subscription &s, std::set< std::string > &objIDs)
Definition: Helper.cpp:1184
static Subscription * myLastContextSubscription
The last context subscription.
Definition: Helper.h:313
static TraCINextStopData buildStopData(const SUMOVehicleParameter::Stop &stopPar)
Definition: Helper.cpp:625
static TransportableStateListener myTransportableStateListener
Changes in the states of simulated transportables.
Definition: Helper.h:322
static void setRemoteControlled(MSVehicle *v, Position xyPos, MSLane *l, double pos, double posLat, double angle, int edgeOffset, ConstMSEdgeVector route, SUMOTime t)
Definition: Helper.cpp:1333
static void applySubscriptionFilters(const Subscription &s, std::set< std::string > &objIDs)
Filter the given ID-Set (which was obtained from an R-Tree search) according to the filters set by th...
Definition: Helper.cpp:814
static std::map< std::string, MSVehicle * > myRemoteControlledVehicles
Definition: Helper.h:327
static const MSVehicleType & getVehicleType(const std::string &vehicleID)
Definition: Helper.cpp:510
static bool moveToXYMap(const Position &pos, double maxRouteDistance, bool mayLeaveNetwork, const std::string &origID, const double angle, double speed, const ConstMSEdgeVector &currentRoute, const int routePosition, const MSLane *currentLane, double currentLanePos, bool onRoad, SUMOVehicleClass vClass, bool setLateralPos, double &bestDistance, MSLane **lane, double &lanePos, int &routeOffset, ConstMSEdgeVector &edges)
Definition: Helper.cpp:1369
static std::pair< MSLane *, double > convertCartesianToRoadMap(const Position &pos, const SUMOVehicleClass vClass)
Definition: Helper.cpp:421
static MSTLLogicControl::TLSLogicVariants & getTLS(const std::string &id)
Definition: Helper.cpp:516
static SUMOTrafficObject * getTrafficObject(int domain, const std::string &id)
Definition: Helper.cpp:499
static VehicleStateListener myVehicleStateListener
Changes in the states of simulated vehicles.
Definition: Helper.h:319
static std::vector< Subscription > mySubscriptions
The list of known, still valid subscriptions.
Definition: Helper.h:310
static SUMOVehicleParameter::Stop buildStopParameters(const std::string &edgeOrStoppingPlaceID, double pos, int laneIndex, double startPos, int flags, double duration, double until)
Definition: Helper.cpp:525
static void handleSingleSubscription(const Subscription &s)
Definition: Helper.cpp:251
static void applySubscriptionFilterLateralDistance(const Subscription &s, std::set< const SUMOTrafficObject * > &vehs, double downstreamDist, double upstreamDist, double lateralDist)
Apply the subscription filter "lateral distance": Only return vehicles within the given lateral dista...
Definition: Helper.cpp:1223
static const std::vector< std::string > & getVehicleStateChanges(const MSNet::VehicleState state)
Definition: Helper.cpp:697
static void collectObjectIDsInRange(int domain, const PositionVector &shape, double range, std::set< std::string > &into)
Definition: Helper.cpp:766
static void handleSubscriptions(const SUMOTime t)
Definition: Helper.cpp:183
static Subscription * addSubscriptionFilter(SubscriptionFilterType filter)
Definition: Helper.cpp:240
static const MSLane * getLaneChecking(const std::string &edgeID, int laneIndex, double pos)
Definition: Helper.cpp:404
static RGBColor makeRGBColor(const TraCIColor &color)
Definition: Helper.cpp:372
static void applySubscriptionFilterLanes(const Subscription &s, std::set< const SUMOTrafficObject * > &vehs, std::vector< int > &filterLanes, double downstreamDist, double upstreamDist, bool disregardOppositeDirection)
Apply the subscription filter "lanes": Only return vehicles on list of lanes relative to ego vehicle....
Definition: Helper.cpp:1021
static std::map< std::string, MSPerson * > myRemoteControlledPersons
Definition: Helper.h:328
static bool needNewSubscription(libsumo::Subscription &s, std::vector< Subscription > &subscriptions, libsumo::Subscription *&modifiedSubscription)
Definition: Helper.cpp:208
static bool findCloserLane(const MSEdge *edge, const Position &pos, SUMOVehicleClass vClass, double &bestDistance, MSLane **lane)
Definition: Helper.cpp:1628
Representation of a subscription.
Definition: Subscription.h:69
bool(* SubscriptionHandler)(const std::string &objID, const int variable, VariableWrapper *wrapper, tcpip::Storage *paramData)
Definition of a method to be called for serving an associated commandID.
Definition: Subscription.h:152
std::map< std::string, libsumo::SubscriptionResults > ContextSubscriptionResults
Definition: TraCIDefs.h:279
std::map< std::string, libsumo::TraCIResults > SubscriptionResults
{object->{variable->value}}
Definition: TraCIDefs.h:278
SubscriptionFilterType
Filter types for context subscriptions.
Definition: Subscription.h:36
std::map< int, std::shared_ptr< libsumo::TraCIResult > > TraCIResults
{variable->value}
Definition: TraCIDefs.h:276
A 3D-position.
Definition: TraCIDefs.h:164
A list of positions.
Definition: TraCIDefs.h:207