Eclipse SUMO - Simulation of Urban MObility
GNECalibratorFlow.cpp
Go to the documentation of this file.
1 /****************************************************************************/
2 // Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.org/sumo
3 // Copyright (C) 2001-2019 German Aerospace Center (DLR) and others.
4 // This program and the accompanying materials
5 // are made available under the terms of the Eclipse Public License v2.0
6 // which accompanies this distribution, and is available at
7 // http://www.eclipse.org/legal/epl-v20.html
8 // SPDX-License-Identifier: EPL-2.0
9 /****************************************************************************/
14 //
15 /****************************************************************************/
16 
17 // ===========================================================================
18 // included modules
19 // ===========================================================================
20 
21 #include <netedit/GNENet.h>
22 #include <netedit/GNEUndoList.h>
23 #include <netedit/GNEViewNet.h>
26 
27 #include "GNECalibratorFlow.h"
28 
29 
30 // ===========================================================================
31 // member method definitions
32 // ===========================================================================
33 
34 
36  GNEAdditional(calibratorParent, calibratorParent->getViewNet(), GLO_CALIBRATOR, SUMO_TAG_FLOW_CALIBRATOR, "", false,
37 {}, {}, {}, {calibratorParent}, {}, {}, {}, {}, {}, {}),
38 myVehicleType(calibratorParent->getViewNet()->getNet()->retrieveDemandElement(SUMO_TAG_VTYPE, DEFAULT_VTYPE_ID)),
39 myRoute(calibratorParent->getViewNet()->getNet()->getAttributeCarriers().demandElements.at(SUMO_TAG_ROUTE).begin()->second) {
40  // fill calibrator flows with default values
41  setDefaultValues();
42 }
43 
44 
45 GNECalibratorFlow::GNECalibratorFlow(GNEAdditional* calibratorParent, GNEDemandElement* vehicleType, GNEDemandElement* route, const std::string& vehsPerHour, const std::string& speed,
46  const RGBColor& color, const std::string& departLane, const std::string& departPos, const std::string& departSpeed, const std::string& arrivalLane,
47  const std::string& arrivalPos, const std::string& arrivalSpeed, const std::string& line, int personNumber, int containerNumber, bool reroute,
48  const std::string& departPosLat, const std::string& arrivalPosLat, SUMOTime begin, SUMOTime end) :
49  GNEAdditional(calibratorParent, calibratorParent->getViewNet(), GLO_CALIBRATOR, SUMO_TAG_FLOW_CALIBRATOR, "", false, {}, {}, {}, {calibratorParent}, {}, {}, {}, {}, {}, {}),
50 myVehicleType(vehicleType),
51 myRoute(route),
52 myVehsPerHour(vehsPerHour),
53 mySpeed(speed),
54 myColor(color),
55 myDepartLane(departLane),
56 myDepartPos(departPos),
57 myDepartSpeed(departSpeed),
58 myArrivalLane(arrivalLane),
59 myArrivalPos(arrivalPos),
60 myArrivalSpeed(arrivalSpeed),
61 myLine(line),
62 myPersonNumber(personNumber),
63 myContainerNumber(containerNumber),
64 myReroute(reroute),
65 myDepartPosLat(departPosLat),
66 myArrivalPosLat(arrivalPosLat),
67 myBegin(begin),
68 myEnd(end) {
69 }
70 
71 
73 
74 
75 void
77  // This additional cannot be moved
78 }
79 
80 
81 void
83  // This additional cannot be moved
84 }
85 
86 
87 void
89  // Currently this additional doesn't own a Geometry
90 }
91 
92 
95  return getParentAdditionals().at(0)->getPositionInView();
96 }
97 
98 
101  return getParentAdditionals().at(0)->getCenteringBoundary();
102 }
103 
104 
105 void
106 GNECalibratorFlow::splitEdgeGeometry(const double /*splitPosition*/, const GNENetElement* /*originalElement*/, const GNENetElement* /*newElement*/, GNEUndoList* /*undoList*/) {
107  // geometry of this element cannot be splitted
108 }
109 
110 
111 std::string
113  return getParentAdditionals().at(0)->getID();
114 }
115 
116 
117 void
119  // Currently This additional isn't drawn
120 }
121 
122 
123 std::string
125  switch (key) {
126  case SUMO_ATTR_ID:
127  return getAdditionalID();
128  case SUMO_ATTR_TYPE:
129  return myVehicleType->getID();
130  case SUMO_ATTR_ROUTE:
131  return myRoute->getID();
133  return myVehsPerHour;
134  case SUMO_ATTR_SPEED:
135  return mySpeed;
136  case SUMO_ATTR_COLOR:
137  return toString(myColor);
138  case SUMO_ATTR_BEGIN:
139  return time2string(myBegin);
140  case SUMO_ATTR_END:
141  return time2string(myEnd);
143  return myDepartLane;
144  case SUMO_ATTR_DEPARTPOS:
145  return myDepartPos;
147  return myDepartSpeed;
149  return myArrivalLane;
151  return myArrivalPos;
153  return myArrivalSpeed;
154  case SUMO_ATTR_LINE:
155  return myLine;
157  return toString(myPersonNumber);
159  return toString(myContainerNumber);
160  case SUMO_ATTR_REROUTE:
161  return toString(myReroute);
163  return myDepartPosLat;
165  return myArrivalPosLat;
166  case GNE_ATTR_PARENT:
167  return getParentAdditionals().at(0)->getID();
168  case GNE_ATTR_PARAMETERS:
169  return getParametersStr();
170  default:
171  throw InvalidArgument(getTagStr() + " doesn't have an attribute of type '" + toString(key) + "'");
172  }
173 }
174 
175 
176 double
178  switch (key) {
179  case SUMO_ATTR_BEGIN:
180  return STEPS2TIME(myBegin);
181  case SUMO_ATTR_END:
182  return STEPS2TIME(myEnd);
183  default:
184  throw InvalidArgument(getTagStr() + " doesn't have a double attribute of type '" + toString(key) + "'");
185  }
186 }
187 
188 
189 void
190 GNECalibratorFlow::setAttribute(SumoXMLAttr key, const std::string& value, GNEUndoList* undoList) {
191  if (value == getAttribute(key)) {
192  return; //avoid needless changes, later logic relies on the fact that attributes have changed
193  }
194  switch (key) {
195  case SUMO_ATTR_ID:
196  case SUMO_ATTR_TYPE:
197  case SUMO_ATTR_ROUTE:
198  case SUMO_ATTR_COLOR:
200  case SUMO_ATTR_SPEED:
201  case SUMO_ATTR_BEGIN:
202  case SUMO_ATTR_END:
204  case SUMO_ATTR_DEPARTPOS:
209  case SUMO_ATTR_LINE:
212  case SUMO_ATTR_REROUTE:
215  case GNE_ATTR_PARAMETERS:
216  undoList->p_add(new GNEChange_Attribute(this, myViewNet->getNet(), key, value));
217  break;
218  default:
219  throw InvalidArgument(getTagStr() + " doesn't have an attribute of type '" + toString(key) + "'");
220  }
221 }
222 
223 
224 bool
225 GNECalibratorFlow::isValid(SumoXMLAttr key, const std::string& value) {
226  switch (key) {
227  case SUMO_ATTR_ID:
228  return isValidAdditionalID(value);
229  case SUMO_ATTR_TYPE:
230  return SUMOXMLDefinitions::isValidTypeID(value) && (myViewNet->getNet()->retrieveDemandElement(SUMO_TAG_VTYPE, value, false) != nullptr);
231  case SUMO_ATTR_ROUTE:
232  return SUMOXMLDefinitions::isValidVehicleID(value) && (myViewNet->getNet()->retrieveAdditional(SUMO_TAG_ROUTE, value, false) != nullptr);
234  if (value.empty()) {
235  // speed and vehsPerHour cannot be empty at the same time
236  if (mySpeed.empty()) {
237  return false;
238  } else {
239  return true;
240  }
241  } else if (canParse<double>(value)) {
242  return (parse<double>(value) >= 0);
243  } else {
244  return false;
245  }
246  case SUMO_ATTR_SPEED:
247  if (value.empty()) {
248  // speed and vehsPerHour cannot be empty at the same time
249  if (myVehsPerHour.empty()) {
250  return false;
251  } else {
252  return true;
253  }
254  } else if (canParse<double>(value)) {
255  return (parse<double>(value) >= 0);
256  } else {
257  return false;
258  }
259  case SUMO_ATTR_COLOR:
260  return canParse<RGBColor>(value);
261  case SUMO_ATTR_BEGIN:
262  return canParse<SUMOTime>(value);
263  case SUMO_ATTR_END:
264  return canParse<SUMOTime>(value);
266  if ((value == "random") || (value == "free") || (value == "allowed") || (value == "best") || (value == "first")) {
267  return true;
268  } else {
269  return (myViewNet->getNet()->retrieveLane(value, false) != nullptr);
270  }
271  case SUMO_ATTR_DEPARTPOS:
272  if ((value == "random") || (value == "free") || (value == "random_free") || (value == "base") || (value == "last")) {
273  return true;
274  } else {
275  return canParse<double>(value);
276  }
278  if ((value == "random") || (value == "max")) {
279  return true;
280  } else {
281  return canParse<double>(value);
282  }
284  if (value == "current") {
285  return true;
286  } else {
287  return (myViewNet->getNet()->retrieveLane(value, false) != nullptr);
288  }
290  if ((value == "random") || (value == "max")) {
291  return true;
292  } else {
293  return canParse<double>(value);
294  }
296  if (value == "current") {
297  return true;
298  } else {
299  return canParse<double>(value);
300  }
301  case SUMO_ATTR_LINE:
302  return true;
304  return canParse<int>(value) && parse<int>(value) >= 0;
306  return canParse<int>(value) && parse<int>(value) >= 0;
307  case SUMO_ATTR_REROUTE:
308  return canParse<bool>(value);
313  case GNE_ATTR_PARAMETERS:
314  return Parameterised::areParametersValid(value);
315  default:
316  throw InvalidArgument(getTagStr() + " doesn't have an attribute of type '" + toString(key) + "'");
317  }
318 }
319 
320 
321 bool
323  return true;
324 }
325 
326 
327 std::string
329  return getTagStr();
330 }
331 
332 
333 std::string
335  return getTagStr() + ": " + getAttribute(SUMO_ATTR_BEGIN) + " -> " + getAttribute(SUMO_ATTR_END);
336 }
337 
338 // ===========================================================================
339 // private
340 // ===========================================================================
341 
342 void
343 GNECalibratorFlow::setAttribute(SumoXMLAttr key, const std::string& value) {
344  switch (key) {
345  case SUMO_ATTR_ID:
346  changeAdditionalID(value);
347  break;
348  case SUMO_ATTR_TYPE:
350  break;
351  case SUMO_ATTR_ROUTE:
353  break;
355  myVehsPerHour = value;
356  break;
357  case SUMO_ATTR_SPEED:
358  mySpeed = value;
359  break;
360  case SUMO_ATTR_COLOR:
361  myColor = parse<RGBColor>(value);
362  break;
363  case SUMO_ATTR_BEGIN:
364  myBegin = parse<SUMOTime>(value);
365  break;
366  case SUMO_ATTR_END:
367  myEnd = parse<SUMOTime>(value);
368  break;
370  myDepartLane = value;
371  break;
372  case SUMO_ATTR_DEPARTPOS:
373  myDepartPos = value;
374  break;
376  myDepartSpeed = value;
377  break;
379  myArrivalLane = value;
380  break;
382  myArrivalPos = value;
383  break;
385  myArrivalSpeed = value;
386  break;
387  case SUMO_ATTR_LINE:
388  myLine = value;
389  break;
391  myPersonNumber = parse<int>(value);
392  break;
394  myContainerNumber = parse<int>(value);
395  break;
396  case SUMO_ATTR_REROUTE:
397  myReroute = parse<bool>(value);
398  break;
400  myDepartPosLat = value;
401  break;
403  myArrivalPosLat = value;
404  break;
405  case GNE_ATTR_PARAMETERS:
406  setParametersStr(value);
407  break;
408  default:
409  throw InvalidArgument(getTagStr() + " doesn't have an attribute of type '" + toString(key) + "'");
410  }
411 }
412 
413 /****************************************************************************/
SUMO_ATTR_TYPE
Definition: SUMOXMLDefinitions.h:381
GNENet::retrieveAdditional
GNEAdditional * retrieveAdditional(SumoXMLTag type, const std::string &id, bool hardFail=true) const
Returns the named additional.
Definition: GNENet.cpp:2183
GNEDemandElement
An Element which don't belongs to GNENet but has influency in the simulation.
Definition: GNEDemandElement.h:55
GNEAdditional
An Element which don't belongs to GNENet but has influency in the simulation.
Definition: GNEAdditional.h:48
Parameterised::getParametersStr
std::string getParametersStr() const
Returns the inner key/value map in string format "key1=value1|key2=value2|...|keyN=valueN".
Definition: Parameterised.cpp:112
GNECalibratorFlow::myVehsPerHour
std::string myVehsPerHour
flows per hour (String instead float because can be empty)
Definition: GNECalibratorFlow.h:143
GNEAdditional::getAdditionalID
const std::string & getAdditionalID() const
Definition: GNEAdditional.cpp:476
GNEAttributeCarrier::getID
const std::string getID() const
function to support debugging
Definition: GNEAttributeCarrier.cpp:1289
GNECalibratorFlow::myArrivalSpeed
std::string myArrivalSpeed
arrival speed
Definition: GNECalibratorFlow.h:167
GNECalibratorFlow::commitGeometryMoving
void commitGeometryMoving(GNEUndoList *undoList)
commit geometry changes in the attributes of an element after use of moveGeometry(....
Definition: GNECalibratorFlow.cpp:82
GNECalibratorFlow::myArrivalPosLat
std::string myArrivalPosLat
Definition: GNECalibratorFlow.h:185
GNECalibratorFlow::myPersonNumber
int myPersonNumber
number of person
Definition: GNECalibratorFlow.h:173
GNECalibratorFlow::myDepartPos
std::string myDepartPos
depart position
Definition: GNECalibratorFlow.h:155
SUMO_ATTR_LINE
Definition: SUMOXMLDefinitions.h:775
SUMO_ATTR_ARRIVALPOS_LAT
Definition: SUMOXMLDefinitions.h:438
GNECalibratorFlow::getHierarchyName
std::string getHierarchyName() const
get Hierarchy Name (Used in AC Hierarchy)
Definition: GNECalibratorFlow.cpp:334
SUMOTime
long long int SUMOTime
Definition: SUMOTime.h:34
GNECalibratorFlow::isAttributeEnabled
bool isAttributeEnabled(SumoXMLAttr key) const
Definition: GNECalibratorFlow.cpp:322
GNENet::retrieveDemandElement
GNEDemandElement * retrieveDemandElement(SumoXMLTag type, const std::string &id, bool hardFail=true) const
Returns the named demand element.
Definition: GNENet.cpp:2316
SUMO_ATTR_COLOR
A color information.
Definition: SUMOXMLDefinitions.h:704
GNECalibratorFlow::myArrivalLane
std::string myArrivalLane
arrival lane
Definition: GNECalibratorFlow.h:161
SUMO_ATTR_SPEED
Definition: SUMOXMLDefinitions.h:384
GNECalibratorFlow::myContainerNumber
int myContainerNumber
number of container
Definition: GNECalibratorFlow.h:176
SUMO_ATTR_ARRIVALPOS
Definition: SUMOXMLDefinitions.h:437
SUMO_ATTR_ID
Definition: SUMOXMLDefinitions.h:378
SUMO_TAG_VTYPE
description of a vehicle type
Definition: SUMOXMLDefinitions.h:121
GNEAdditional::changeAdditionalID
void changeAdditionalID(const std::string &newID)
change ID of additional
Definition: GNEAdditional.cpp:502
GNECalibratorFlow::mySpeed
std::string mySpeed
flow speed (String instead float because can be empty)
Definition: GNECalibratorFlow.h:146
GNEAdditional::myViewNet
GNEViewNet * myViewNet
The GNEViewNet this additional element belongs.
Definition: GNEAdditional.h:335
GNECalibratorFlow::myBegin
SUMOTime myBegin
Definition: GNECalibratorFlow.h:190
SUMO_ATTR_BEGIN
weights: time range begin
Definition: SUMOXMLDefinitions.h:678
GNECalibratorFlow.h
GNEAttributeCarrier::GNEChange_Attribute
friend class GNEChange_Attribute
declare friend class
Definition: GNEAttributeCarrier.h:57
SUMO_ATTR_PERSON_NUMBER
Definition: SUMOXMLDefinitions.h:651
GNEUndoList::p_add
void p_add(GNEChange_Attribute *cmd)
special method, avoid empty changes, always execute
Definition: GNEUndoList.cpp:131
GNEViewNet::getNet
GNENet * getNet() const
get the net object
Definition: GNEViewNet.cpp:1014
GNECalibratorFlow::updateGeometry
void updateGeometry()
update pre-computed geometry information
Definition: GNECalibratorFlow.cpp:88
GNEHierarchicalParentElements::getParentAdditionals
const std::vector< GNEAdditional * > & getParentAdditionals() const
get parent additionals
Definition: GNEHierarchicalParentElements.cpp:85
GNECalibratorFlow::getAttributeDouble
double getAttributeDouble(SumoXMLAttr key) const
Definition: GNECalibratorFlow.cpp:177
RGBColor
Definition: RGBColor.h:39
SUMO_ATTR_ARRIVALSPEED
Definition: SUMOXMLDefinitions.h:439
GNECalibratorFlow::myVehicleType
GNEDemandElement * myVehicleType
type of flow
Definition: GNECalibratorFlow.h:137
GNECalibratorFlow::isValid
bool isValid(SumoXMLAttr key, const std::string &value)
method for checking if the key and their conrrespond attribute are valids
Definition: GNECalibratorFlow.cpp:225
GNEDemandElement.h
GNECalibratorFlow::moveGeometry
void moveGeometry(const Position &offset)
change the position of the element geometry without saving in undoList
Definition: GNECalibratorFlow.cpp:76
DEFAULT_VTYPE_ID
const std::string DEFAULT_VTYPE_ID
SUMO_ATTR_DEPARTPOS_LAT
Definition: SUMOXMLDefinitions.h:434
GNEViewNet.h
STEPS2TIME
#define STEPS2TIME(x)
Definition: SUMOTime.h:56
SUMO_ATTR_DEPARTSPEED
Definition: SUMOXMLDefinitions.h:435
SUMO_ATTR_ROUTE
Definition: SUMOXMLDefinitions.h:440
Boundary
A class that stores a 2D geometrical boundary.
Definition: Boundary.h:41
SUMO_ATTR_DEPARTLANE
Definition: SUMOXMLDefinitions.h:432
GNE_ATTR_PARAMETERS
parameters "key1=value1|key2=value2|...|keyN=valueN"
Definition: SUMOXMLDefinitions.h:989
GNECalibratorFlow::myDepartSpeed
std::string myDepartSpeed
depart speed
Definition: GNECalibratorFlow.h:158
SUMO_ATTR_CONTAINER_NUMBER
Definition: SUMOXMLDefinitions.h:652
Position
A point in 2D or 3D with translation and scaling methods.
Definition: Position.h:38
time2string
std::string time2string(SUMOTime t)
Definition: SUMOTime.cpp:67
GNENetElement
Definition: GNENetElement.h:43
GNECalibratorFlow::splitEdgeGeometry
void splitEdgeGeometry(const double splitPosition, const GNENetElement *originalElement, const GNENetElement *newElement, GNEUndoList *undoList)
split geometry
Definition: GNECalibratorFlow.cpp:106
GNECalibratorFlow::myReroute
bool myReroute
reroute
Definition: GNECalibratorFlow.h:179
GNECalibratorFlow::getPopUpID
std::string getPopUpID() const
get PopPup ID (Used in AC Hierarchy)
Definition: GNECalibratorFlow.cpp:328
GNECalibratorFlow::getParentName
std::string getParentName() const
Returns the name of the parent object.
Definition: GNECalibratorFlow.cpp:112
GNECalibratorFlow::getCenteringBoundary
Boundary getCenteringBoundary() const
Returns the boundary to which the view shall be centered in order to show the object.
Definition: GNECalibratorFlow.cpp:100
Parameterised::setParametersStr
void setParametersStr(const std::string &paramsString)
set the inner key/value map in string format "key1=value1|key2=value2|...|keyN=valueN"
Definition: Parameterised.cpp:139
GNECalibratorFlow::getPositionInView
Position getPositionInView() const
Returns position of additional in view.
Definition: GNECalibratorFlow.cpp:94
toString
std::string toString(const T &t, std::streamsize accuracy=gPrecision)
Definition: ToString.h:47
GNECalibratorFlow::myRoute
GNEDemandElement * myRoute
route in which this flow is used
Definition: GNECalibratorFlow.h:140
GNECalibratorFlow::myColor
RGBColor myColor
color of flow
Definition: GNECalibratorFlow.h:149
SUMOXMLDefinitions::isValidTypeID
static bool isValidTypeID(const std::string &value)
whether the given string is a valid id for an edge or vehicle type
Definition: SUMOXMLDefinitions.cpp:979
SUMO_TAG_FLOW_CALIBRATOR
a flow definition within in Calibrator (used in NETEDIT)
Definition: SUMOXMLDefinitions.h:153
GNECalibratorFlow::GNECalibratorFlow
GNECalibratorFlow(GNEAdditional *calibratorParent)
default constructor (used only in GNECalibratorDialog)
Definition: GNECalibratorFlow.cpp:35
GNECalibratorFlow::myDepartLane
std::string myDepartLane
depart lane
Definition: GNECalibratorFlow.h:152
Parameterised::areParametersValid
static bool areParametersValid(const std::string &value, bool report=false)
check if given string can be parsed to a parameters map "key1=value1|key2=value2|....
Definition: Parameterised.cpp:166
SUMO_ATTR_REROUTE
Definition: SUMOXMLDefinitions.h:648
InvalidArgument
Definition: UtilExceptions.h:56
SUMOXMLDefinitions::isValidVehicleID
static bool isValidVehicleID(const std::string &value)
whether the given string is a valid id for a vehicle or flow
Definition: SUMOXMLDefinitions.cpp:973
GNECalibratorFlow::getAttribute
std::string getAttribute(SumoXMLAttr key) const
inherited from GNEAttributeCarrier
Definition: GNECalibratorFlow.cpp:124
GLO_CALIBRATOR
a Calibrator
Definition: GUIGlObjectTypes.h:91
GNECalibratorFlow::~GNECalibratorFlow
~GNECalibratorFlow()
destructor
Definition: GNECalibratorFlow.cpp:72
SUMO_TAG_ROUTE
begin/end of the description of a route
Definition: SUMOXMLDefinitions.h:125
GNENet::retrieveLane
GNELane * retrieveLane(const std::string &id, bool failHard=true, bool checkVolatileChange=false)
get lane by id
Definition: GNENet.cpp:1228
StringBijection::hasString
bool hasString(const std::string &str) const
Definition: StringBijection.h:116
GNECalibratorFlow::drawGL
void drawGL(const GUIVisualizationSettings &s) const
Draws the object.
Definition: GNECalibratorFlow.cpp:118
GNECalibratorFlow::myEnd
SUMOTime myEnd
time step end
Definition: GNECalibratorFlow.h:193
SUMO_ATTR_END
weights: time range end
Definition: SUMOXMLDefinitions.h:680
SUMO_ATTR_DEPARTPOS
Definition: SUMOXMLDefinitions.h:433
SUMOXMLDefinitions::LateralAlignments
static StringBijection< LateralAlignment > LateralAlignments
lateral alignments
Definition: SUMOXMLDefinitions.h:1401
GNECalibratorFlow::myDepartPosLat
std::string myDepartPosLat
departPosLat
Definition: GNECalibratorFlow.h:182
GNECalibratorFlow::setAttribute
void setAttribute(SumoXMLAttr key, const std::string &value, GNEUndoList *undoList)
method for setting the attribute and letting the object perform additional changes
Definition: GNECalibratorFlow.cpp:190
GNEAttributeCarrier::getTagStr
const std::string & getTagStr() const
get tag assigned to this object in string format
Definition: GNEAttributeCarrier.cpp:1267
GNEUndoList
Definition: GNEUndoList.h:48
SUMO_ATTR_VEHSPERHOUR
Definition: SUMOXMLDefinitions.h:786
GUIVisualizationSettings
Stores the information about how to visualize structures.
Definition: GUIVisualizationSettings.h:345
GNECalibratorFlow::myLine
std::string myLine
line of bus/container stop
Definition: GNECalibratorFlow.h:170
GNEAdditional::isValidAdditionalID
bool isValidAdditionalID(const std::string &newID) const
check if a new additional ID is valid
Definition: GNEAdditional.cpp:482
SumoXMLAttr
SumoXMLAttr
Numbers representing SUMO-XML - attributes.
Definition: SUMOXMLDefinitions.h:372
SUMO_ATTR_ARRIVALLANE
Definition: SUMOXMLDefinitions.h:436
GNEChange_Attribute.h
GNENet.h
GNEUndoList.h
GNECalibratorFlow::myArrivalPos
std::string myArrivalPos
arrival pos
Definition: GNECalibratorFlow.h:164
GNE_ATTR_PARENT
parent of an additional element
Definition: SUMOXMLDefinitions.h:987