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 /****************************************************************************/
15 //
16 /****************************************************************************/
17 
18 // ===========================================================================
19 // included modules
20 // ===========================================================================
21 
22 #include <netedit/GNENet.h>
23 #include <netedit/GNEUndoList.h>
24 #include <netedit/GNEViewNet.h>
27 
28 #include "GNECalibratorFlow.h"
29 
30 
31 // ===========================================================================
32 // member method definitions
33 // ===========================================================================
34 
35 
37  GNEAdditional(calibratorParent, calibratorParent->getViewNet(), GLO_CALIBRATOR, SUMO_TAG_FLOW_CALIBRATOR, "", false,
38 {}, {}, {}, {calibratorParent}, {}, {}, {}, {}, {}, {}),
39 myVehicleType(calibratorParent->getViewNet()->getNet()->retrieveDemandElement(SUMO_TAG_VTYPE, DEFAULT_VTYPE_ID)),
40 myRoute(calibratorParent->getViewNet()->getNet()->getAttributeCarriers().demandElements.at(SUMO_TAG_ROUTE).begin()->second) {
41  // fill calibrator flows with default values
42  setDefaultValues();
43 }
44 
45 
46 GNECalibratorFlow::GNECalibratorFlow(GNEAdditional* calibratorParent, GNEDemandElement* vehicleType, GNEDemandElement* route, const std::string& vehsPerHour, const std::string& speed,
47  const RGBColor& color, const std::string& departLane, const std::string& departPos, const std::string& departSpeed, const std::string& arrivalLane,
48  const std::string& arrivalPos, const std::string& arrivalSpeed, const std::string& line, int personNumber, int containerNumber, bool reroute,
49  const std::string& departPosLat, const std::string& arrivalPosLat, SUMOTime begin, SUMOTime end) :
50  GNEAdditional(calibratorParent, calibratorParent->getViewNet(), GLO_CALIBRATOR, SUMO_TAG_FLOW_CALIBRATOR, "", false,
51 {}, {}, {}, {calibratorParent}, {}, {}, {}, {}, {}, {}),
52 myVehicleType(vehicleType),
53 myRoute(route),
54 myVehsPerHour(vehsPerHour),
55 mySpeed(speed),
56 myColor(color),
57 myDepartLane(departLane),
58 myDepartPos(departPos),
59 myDepartSpeed(departSpeed),
60 myArrivalLane(arrivalLane),
61 myArrivalPos(arrivalPos),
62 myArrivalSpeed(arrivalSpeed),
63 myLine(line),
64 myPersonNumber(personNumber),
65 myContainerNumber(containerNumber),
66 myReroute(reroute),
67 myDepartPosLat(departPosLat),
68 myArrivalPosLat(arrivalPosLat),
69 myBegin(begin),
70 myEnd(end) {
71 }
72 
73 
75 
76 
77 void
79  // This additional cannot be moved
80 }
81 
82 
83 void
85  // This additional cannot be moved
86 }
87 
88 
89 void
91  // Currently this additional doesn't own a Geometry
92 }
93 
94 
97  return getAdditionalParents().at(0)->getPositionInView();
98 }
99 
100 
101 Boundary
103  return getAdditionalParents().at(0)->getCenteringBoundary();
104 }
105 
106 
107 std::string
109  return getAdditionalParents().at(0)->getID();
110 }
111 
112 
113 void
115  // Currently This additional isn't drawn
116 }
117 
118 
119 std::string
121  switch (key) {
122  case SUMO_ATTR_ID:
123  return getAdditionalID();
124  case SUMO_ATTR_TYPE:
125  return myVehicleType->getID();
126  case SUMO_ATTR_ROUTE:
127  return myRoute->getID();
129  return toString(myVehsPerHour);
130  case SUMO_ATTR_SPEED:
131  return toString(mySpeed);
132  case SUMO_ATTR_COLOR:
133  return toString(myColor);
134  case SUMO_ATTR_BEGIN:
135  return time2string(myBegin);
136  case SUMO_ATTR_END:
137  return time2string(myEnd);
139  return myDepartLane;
140  case SUMO_ATTR_DEPARTPOS:
141  return myDepartPos;
143  return myDepartSpeed;
145  return myArrivalLane;
147  return myArrivalPos;
149  return myArrivalSpeed;
150  case SUMO_ATTR_LINE:
151  return myLine;
153  return toString(myPersonNumber);
155  return toString(myContainerNumber);
156  case SUMO_ATTR_REROUTE:
157  return toString(myReroute);
159  return myDepartPosLat;
161  return myArrivalPosLat;
162  case GNE_ATTR_PARENT:
163  return getAdditionalParents().at(0)->getID();
164  case GNE_ATTR_GENERIC:
165  return getGenericParametersStr();
166  default:
167  throw InvalidArgument(getTagStr() + " doesn't have an attribute of type '" + toString(key) + "'");
168  }
169 }
170 
171 
172 void
173 GNECalibratorFlow::setAttribute(SumoXMLAttr key, const std::string& value, GNEUndoList* undoList) {
174  if (value == getAttribute(key)) {
175  return; //avoid needless changes, later logic relies on the fact that attributes have changed
176  }
177  switch (key) {
178  case SUMO_ATTR_ID:
179  case SUMO_ATTR_TYPE:
180  case SUMO_ATTR_ROUTE:
181  case SUMO_ATTR_COLOR:
183  case SUMO_ATTR_SPEED:
184  case SUMO_ATTR_BEGIN:
185  case SUMO_ATTR_END:
187  case SUMO_ATTR_DEPARTPOS:
192  case SUMO_ATTR_LINE:
195  case SUMO_ATTR_REROUTE:
198  case GNE_ATTR_GENERIC:
199  undoList->p_add(new GNEChange_Attribute(this, myViewNet->getNet(), key, value));
200  break;
201  default:
202  throw InvalidArgument(getTagStr() + " doesn't have an attribute of type '" + toString(key) + "'");
203  }
204 }
205 
206 
207 bool
208 GNECalibratorFlow::isValid(SumoXMLAttr key, const std::string& value) {
209  switch (key) {
210  case SUMO_ATTR_ID:
211  return isValidAdditionalID(value);
212  case SUMO_ATTR_TYPE:
213  return SUMOXMLDefinitions::isValidTypeID(value) && (myViewNet->getNet()->retrieveDemandElement(SUMO_TAG_VTYPE, value, false) != nullptr);
214  case SUMO_ATTR_ROUTE:
215  return SUMOXMLDefinitions::isValidVehicleID(value) && (myViewNet->getNet()->retrieveAdditional(SUMO_TAG_ROUTE, value, false) != nullptr);
217  if (value.empty()) {
218  // speed and vehsPerHour cannot be empty at the same time
219  if (mySpeed.empty()) {
220  return false;
221  } else {
222  return true;
223  }
224  } else if (canParse<double>(value)) {
225  return (parse<double>(value) >= 0);
226  } else {
227  return false;
228  }
229  case SUMO_ATTR_SPEED:
230  if (value.empty()) {
231  // speed and vehsPerHour cannot be empty at the same time
232  if (myVehsPerHour.empty()) {
233  return false;
234  } else {
235  return true;
236  }
237  } else if (canParse<double>(value)) {
238  return (parse<double>(value) >= 0);
239  } else {
240  return false;
241  }
242  case SUMO_ATTR_COLOR:
243  return canParse<RGBColor>(value);
244  case SUMO_ATTR_BEGIN:
245  return canParse<SUMOTime>(value);
246  case SUMO_ATTR_END:
247  return canParse<SUMOTime>(value);
249  if ((value == "random") || (value == "free") || (value == "allowed") || (value == "best") || (value == "first")) {
250  return true;
251  } else {
252  return (myViewNet->getNet()->retrieveLane(value, false) != nullptr);
253  }
254  case SUMO_ATTR_DEPARTPOS:
255  if ((value == "random") || (value == "free") || (value == "random_free") || (value == "base") || (value == "last")) {
256  return true;
257  } else {
258  return canParse<double>(value);
259  }
261  if ((value == "random") || (value == "max")) {
262  return true;
263  } else {
264  return canParse<double>(value);
265  }
267  if (value == "current") {
268  return true;
269  } else {
270  return (myViewNet->getNet()->retrieveLane(value, false) != nullptr);
271  }
273  if ((value == "random") || (value == "max")) {
274  return true;
275  } else {
276  return canParse<double>(value);
277  }
279  if (value == "current") {
280  return true;
281  } else {
282  return canParse<double>(value);
283  }
284  case SUMO_ATTR_LINE:
285  return true;
287  return canParse<int>(value) && parse<int>(value) >= 0;
289  return canParse<int>(value) && parse<int>(value) >= 0;
290  case SUMO_ATTR_REROUTE:
291  return canParse<bool>(value);
296  case GNE_ATTR_GENERIC:
297  return isGenericParametersValid(value);
298  default:
299  throw InvalidArgument(getTagStr() + " doesn't have an attribute of type '" + toString(key) + "'");
300  }
301 }
302 
303 
304 std::string
306  return getTagStr();
307 }
308 
309 
310 std::string
312  return getTagStr() + ": " + getAttribute(SUMO_ATTR_BEGIN) + " -> " + getAttribute(SUMO_ATTR_END);
313 }
314 
315 // ===========================================================================
316 // private
317 // ===========================================================================
318 
319 void
320 GNECalibratorFlow::setAttribute(SumoXMLAttr key, const std::string& value) {
321  switch (key) {
322  case SUMO_ATTR_ID:
323  changeAdditionalID(value);
324  break;
325  case SUMO_ATTR_TYPE:
327  break;
328  case SUMO_ATTR_ROUTE:
330  break;
332  myVehsPerHour = value;
333  break;
334  case SUMO_ATTR_SPEED:
335  mySpeed = value;
336  break;
337  case SUMO_ATTR_COLOR:
338  myColor = parse<RGBColor>(value);
339  break;
340  case SUMO_ATTR_BEGIN:
341  myBegin = parse<SUMOTime>(value);
342  break;
343  case SUMO_ATTR_END:
344  myEnd = parse<SUMOTime>(value);
345  break;
347  myDepartLane = value;
348  break;
349  case SUMO_ATTR_DEPARTPOS:
350  myDepartPos = value;
351  break;
353  myDepartSpeed = value;
354  break;
356  myArrivalLane = value;
357  break;
359  myArrivalPos = value;
360  break;
362  myArrivalSpeed = value;
363  break;
364  case SUMO_ATTR_LINE:
365  myLine = value;
366  break;
368  myPersonNumber = parse<int>(value);
369  break;
371  myContainerNumber = parse<int>(value);
372  break;
373  case SUMO_ATTR_REROUTE:
374  myReroute = parse<bool>(value);
375  break;
377  myDepartPosLat = value;
378  break;
380  myArrivalPosLat = value;
381  break;
382  case GNE_ATTR_GENERIC:
384  break;
385  default:
386  throw InvalidArgument(getTagStr() + " doesn't have an attribute of type '" + toString(key) + "'");
387  }
388 }
389 
390 /****************************************************************************/
SUMO_ATTR_TYPE
Definition: SUMOXMLDefinitions.h:382
GNENet::retrieveAdditional
GNEAdditional * retrieveAdditional(SumoXMLTag type, const std::string &id, bool hardFail=true) const
Returns the named additional.
Definition: GNENet.cpp:2133
GNEDemandElement
An Element which don't belongs to GNENet but has influency in the simulation.
Definition: GNEDemandElement.h:54
GNEAdditional
An Element which don't belongs to GNENet but has influency in the simulation.
Definition: GNEAdditional.h:47
GNEAdditional::setGenericParametersStr
void setGenericParametersStr(const std::string &value)
set generic parameters in string format
Definition: GNEAdditional.cpp:704
GNECalibratorFlow::myVehsPerHour
std::string myVehsPerHour
flows per hour (String instead float because can be empty)
Definition: GNECalibratorFlow.h:130
GNEAdditional::getAdditionalID
const std::string & getAdditionalID() const
Definition: GNEAdditional.cpp:578
GNEAttributeCarrier::getID
const std::string getID() const
function to support debugging
Definition: GNEAttributeCarrier.cpp:1187
GNECalibratorFlow::myArrivalSpeed
std::string myArrivalSpeed
arrival speed
Definition: GNECalibratorFlow.h:154
GNECalibratorFlow::commitGeometryMoving
void commitGeometryMoving(GNEUndoList *undoList)
commit geometry changes in the attributes of an element after use of moveGeometry(....
Definition: GNECalibratorFlow.cpp:84
GNECalibratorFlow::myArrivalPosLat
std::string myArrivalPosLat
Definition: GNECalibratorFlow.h:172
GNECalibratorFlow::myPersonNumber
int myPersonNumber
number of person
Definition: GNECalibratorFlow.h:160
GNECalibratorFlow::myDepartPos
std::string myDepartPos
depart position
Definition: GNECalibratorFlow.h:142
SUMO_ATTR_LINE
Definition: SUMOXMLDefinitions.h:772
SUMO_ATTR_ARRIVALPOS_LAT
Definition: SUMOXMLDefinitions.h:439
GNECalibratorFlow::getHierarchyName
std::string getHierarchyName() const
get Hierarchy Name (Used in AC Hierarchy)
Definition: GNECalibratorFlow.cpp:311
GNEAttributeCarrier::isGenericParametersValid
static bool isGenericParametersValid(const std::string &value)
check if given string can be parsed to a map/list of generic parameters
Definition: GNEAttributeCarrier.cpp:1354
SUMOTime
long long int SUMOTime
Definition: SUMOTime.h:35
GNENet::retrieveDemandElement
GNEDemandElement * retrieveDemandElement(SumoXMLTag type, const std::string &id, bool hardFail=true) const
Returns the named demand element.
Definition: GNENet.cpp:2266
SUMO_ATTR_COLOR
A color information.
Definition: SUMOXMLDefinitions.h:701
GNECalibratorFlow::myArrivalLane
std::string myArrivalLane
arrival lane
Definition: GNECalibratorFlow.h:148
SUMO_ATTR_SPEED
Definition: SUMOXMLDefinitions.h:385
GNECalibratorFlow::myContainerNumber
int myContainerNumber
number of container
Definition: GNECalibratorFlow.h:163
SUMO_ATTR_ARRIVALPOS
Definition: SUMOXMLDefinitions.h:438
SUMO_ATTR_ID
Definition: SUMOXMLDefinitions.h:379
SUMO_TAG_VTYPE
description of a vehicle type
Definition: SUMOXMLDefinitions.h:122
GNEAdditional::changeAdditionalID
void changeAdditionalID(const std::string &newID)
change ID of additional
Definition: GNEAdditional.cpp:604
GNECalibratorFlow::mySpeed
std::string mySpeed
flow speed (String instead float because can be empty)
Definition: GNECalibratorFlow.h:133
GNEAdditional::myViewNet
GNEViewNet * myViewNet
The GNEViewNet this additional element belongs.
Definition: GNEAdditional.h:365
GNECalibratorFlow::myBegin
SUMOTime myBegin
Definition: GNECalibratorFlow.h:177
SUMO_ATTR_BEGIN
weights: time range begin
Definition: SUMOXMLDefinitions.h:675
GNECalibratorFlow.h
GNEAttributeCarrier::GNEChange_Attribute
friend class GNEChange_Attribute
declare friend class
Definition: GNEAttributeCarrier.h:57
SUMO_ATTR_PERSON_NUMBER
Definition: SUMOXMLDefinitions.h:649
GNEUndoList::p_add
void p_add(GNEChange_Attribute *cmd)
special method, avoid empty changes, always execute
Definition: GNEUndoList.cpp:132
GNEViewNet::getNet
GNENet * getNet() const
get the net object
Definition: GNEViewNet.cpp:927
GNECalibratorFlow::updateGeometry
void updateGeometry()
update pre-computed geometry information
Definition: GNECalibratorFlow.cpp:90
RGBColor
Definition: RGBColor.h:40
SUMO_ATTR_ARRIVALSPEED
Definition: SUMOXMLDefinitions.h:440
GNECalibratorFlow::myVehicleType
GNEDemandElement * myVehicleType
type of flow
Definition: GNECalibratorFlow.h:124
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:208
GNEDemandElement.h
GNECalibratorFlow::moveGeometry
void moveGeometry(const Position &offset)
change the position of the element geometry without saving in undoList
Definition: GNECalibratorFlow.cpp:78
DEFAULT_VTYPE_ID
const std::string DEFAULT_VTYPE_ID
SUMO_ATTR_DEPARTPOS_LAT
Definition: SUMOXMLDefinitions.h:435
GNEViewNet.h
SUMO_ATTR_DEPARTSPEED
Definition: SUMOXMLDefinitions.h:436
SUMO_ATTR_ROUTE
Definition: SUMOXMLDefinitions.h:441
Boundary
A class that stores a 2D geometrical boundary.
Definition: Boundary.h:42
SUMO_ATTR_DEPARTLANE
Definition: SUMOXMLDefinitions.h:433
GNECalibratorFlow::myDepartSpeed
std::string myDepartSpeed
depart speed
Definition: GNECalibratorFlow.h:145
SUMO_ATTR_CONTAINER_NUMBER
Definition: SUMOXMLDefinitions.h:650
Position
A point in 2D or 3D with translation and scaling methods.
Definition: Position.h:39
time2string
std::string time2string(SUMOTime t)
Definition: SUMOTime.cpp:65
GNECalibratorFlow::myReroute
bool myReroute
reroute
Definition: GNECalibratorFlow.h:166
GNECalibratorFlow::getPopUpID
std::string getPopUpID() const
get PopPup ID (Used in AC Hierarchy)
Definition: GNECalibratorFlow.cpp:305
GNECalibratorFlow::getParentName
std::string getParentName() const
Returns the name of the parent object.
Definition: GNECalibratorFlow.cpp:108
GNECalibratorFlow::getCenteringBoundary
Boundary getCenteringBoundary() const
Returns the boundary to which the view shall be centered in order to show the object.
Definition: GNECalibratorFlow.cpp:102
GNECalibratorFlow::getPositionInView
Position getPositionInView() const
Returns position of additional in view.
Definition: GNECalibratorFlow.cpp:96
toString
std::string toString(const T &t, std::streamsize accuracy=gPrecision)
Definition: ToString.h:48
GNE_ATTR_GENERIC
generic attribute
Definition: SUMOXMLDefinitions.h:986
GNECalibratorFlow::myRoute
GNEDemandElement * myRoute
route in which this flow is used
Definition: GNECalibratorFlow.h:127
GNECalibratorFlow::myColor
RGBColor myColor
color of flow
Definition: GNECalibratorFlow.h:136
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:976
SUMO_TAG_FLOW_CALIBRATOR
a flow definition within in Calibrator (used in NETEDIT)
Definition: SUMOXMLDefinitions.h:154
GNECalibratorFlow::GNECalibratorFlow
GNECalibratorFlow(GNEAdditional *calibratorParent)
default constructor (used only in GNECalibratorDialog)
Definition: GNECalibratorFlow.cpp:36
GNECalibratorFlow::myDepartLane
std::string myDepartLane
depart lane
Definition: GNECalibratorFlow.h:139
GNEHierarchicalElementParents::getAdditionalParents
const std::vector< GNEAdditional * > & getAdditionalParents() const
return vector of additionals that have as Parent this edge (For example, Calibrators)
Definition: GNEHierarchicalElementParents.cpp:86
SUMO_ATTR_REROUTE
Definition: SUMOXMLDefinitions.h:646
InvalidArgument
Definition: UtilExceptions.h:57
GNEAdditional::getGenericParametersStr
std::string getGenericParametersStr() const
return generic parameters in string format
Definition: GNEAdditional.cpp:678
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:970
GNECalibratorFlow::getAttribute
std::string getAttribute(SumoXMLAttr key) const
inherited from GNEAttributeCarrier
Definition: GNECalibratorFlow.cpp:120
GLO_CALIBRATOR
a Calibrator
Definition: GUIGlObjectTypes.h:92
GNECalibratorFlow::~GNECalibratorFlow
~GNECalibratorFlow()
destructor
Definition: GNECalibratorFlow.cpp:74
SUMO_TAG_ROUTE
begin/end of the description of a route
Definition: SUMOXMLDefinitions.h:126
GNENet::retrieveLane
GNELane * retrieveLane(const std::string &id, bool failHard=true, bool checkVolatileChange=false)
get lane by id
Definition: GNENet.cpp:1179
StringBijection::hasString
bool hasString(const std::string &str) const
Definition: StringBijection.h:117
GNECalibratorFlow::drawGL
void drawGL(const GUIVisualizationSettings &s) const
Draws the object.
Definition: GNECalibratorFlow.cpp:114
GNECalibratorFlow::myEnd
SUMOTime myEnd
time step end
Definition: GNECalibratorFlow.h:180
SUMO_ATTR_END
weights: time range end
Definition: SUMOXMLDefinitions.h:677
SUMO_ATTR_DEPARTPOS
Definition: SUMOXMLDefinitions.h:434
SUMOXMLDefinitions::LateralAlignments
static StringBijection< LateralAlignment > LateralAlignments
lateral alignments
Definition: SUMOXMLDefinitions.h:1396
GNECalibratorFlow::myDepartPosLat
std::string myDepartPosLat
departPosLat
Definition: GNECalibratorFlow.h:169
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:173
GNEAttributeCarrier::getTagStr
const std::string & getTagStr() const
get tag assigned to this object in string format
Definition: GNEAttributeCarrier.cpp:1165
GNEUndoList
Definition: GNEUndoList.h:49
SUMO_ATTR_VEHSPERHOUR
Definition: SUMOXMLDefinitions.h:783
GUIVisualizationSettings
Stores the information about how to visualize structures.
Definition: GUIVisualizationSettings.h:346
GNECalibratorFlow::myLine
std::string myLine
line of bus/container stop
Definition: GNECalibratorFlow.h:157
GNEAdditional::isValidAdditionalID
bool isValidAdditionalID(const std::string &newID) const
check if a new additional ID is valid
Definition: GNEAdditional.cpp:584
SumoXMLAttr
SumoXMLAttr
Numbers representing SUMO-XML - attributes.
Definition: SUMOXMLDefinitions.h:373
SUMO_ATTR_ARRIVALLANE
Definition: SUMOXMLDefinitions.h:437
GNEChange_Attribute.h
GNENet.h
GNEUndoList.h
GNECalibratorFlow::myArrivalPos
std::string myArrivalPos
arrival pos
Definition: GNECalibratorFlow.h:151
GNE_ATTR_PARENT
parent of an additional element
Definition: SUMOXMLDefinitions.h:984