37 mySumoBaseObjectParent(parent),
40 myVehicleTypeParameter(
""),
41 myDefinedVehicleTypeParameter(false),
42 myDefinedVehicleParameter(false),
43 myDefinedStopParameter(false) {
53 if (mySumoBaseObjectParent) {
54 mySumoBaseObjectParent->removeSumoBaseObjectChild(
this);
57 while (mySumoBaseObjectChildren.size() > 0) {
58 delete mySumoBaseObjectChildren.back();
70 myStringAttributes.clear();
71 myIntAttributes.clear();
72 myDoubleAttributes.clear();
73 myBoolAttributes.clear();
74 myPositionAttributes.clear();
75 myTimeAttributes.clear();
76 myColorAttributes.clear();
77 myStringListAttributes.clear();
78 myPositionVectorAttributes.clear();
80 mySumoBaseObjectChildren.clear();
82 myDefinedVehicleTypeParameter =
false;
83 myDefinedVehicleParameter =
false;
84 myDefinedStopParameter =
false;
86 while (mySumoBaseObjectChildren.size() > 0) {
87 delete mySumoBaseObjectChildren.back();
106 return mySumoBaseObjectParent;
110 std::map<std::string, std::string>
112 std::map<std::string, std::string> result;
113 for (
const auto& attr : myStringAttributes) {
114 result[
toString(attr.first)] = attr.second;
116 for (
const auto& attr : myIntAttributes) {
119 for (
const auto& attr : myDoubleAttributes) {
122 for (
const auto& attr : myBoolAttributes) {
125 for (
const auto& attr : myPositionAttributes) {
128 for (
const auto& attr : myTimeAttributes) {
131 for (
const auto& attr : myColorAttributes) {
134 for (
const auto& attr : myStringListAttributes) {
137 for (
const auto& attr : myPositionVectorAttributes) {
146 if (hasStringAttribute(attr)) {
147 return myStringAttributes.at(attr);
149 handleAttributeError(attr,
"string");
157 if (hasIntAttribute(attr)) {
158 return myIntAttributes.at(attr);
160 handleAttributeError(attr,
"int");
168 if (hasDoubleAttribute(attr)) {
169 return myDoubleAttributes.at(attr);
171 handleAttributeError(attr,
"double");
179 if (hasBoolAttribute(attr)) {
180 return myBoolAttributes.at(attr);
182 handleAttributeError(attr,
"bool");
190 if (hasPositionAttribute(attr)) {
191 return myPositionAttributes.at(attr);
193 handleAttributeError(attr,
"position");
201 if (hasTimeAttribute(attr)) {
202 return myTimeAttributes.at(attr);
204 handleAttributeError(attr,
"time");
212 if (hasColorAttribute(attr)) {
213 return myColorAttributes.at(attr);
215 handleAttributeError(attr,
"color");
221 const std::vector<std::string>&
223 if (hasStringListAttribute(attr)) {
224 return myStringListAttributes.at(attr);
226 handleAttributeError(attr,
"string list");
234 if (hasPositionVectorAttribute(attr)) {
235 return myPositionVectorAttributes.at(attr);
237 handleAttributeError(attr,
"position vector");
251 if (myDefinedVehicleTypeParameter) {
252 return myVehicleTypeParameter;
261 if (myDefinedVehicleParameter) {
262 return myVehicleParameter;
271 if (myDefinedStopParameter) {
272 return myStopParameter;
280 const std::map<std::string, std::string>&
286 const std::vector<CommonXMLStructure::SumoBaseObject*>&
288 return mySumoBaseObjectChildren;
294 return myStringAttributes.count(attr) > 0;
300 return myIntAttributes.count(attr) > 0;
306 return myDoubleAttributes.count(attr) > 0;
312 return myBoolAttributes.count(attr) > 0;
318 return myPositionAttributes.count(attr) > 0;
324 return myTimeAttributes.count(attr) > 0;
330 return myColorAttributes.count(attr) > 0;
336 return myStringListAttributes.count(attr) > 0;
342 return myPositionVectorAttributes.count(attr) > 0;
348 myStringAttributes[attr] = value;
354 myIntAttributes[attr] = value;
360 myDoubleAttributes[attr] = value;
366 myBoolAttributes[attr] = value;
372 myPositionAttributes[attr] = value;
378 myTimeAttributes[attr] = value;
384 myColorAttributes[attr] = value;
390 myStringListAttributes[attr] = value;
396 myPositionVectorAttributes[attr] = value;
408 myVehicleTypeParameter = *vehicleTypeParameter;
409 myDefinedVehicleTypeParameter =
true;
411 addStringAttribute(
SUMO_ATTR_ID, myVehicleTypeParameter.id);
417 myVehicleParameter = *vehicleParameter;
418 myDefinedVehicleParameter =
true;
420 if (!myVehicleParameter.id.empty()) {
421 addStringAttribute(
SUMO_ATTR_ID, myVehicleParameter.id);
424 if (!vehicleParameter->
routeid.empty()) {
432 myStopParameter = stopParameter;
433 myDefinedStopParameter =
true;
435 if (!myStopParameter.edge.empty()) {
439 if (!myStopParameter.lane.empty()) {
443 if (!myStopParameter.busstop.empty()) {
447 if (!myStopParameter.containerstop.empty()) {
451 if (!myStopParameter.parkingarea.empty()) {
455 if (!myStopParameter.chargingStation.empty()) {
464 if (myDefinedVehicleTypeParameter) {
465 myVehicleTypeParameter.setParameter(key, value);
466 }
else if (myDefinedVehicleParameter) {
467 myVehicleParameter.setParameter(key, value);
468 }
else if (myDefinedStopParameter) {
469 myStopParameter.setParameter(key, value);
471 myParameters[key] = value;
479 mySumoBaseObjectChildren.push_back(sumoBaseObject);
486 auto it = std::find(mySumoBaseObjectChildren.begin(), mySumoBaseObjectChildren.end(), sumoBaseObject);
488 if (it != mySumoBaseObjectChildren.end()) {
489 mySumoBaseObjectChildren.erase(it);
496 WRITE_ERROR(
"Trying to get undefined " + type +
" attribute '" +
toString(attr) +
"' in SUMOBaseObject '" +
toString(myTag) +
"'");
std::string time2string(SUMOTime t)
convert SUMOTime to string
SUMOVehicleClass
Definition of vehicle classes to differ between different lane usage and authority types.
@ SVC_IGNORING
vehicles ignoring classes
SumoXMLTag
Numbers representing SUMO-XML - element names.
@ SUMO_TAG_NOTHING
invalid tag
@ SUMO_TAG_ROOTFILE
root file
SumoXMLAttr
Numbers representing SUMO-XML - attributes.
@ SUMO_ATTR_CONTAINER_STOP
@ SUMO_ATTR_CHARGING_STATION
std::string toString(const T &t, std::streamsize accuracy=gPrecision)
void addIntAttribute(const SumoXMLAttr attr, const int value)
add int attribute into current SumoBaseObject node
void setVehicleTypeParameter(const SUMOVTypeParameter *vehicleTypeParameter)
set vehicle type parameters
void addSumoBaseObjectChild(SumoBaseObject *sumoBaseObject)
add SumoBaseObject child
const SUMOVehicleParameter::Stop & getStopParameter() const
get stop parameters
const RGBColor & getColorAttribute(const SumoXMLAttr attr) const
get color attribute
SUMOTime getTimeAttribute(const SumoXMLAttr attr) const
get time attribute
const PositionVector & getPositionVectorAttribute(const SumoXMLAttr attr) const
get PositionVector attribute
SumoBaseObject(SumoBaseObject *sumoBaseObjectParent)
constructor
bool hasBoolAttribute(const SumoXMLAttr attr) const
check if current SumoBaseObject has the given bool attribute
void removeSumoBaseObjectChild(SumoBaseObject *sumoBaseObject)
remove SumoBaseObject child
bool hasStringAttribute(const SumoXMLAttr attr) const
has function
std::map< std::string, std::string > getAllAttributes() const
get all attributes in string format
bool hasPositionAttribute(const SumoXMLAttr attr) const
check if current SumoBaseObject has the given bool attribute
void setTag(const SumoXMLTag tag)
set SumoBaseObject tag
SumoBaseObject * getParentSumoBaseObject() const
get pointer to mySumoBaseObjectParent SumoBaseObject (if is null, then is the root)
const Position & getPositionAttribute(const SumoXMLAttr attr) const
get Position attribute
void addPositionVectorAttribute(const SumoXMLAttr attr, const PositionVector &value)
add PositionVector attribute into current SumoBaseObject node
const std::map< std::string, std::string > & getParameters() const
get parameters
SUMOVehicleClass getVClass() const
vehicle class
SumoBaseObject * mySumoBaseObjectParent
pointer to SumoBaseObject parent (If is null, then is the root)
bool hasPositionVectorAttribute(const SumoXMLAttr attr) const
check if current SumoBaseObject has the given positionVector attribute
bool hasTimeAttribute(const SumoXMLAttr attr) const
check if current SumoBaseObject has the given time attribute
void addBoolAttribute(const SumoXMLAttr attr, const bool value)
add bool attribute into current SumoBaseObject node
const SUMOVTypeParameter & getVehicleTypeParameter() const
get current vType
SumoXMLTag getTag() const
void addParameter(const std::string &key, const std::string &value)
add parameter into current SumoBaseObject node
~SumoBaseObject()
destructor
bool hasColorAttribute(const SumoXMLAttr attr) const
check if current SumoBaseObject has the given color attribute
void addTimeAttribute(const SumoXMLAttr attr, const SUMOTime value)
add time attribute into current SumoBaseObject node
void addStringListAttribute(const SumoXMLAttr attr, const std::vector< std::string > &value)
add string list attribute into current SumoBaseObject node
bool hasIntAttribute(const SumoXMLAttr attr) const
check if current SumoBaseObject has the given int attribute
int getIntAttribute(const SumoXMLAttr attr) const
get int attribute
void addDoubleAttribute(const SumoXMLAttr attr, const double value)
add double attribute into current SumoBaseObject node
void handleAttributeError(const SumoXMLAttr attr, const std::string &type) const
handle attribute error
bool hasDoubleAttribute(const SumoXMLAttr attr) const
check if current SumoBaseObject has the given double attribute
void addPositionAttribute(const SumoXMLAttr attr, const Position &value)
add Position attribute into current SumoBaseObject node
bool getBoolAttribute(const SumoXMLAttr attr) const
get bool attribute
void setVClass(SUMOVehicleClass vClass)
set vehicle class
void setVehicleParameter(const SUMOVehicleParameter *vehicleParameter)
set vehicle parameters
void addStringAttribute(const SumoXMLAttr attr, const std::string &value)
void setStopParameter(const SUMOVehicleParameter::Stop &stopParameter)
add stop parameters
double getDoubleAttribute(const SumoXMLAttr attr) const
get double attribute
const SUMOVehicleParameter & getVehicleParameter() const
get vehicle parameters
const std::vector< std::string > & getStringListAttribute(const SumoXMLAttr attr) const
get string list attribute
bool hasStringListAttribute(const SumoXMLAttr attr) const
check if current SumoBaseObject has the given string list attribute
void clear()
clear SumoBaseObject
void addColorAttribute(const SumoXMLAttr attr, const RGBColor &value)
add color attribute into current SumoBaseObject node
const std::string & getStringAttribute(const SumoXMLAttr attr) const
get string attribute
const std::vector< SumoBaseObject * > & getSumoBaseObjectChildren() const
get SumoBaseObject children
CommonXMLStructure::SumoBaseObject * getSumoBaseObjectRoot() const
get SumoBaseObject root
CommonXMLStructure::SumoBaseObject * getCurrentSumoBaseObject() const
get current editedSumoBaseObject
void openSUMOBaseOBject()
open SUMOBaseOBject
CommonXMLStructure::SumoBaseObject * mySumoBaseObjectRoot
SumoBaseObject root.
CommonXMLStructure()
Constructor.
CommonXMLStructure::SumoBaseObject * myCurrentSumoBaseObject
last inserted SumoBaseObject
void closeSUMOBaseOBject()
close myTag
~CommonXMLStructure()
Destructor.
A point in 2D or 3D with translation and scaling methods.
Structure representing possible vehicle parameter.
Definition of vehicle stop (position and duration)
Structure representing possible vehicle parameter.
std::string routeid
The vehicle's route id.