54 myAllowUndoRedo(allowUndoRedo),
55 myOverwrite(overwrite) {
84 if (vTypeDistribution) {
90 if (vTypeDistribution) {
93 vType->
incRef(
"buildVType");
101 const std::vector<std::string>& vTypeIDs,
const std::vector<double>& probabilities) {
103 std::vector<const GNEDemandElement*> vTypes;
115 for (
int i = 0; i < (int)vTypes.size(); i++) {
122 for (
int i = 0; i < (int)vTypes.size(); i++) {
125 vTypeDistribution->
incRef(
"buildVTypeDistribution");
133 const std::vector<std::string>& edgeIDs,
const RGBColor& color,
const int repeat,
const SUMOTime cycleTime,
140 }
else if (edges.size() > 0) {
152 if (routeDistribution) {
158 for (
const auto& edge : edges) {
159 edge->addChildElement(route);
161 if (routeDistribution) {
164 route->
incRef(
"buildRoute");
184 if (type ==
nullptr) {
206 for (
const auto& edge : edges) {
207 edge->addChildElement(route);
209 vehicle->
incRef(
"buildEmbeddedRoute");
210 route->
incRef(
"buildEmbeddedRoute");
219 const std::vector<std::string>& routeIDs,
const std::vector<double>& probabilities) {
221 std::vector<const GNEDemandElement*> routes;
233 for (
int i = 0; i < (int)routes.size(); i++) {
240 for (
int i = 0; i < (int)routes.size(); i++) {
243 routeDistribution->
incRef(
"buildRouteDistribution");
256 if (type ==
nullptr) {
258 }
else if (route ==
nullptr) {
277 vehicle->
incRef(
"buildVehicleOverRoute");
291 if (type ==
nullptr) {
293 }
else if (route ==
nullptr) {
312 flow->
incRef(
"buildFlowOverRoute");
321 const std::string& fromEdgeID,
const std::string& toEdgeID) {
333 if (type ==
nullptr) {
351 trip->
incRef(
"buildTrip");
353 fromEdge->addChildElement(trip);
354 toEdge->addChildElement(trip);
363 const std::string& fromJunctionID,
const std::string& toJunctionID) {
371 if (type ==
nullptr) {
389 flow->
incRef(
"buildFlow");
391 fromJunction->addChildElement(flow);
392 toJunction->addChildElement(flow);
401 const std::string& fromTAZID,
const std::string& toTAZID) {
409 if (type ==
nullptr) {
427 flow->
incRef(
"buildFlow");
429 fromTAZ->addChildElement(flow);
430 toTAZ->addChildElement(flow);
439 const std::string& fromEdgeID,
const std::string& toEdgeID) {
451 if (type ==
nullptr) {
469 flow->
incRef(
"buildFlow");
471 fromEdge->addChildElement(flow);
472 toEdge->addChildElement(flow);
481 const std::string& fromJunctionID,
const std::string& toJunctionID) {
489 if (type ==
nullptr) {
507 flow->
incRef(
"buildFlow");
509 fromJunction->addChildElement(flow);
510 toJunction->addChildElement(flow);
519 const std::string& fromTAZID,
const std::string& toTAZID) {
527 if (type ==
nullptr) {
545 flow->
incRef(
"buildFlow");
547 fromTAZ->addChildElement(flow);
548 toTAZ->addChildElement(flow);
561 if (type ==
nullptr) {
575 person->
incRef(
"buildPerson");
588 if (type ==
nullptr) {
602 personFlow->
incRef(
"buildPersonFlow");
611 const double arrivalPos,
const std::vector<std::string>& types,
const std::vector<std::string>& modes,
612 const std::vector<std::string>& lines,
const double walkFactor,
const std::string& group) {
618 if (personParent ==
nullptr) {
622 }
else if (planParents.
checkIntegrity(tagIcon.first, personParent, planParameters)) {
625 arrivalPos, types, modes, lines, walkFactor, group);
637 personTrip->
incRef(
"buildPersonTrip");
645 const double arrivalPos,
const double speed,
const SUMOTime duration) {
651 if (personParent ==
nullptr) {
655 }
else if (planParents.
checkIntegrity(tagIcon.first, personParent, planParameters)) {
669 walk->
incRef(
"buildWalk");
677 const double arrivalPos,
const std::vector<std::string>& lines,
const std::string& group) {
683 if (personParent ==
nullptr) {
687 }
else if (planParents.
checkIntegrity(tagIcon.first, personParent, planParameters)) {
701 ride->
incRef(
"buildRide");
713 if (type ==
nullptr) {
727 container->
incRef(
"buildContainer");
740 if (type ==
nullptr) {
754 containerFlow->
incRef(
"buildContainerFlow");
763 const double arrivalPos,
const std::vector<std::string>& lines,
const std::string& group) {
769 if (containerParent ==
nullptr) {
773 }
else if (planParents.
checkIntegrity(tagIcon.first, containerParent, planParameters)) {
787 transport->
incRef(
"buildTransport");
795 const double arrivalPosition,
const double departPosition,
const double speed,
const SUMOTime duration) {
801 if (containerParent ==
nullptr) {
805 }
else if (duration < 0) {
807 }
else if (planParents.
checkIntegrity(tagIcon.first, containerParent, planParameters)) {
810 arrivalPosition, departPosition, speed, duration);
822 tranship->
incRef(
"buildTranship");
831 const std::string& actType,
const bool friendlyPos,
const int parameterSet) {
837 if (personParent ==
nullptr) {
841 }
else if (planParents.
checkIntegrity(tagIcon.first, personParent, planParameters)) {
844 endPos, duration, until, actType, friendlyPos, parameterSet);
856 stopPlan->
incRef(
"buildPersonStop");
864 const double endPos,
const SUMOTime duration,
865 const SUMOTime until,
const std::string& actType,
const bool friendlyPos,
const int parameterSet) {
871 if (containerParent ==
nullptr) {
875 }
else if (planParents.
checkIntegrity(tagIcon.first, containerParent, planParameters)) {
878 endPos, duration, until, actType, friendlyPos, parameterSet);
890 stopPlan->
incRef(
"buildContainerStop");
902 if (objParent ==
nullptr) {
932 bool waypoint =
false;
943 bool validParentDemandElement =
true;
945 if (stopParameters.
busstop.size() > 0) {
949 if (stoppingPlace ==
nullptr) {
955 writeError(
TL(
"Containers don't support stops at busStops or trainStops"));
956 validParentDemandElement =
false;
963 writeError(
TL(
"Persons don't support stops at containerStops"));
964 validParentDemandElement =
false;
971 writeError(
TL(
"Persons don't support stops at chargingStations"));
972 validParentDemandElement =
false;
974 writeError(
TL(
"Containers don't support stops at chargingStations"));
975 validParentDemandElement =
false;
977 }
else if (stopParameters.
parkingarea.size() > 0) {
982 writeError(
TL(
"Persons don't support stops at parkingAreas"));
983 validParentDemandElement =
false;
985 writeError(
TL(
"Containers don't support stops at parkingAreas"));
986 validParentDemandElement =
false;
988 }
else if (stopParameters.
lane.size() > 0) {
991 }
else if (stopParameters.
edge.size() > 0) {
995 writeError(
TL(
"vehicles don't support stops at edges"));
996 validParentDemandElement =
false;
1005 if (validParentDemandElement) {
1007 if (stoppingPlace && lane && edge) {
1008 writeError(
TL(
"A stop must be defined either over a stoppingPlace, a edge or a lane"));
1009 }
else if (!stoppingPlace && !lane && !edge) {
1010 writeError(
TL(
"A stop requires only a stoppingPlace, edge or lane"));
1011 }
else if (stoppingPlace) {
1023 stop =
new GNEStop(stopTagType,
myNet, stopParent, stoppingPlace, stopParameters);
1035 stop->
incRef(
"buildStoppingPlaceStop");
1050 stop->
incRef(
"buildLaneStop");
1062 const bool centerAfterCreation) {
1064 if (personParent ==
nullptr) {
1078 std::vector<std::string>();
1081 std::vector<std::string>();
1084 std::vector<std::string>();
1113 int parameterSet = 0;
1131 delete personPlanObject;
1139 const bool centerAfterCreation) {
1141 if (containerParent ==
nullptr) {
1158 std::vector<std::string>();
1186 int parameterSet = 0;
1204 delete containerPlanObject;
1218 planObject->
setTag(tagProperty.getTag());
1222 if (tagProperty.planFromEdge()) {
1225 if (tagProperty.planToEdge()) {
1228 if (tagProperty.planFromJunction()) {
1231 if (tagProperty.planToJunction()) {
1234 if (tagProperty.planFromTAZ()) {
1237 if (tagProperty.planToTAZ()) {
1240 if (tagProperty.planFromBusStop()) {
1243 if (tagProperty.planToBusStop()) {
1246 if (tagProperty.planFromTrainStop()) {
1249 if (tagProperty.planToTrainStop()) {
1252 if (tagProperty.planFromContainerStop()) {
1255 if (tagProperty.planToContainerStop()) {
1259 if (tagProperty.planEdge()) {
1262 if (tagProperty.planBusStop()) {
1265 if (tagProperty.planTrainStop()) {
1268 if (tagProperty.planContainerStop()) {
1272 if (tagProperty.planRoute()) {
1276 if (tagProperty.planConsecutiveEdges()) {
1288 for (
const auto& attrProperty : tagProperty) {
1290 if (attrProperty.isFloat()) {
1291 if (!originalPlan->
getAttribute(attrProperty.getAttr()).empty()) {
1294 }
else if (attrProperty.isSUMOTime()) {
1295 if (!originalPlan->
getAttribute(attrProperty.getAttr()).empty()) {
1296 planObject->
addTimeAttribute(attrProperty.getAttr(), GNEAttributeCarrier::parse<SUMOTime>(originalPlan->
getAttribute(attrProperty.getAttr())));
1298 }
else if (attrProperty.isBool()) {
1299 planObject->
addBoolAttribute(attrProperty.getAttr(), GNEAttributeCarrier::parse<bool>(originalPlan->
getAttribute(attrProperty.getAttr())));
1300 }
else if (attrProperty.isList()) {
1301 planObject->
addStringListAttribute(attrProperty.getAttr(), GNEAttributeCarrier::parse<std::vector<std::string> >(originalPlan->
getAttribute(attrProperty.getAttr())));
1308 if (tagProperty.isPlanPersonTrip()) {
1316 }
else if (tagProperty.isPlanWalk()) {
1321 }
else if (tagProperty.isPlanRide()) {
1326 }
else if (tagProperty.isPlanStopPerson()) {
1328 int parameterSet = 0;
1342 }
else if (tagProperty.isPlanTransport()) {
1347 }
else if (tagProperty.isPlanTranship()) {
1353 }
else if (tagProperty.isPlanStopContainer()) {
1355 int parameterSet = 0;
1381 for (
const auto& vehicleTag : vehicleTags) {
1393 for (
const auto& edgeID : via) {
1438 const auto vClass = originalVehicle->
getVClass();
1442 std::vector<GNEEdge*> routeEdges;
1457 std::vector<std::string> edgeIDs;
1458 for (
const auto& edge : routeEdges) {
1459 edgeIDs.push_back(edge->getID());
1462 if (routeEdges.empty()) {
1464 const std::string header =
"Problem transforming to vehicle";
1466 const std::string message =
"Vehicle cannot be transformed. Invalid number of edges";
1470 FXMessageBox::warning(originalVehicle->
getNet()->
getViewNet()->getApp(), MBOX_OK, header.c_str(),
"%s", message.c_str());
1479 if (createEmbeddedRoute) {
1492 delete vehicleBaseOBject;
1499 routeHandler.
buildRoute(
nullptr, routeID, vClass, edgeIDs, routeColor,
false, 0, 1.0, {});
1501 vehicleParameters.
routeid = routeID;
1508 if (inspectAfterTransform) {
1529 const auto vClass = originalVehicle->
getVClass();
1533 std::vector<GNEEdge*> routeEdges;
1548 std::vector<std::string> edgeIDs;
1549 for (
const auto& edge : routeEdges) {
1550 edgeIDs.push_back(edge->getID());
1553 if (routeEdges.empty()) {
1555 const std::string header =
"Problem transforming to vehicle";
1557 const std::string message =
"Vehicle cannot be transformed. Invalid number of edges";
1561 FXMessageBox::warning(originalVehicle->
getNet()->
getViewNet()->getApp(), MBOX_OK, header.c_str(),
"%s", message.c_str());
1582 if (createEmbeddedRoute) {
1595 delete vehicleBaseOBject;
1602 routeHandler.
buildRoute(
nullptr, routeID, vClass, edgeIDs, routeColor,
false, 0, 1.0, {});
1604 vehicleParameters.
routeid = routeID;
1611 if (inspectAfterTransform) {
1634 std::vector<GNEEdge*> edges;
1649 if (edges.size() < 2) {
1651 const std::string header =
"Problem transforming to vehicle";
1653 const std::string message =
"Vehicle cannot be transformed. Invalid number of edges";
1657 FXMessageBox::warning(originalVehicle->
getNet()->
getViewNet()->getApp(), MBOX_OK, header.c_str(),
"%s", message.c_str());
1672 routeHandler.
buildTrip(
nullptr, vehicleParameters, edges.front()->getID(), edges.back()->getID());
1676 if (inspectAfterTransform) {
1699 std::vector<GNEEdge*> edges;
1714 if (edges.empty()) {
1716 const std::string header =
"Problem transforming to vehicle";
1718 const std::string message =
"Vehicle cannot be transformed. Invalid number of edges";
1722 FXMessageBox::warning(originalVehicle->
getNet()->
getViewNet()->getApp(), MBOX_OK, header.c_str(),
"%s", message.c_str());
1749 routeHandler.
buildFlow(
nullptr, vehicleParameters, edges.front()->getID(), edges.back()->getID());
1753 if (inspectAfterTransform) {
1768 const std::string header =
"Problem transforming to trip over junctions";
1770 const std::string message =
"Vehicle cannot be transformed. Invalid number of junctions";
1774 FXMessageBox::warning(originalVehicle->
getNet()->
getViewNet()->getApp(), MBOX_OK, header.c_str(),
"%s", message.c_str());
1797 if (inspectAfterTransform) {
1812 const std::string header =
"Problem transforming to flow over junctions";
1814 const std::string message =
"Vehicle cannot be transformed. Invalid number of junctions";
1818 FXMessageBox::warning(originalVehicle->
getNet()->
getViewNet()->getApp(), MBOX_OK, header.c_str(),
"%s", message.c_str());
1850 if (inspectAfterTransform) {
1865 const std::string header =
"Problem transforming to trip over TAZs";
1867 const std::string message =
"Vehicle cannot be transformed. Invalid number of TAZs";
1871 FXMessageBox::warning(originalVehicle->
getNet()->
getViewNet()->getApp(), MBOX_OK, header.c_str(),
"%s", message.c_str());
1894 if (inspectAfterTransform) {
1909 const std::string header =
"Problem transforming to flow over TAZs";
1911 const std::string message =
"Vehicle cannot be transformed. Invalid number of TAZs";
1915 FXMessageBox::warning(originalVehicle->
getNet()->
getViewNet()->getApp(), MBOX_OK, header.c_str(),
"%s", message.c_str());
1947 if (inspectAfterTransform) {
1968 const auto ID = personParameters.
id;
1970 personParameters.
id =
"%dummyID%";
1974 routeHandler.
buildPerson(
nullptr, personParameters);
1987 if (inspectAfterTransform) {
2006 const auto ID = personParameters.
id;
2008 personParameters.
id =
"%dummyID%";
2015 for (
const auto& personPlan : personPlans) {
2028 if (inspectAfterTransform) {
2047 const auto ID = containerParameters.
id;
2049 containerParameters.
id =
"%dummyID%";
2055 for (
const auto& containerPlan : containerPlans) {
2066 if (inspectAfterTransform) {
2085 const auto ID = containerParameters.
id;
2087 containerParameters.
id =
"%dummyID%";
2093 for (
const auto& containerPlan : containerPlans) {
2107 if (inspectAfterTransform) {
2137 if (edges.empty()) {
2141 std::vector<GNEEdge*> reverseEdges;
2142 for (
const auto& edge : edges) {
2143 const auto oppositeEdges = edge->getOppositeEdges();
2145 if (oppositeEdges.empty()) {
2148 reverseEdges.push_back(oppositeEdges.front());
2152 std::reverse(reverseEdges.begin(), reverseEdges.end());
2186 std::vector<GNEEdge*> oppositeEdges;
2188 oppositeEdges.push_back(edge->getOppositeEdges().front());
2190 std::reverse(oppositeEdges.begin(), oppositeEdges.end());
2198 oppositeEdges.erase(oppositeEdges.begin());
2199 oppositeEdges.pop_back();
2200 if (oppositeEdges.size() > 0) {
2230 if (junction ==
nullptr) {
2241 if (
TAZ ==
nullptr) {
2252 if (edge ==
nullptr) {
2259 std::vector<GNEEdge*>
2261 std::vector<GNEEdge*> edges;
2262 for (
const auto& edgeID : edgeIDs) {
2265 if (edge ==
nullptr) {
2270 edges.push_back(edge);
2280 if (type ==
nullptr) {
2301 if (personParent ==
nullptr) {
2304 return personParent;
2322 if (containerParent ==
nullptr) {
2325 return containerParent;
2332 const std::vector<std::string>& distributionElementIDs,
const std::vector<double>& probabilities,
2333 std::vector<const GNEDemandElement*>& elements) {
2335 std::string distributionTag =
toString(sumoBaseObject->
getTag());
2338 for (
const auto& distributionElementID : distributionElementIDs) {
2340 if (distributionElement) {
2341 elements.push_back(distributionElement);
2343 writeError(
TLF(
"% with id '%' doesn't exist in % '%'",
toString(distributionElementTag), distributionElementID, distributionTag, distributionID));
2349 for (
const auto& probability : probabilities) {
2350 if (probability < 0) {
2351 writeError(
TLF(
"invalid probability % in % '%'",
toString(probability), distributionTag, distributionID));
2356 if (elements.size() != probabilities.size()) {
2357 writeError(
TLF(
"Invalid type distribution probabilities in % '%'. Must have the same number of elements", distributionTag, distributionID));
2370 if (demandElement) {
#define WRITE_WARNING(msg)
SUMOTime string2time(const std::string &r)
convert string to SUMOTime
const std::set< std::string > DEFAULT_VTYPES
SUMOVehicleClass
Definition of vehicle classes to differ between different lane usage and authority types.
@ SVC_PEDESTRIAN
pedestrian
const int STOP_DURATION_SET
@ GIVEN
The lane is given.
@ GIVEN
The speed is given.
const int VEHPARS_DEPARTLANE_SET
const int VEHPARS_DEPARTSPEED_SET
SumoXMLTag
Numbers representing SUMO-XML - element names.
@ GNE_TAG_TRIP_JUNCTIONS
a trip between junctions
@ GNE_TAG_TRIP_TAZS
a single trip definition that uses TAZs
@ GNE_TAG_WAYPOINT_PARKINGAREA
@ GNE_TAG_STOP_PARKINGAREA
stop placed over a parking area
@ SUMO_TAG_TAZ
a traffic assignment zone
@ SUMO_TAG_CHARGING_STATION
A Charging Station.
@ SUMO_TAG_VTYPE
description of a vehicle/person/container type
@ SUMO_TAG_NOTHING
invalid tag, must be the last one
@ SUMO_TAG_CONTAINER_STOP
A container stop.
@ GNE_TAG_STOP_BUSSTOP
stop placed over a busStop
@ GNE_TAG_WAYPOINT_TRAINSTOP
@ GNE_TAG_WAYPOINT_CONTAINERSTOP
@ GNE_TAG_WAYPOINT_BUSSTOP
@ SUMO_TAG_BUS_STOP
A bus stop.
@ GNE_TAG_WAYPOINT_CHARGINGSTATION
@ GNE_TAG_STOPPERSON_BUSSTOP
@ SUMO_TAG_VEHICLE
description of a vehicle
@ GNE_TAG_FLOW_ROUTE
a flow definition using a route instead of a from-to edges route
@ SUMO_TAG_ROUTE_DISTRIBUTION
distribution of a route
@ GNE_TAG_FLOW_JUNCTIONS
a flow between junctions
@ GNE_TAG_STOP_CONTAINERSTOP
stop placed over a containerStop
@ GNE_TAG_STOPCONTAINER_CONTAINERSTOP
@ GNE_TAG_FLOW_WITHROUTE
description of a vehicle with an embedded route
@ SUMO_TAG_FLOW
a flow definition using from and to edges or a route
@ SUMO_TAG_PARKING_AREA
A parking area.
@ GNE_TAG_FLOW_TAZS
a flow between TAZs
@ SUMO_TAG_JUNCTION
begin/end of the description of a junction
@ SUMO_TAG_ROUTE
begin/end of the description of a route
@ SUMO_TAG_TRAIN_STOP
A train stop (alias for bus stop)
@ SUMO_TAG_VTYPE_DISTRIBUTION
distribution of a vehicle type
@ GNE_TAG_VEHICLE_WITHROUTE
description of a vehicle with an embedded route
@ GNE_TAG_STOP_LANE
stop placed over a lane
@ GNE_TAG_STOPPERSON_TRAINSTOP
@ GNE_TAG_STOP_TRAINSTOP
stop placed over a trainStop
@ GNE_TAG_STOP_CHARGINGSTATION
stop placed over a charging station
@ SUMO_TAG_TRIP
a single trip definition (used by router)
@ SUMO_TAG_EDGE
begin/end of the description of an edge
@ GNE_ATTR_FROM_TRAINSTOP
@ SUMO_ATTR_FROM_JUNCTION
@ SUMO_ATTR_CONTAINER_STOP
@ GNE_ATTR_FLOWPARAMETERS
flow parameters (integer for mask end, number, etc...)
@ GNE_ATTR_PARENT
parent of an additional element
@ SUMO_ATTR_EDGES
the edges of a route
@ SUMO_ATTR_CONTAINERSPERHOUR
@ GNE_ATTR_FROM_CONTAINERSTOP
@ SUMO_ATTR_END
weights: time range end
@ SUMO_ATTR_PERSONSPERHOUR
std::string toString(const T &t, std::streamsize accuracy=gPrecision)
bool around(const Position &p, double offset=0) const
Returns whether the boundary contains the given coordinate.
plan parameters (used for group all from-to parameters related with plans)
std::string fromJunction
from junction
std::string fromContainerStop
from containerStop
std::string toTrainStop
to trainStop
std::string fromTrainStop
from trainStop
std::string fromEdge
from edge
std::string fromBusStop
from busStop
std::string toEdge
to edge
std::vector< std::string > consecutiveEdges
consecutive edges
std::string toJunction
to junction
std::string toBusStop
to busStop
std::string fromTAZ
from TAZ
std::string toRoute
to route
std::string toContainerStop
to containerStop
const SUMOVehicleParameter::Stop & getStopParameter() const
get stop parameters
SUMOTime getTimeAttribute(const SumoXMLAttr attr) const
get time attribute
bool hasBoolAttribute(const SumoXMLAttr attr) const
check if current SumoBaseObject has the given bool attribute
bool hasStringAttribute(const SumoXMLAttr attr) const
has function
void setTag(const SumoXMLTag tag)
set SumoBaseObject tag
SumoBaseObject * getParentSumoBaseObject() const
get pointer to mySumoBaseObjectParent SumoBaseObject (if is null, then is the root)
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
SumoXMLTag getTag() const
get XML myTag
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
void addDoubleAttribute(const SumoXMLAttr attr, const double value)
add double attribute into current SumoBaseObject node
bool hasDoubleAttribute(const SumoXMLAttr attr) const
check if current SumoBaseObject has the given double attribute
bool getBoolAttribute(const SumoXMLAttr attr) const
get bool attribute
void setVehicleParameter(const SUMOVehicleParameter *vehicleParameter)
set vehicle parameters
void addStringAttribute(const SumoXMLAttr attr, const std::string &value)
add string attribute into current SumoBaseObject node
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
const std::string & getStringAttribute(const SumoXMLAttr attr) const
get string attribute
An Element which don't belong to GNENet but has influence in the simulation.
const std::string getID() const
get ID (all Attribute Carriers have one)
const std::string & getTagStr() const
get tag assigned to this object in string format
const GNETagProperties & getTagProperty() const
get tagProperty associated with this Attribute Carrier
GNENet * getNet() const
get pointer to net
static std::string parseIDs(const std::vector< T > &ACs)
parses a list of specific Attribute Carriers into a string of IDs
void getAttributesAndValues(CommonXMLStructure::SumoBaseObject *baseObject, bool includeAll) const
get attributes and their values
void addDistributionKey(const GNEDemandElement *key, const double value, GNEUndoList *undoList)
add distribution key
virtual SUMOVehicleClass getVClass() const =0
obtain VClass related with this demand element
virtual double getAttributeDouble(SumoXMLAttr key) const =0
virtual std::string getAttribute(SumoXMLAttr key) const =0
virtual void setAttribute(SumoXMLAttr key, const std::string &value, GNEUndoList *undoList)=0
method for setting the attribute and letting the object perform demand element changes
static std::pair< SumoXMLTag, GUIIcon > getPersonTripTagIcon(const CommonXMLStructure::PlanParameters &planParameters)
get the personTrip tag and icon for the combination
static std::pair< SumoXMLTag, GUIIcon > getContainerStopTagIcon(const CommonXMLStructure::PlanParameters &planParameters)
get the container stop tag and icon for the combination
static std::pair< SumoXMLTag, GUIIcon > getRideTagIcon(const CommonXMLStructure::PlanParameters &planParameters)
get the ride tag and icon for the combination
static std::pair< SumoXMLTag, GUIIcon > getPersonStopTagIcon(const CommonXMLStructure::PlanParameters &planParameters)
get the person stop tag and icon for the combination
static std::pair< SumoXMLTag, GUIIcon > getWalkTagIcon(const CommonXMLStructure::PlanParameters &planParameters)
get the walk tag and icon for the combination
static std::pair< SumoXMLTag, GUIIcon > getTranshipTagIcon(const CommonXMLStructure::PlanParameters &planParameters)
get the tranship tag and icon for the combination
static std::pair< SumoXMLTag, GUIIcon > getTransportTagIcon(const CommonXMLStructure::PlanParameters &planParameters)
get the transport tag and icon for the combination
A road/street connecting two junctions (netedit-version)
const std::vector< GNEJunction * > & getParentJunctions() const
get parent junctions
void addChildElement(T *element)
add child element
const std::vector< GNEDemandElement * > & getChildDemandElements() const
return child demand elements
const std::vector< GNEDemandElement * > & getParentDemandElements() const
get parent demand elements
const std::vector< GNEAdditional * > & getParentAdditionals() const
get parent additionals
const std::vector< GNEEdge * > & getParentEdges() const
get parent edges
void inspectSingleElement(GNEAttributeCarrier *AC)
Inspect a single element.
This lane is powered by an underlying GNEEdge and basically knows how to draw itself.
GNEEdge * getParentEdge() const
get parent edge
GNELane * retrieveLane(const std::string &id, bool hardFail=true, bool checkVolatileChange=false) const
get lane by id
std::string generateDemandElementID(SumoXMLTag tag) const
generate demand element id
GNEAdditional * retrieveAdditional(SumoXMLTag type, const std::string &id, bool hardFail=true) const
Returns the named additional.
GNEJunction * retrieveJunction(const std::string &id, bool hardFail=true) const
get junction by id
void insertDemandElement(GNEDemandElement *demandElement)
Insert a demand element in container.
GNEEdge * retrieveEdge(const std::string &id, bool hardFail=true) const
get edge by id
GNEDemandElement * retrieveDemandElement(SumoXMLTag type, const std::string &id, bool hardFail=true) const
Returns the named demand element.
A NBNetBuilder extended by visualisation and editing capabilities.
void deleteDemandElement(GNEDemandElement *demandElement, GNEUndoList *undoList)
remove demand element
GNENetHelper::AttributeCarriers * getAttributeCarriers() const
get all attribute carriers used in this net
GNEPathManager * getPathManager()
get path manager
GNEViewNet * getViewNet() const
get view net
std::vector< GNEEdge * > calculateDijkstraPath(const SUMOVehicleClass vClass, const std::vector< GNEEdge * > &edges) const
calculate Dijkstra path between a list of edges (for example, from-via-to edges)
bool isRoute() const
check if pathElement is a route
PathCalculator * getPathCalculator()
obtain instance of PathCalculator
double getClickedPositionOverLane() const
get clicked position over lane
const CommonXMLStructure::PlanParameters & getPlanParameteres() const
get plan parameters
GNEPlanParents (used for group all plan parents)
void addChildElements(GNEDemandElement *element)
add the given element in the element as child
bool checkIntegrity(SumoXMLTag planTag, const GNEDemandElement *parent, const CommonXMLStructure::PlanParameters &planParameters) const
check integrity between planParameters and GNE elements
void incRef(const std::string &debugMsg="")
Increase reference.
Builds trigger objects for GNENet (busStops, chargingStations, detectors, etc..)
void buildTrip(const CommonXMLStructure::SumoBaseObject *sumoBaseObject, const SUMOVehicleParameter &vehicleParameters, const std::string &fromEdgeID, const std::string &toEdgeID)
build trip
void buildPersonStop(const CommonXMLStructure::SumoBaseObject *sumoBaseObject, const CommonXMLStructure::PlanParameters &planParameters, const double endPos, const SUMOTime duration, const SUMOTime until, const std::string &actType, const bool friendlyPos, const int parameterSet)
build person stop
bool isContainerIdDuplicated(const std::string &id)
check if there is already a container (Container or ContainerFlow) with the given ID
const bool myOverwrite
check if overwrite
bool isVehicleIdDuplicated(const std::string &id)
check if there is already a vehicle (Vehicle, Trip, Flow or Flow) with the given ID
void buildContainerFlow(const CommonXMLStructure::SumoBaseObject *sumoBaseObject, const SUMOVehicleParameter &containerFlowParameters)
build container flow
static void addReverse(GNEDemandElement *element)
add reverse for given demand element
bool checkDuplicatedDemandElement(const SumoXMLTag tag, const std::string &id)
check if given ID correspond to a duplicated demand element
bool buildPersonPlan(const GNEDemandElement *planTemplate, GNEDemandElement *personParent, GNEAttributesCreator *personPlanAttributes, GNEPlanCreator *planCreator, const bool centerAfterCreation)
build person plan
CommonXMLStructure::SumoBaseObject * myPlanObject
pointer for person and container plans
GNEDemandElement * getPersonParent(const CommonXMLStructure::SumoBaseObject *sumoBaseObject) const
get person parent
GNEJunction * parseJunction(const SumoXMLTag tag, const std::string &junctionID)
parse junction
const bool myAllowUndoRedo
allow undo/redo
void overwriteDemandElement()
remove overwritten demand element
void buildPerson(const CommonXMLStructure::SumoBaseObject *sumoBaseObject, const SUMOVehicleParameter &personParameters)
build person
void buildPersonTrip(const CommonXMLStructure::SumoBaseObject *sumoBaseObject, const CommonXMLStructure::PlanParameters &planParameters, const double arrivalPos, const std::vector< std::string > &types, const std::vector< std::string > &modes, const std::vector< std::string > &lines, const double walkFactor, const std::string &group)
build person trip
static void transformToRouteFlow(GNEVehicle *originalVehicle, bool createEmbeddedRoute)
transform routeFlow over an existent route
GNENet * myNet
pointer to GNENet
void duplicatePlan(const GNEDemandElement *originalPlan, GNEDemandElement *newParent)
duplicate given plan in new parent
void buildFlowTAZs(const CommonXMLStructure::SumoBaseObject *sumoBaseObject, const SUMOVehicleParameter &vehicleParameters, const std::string &fromTAZID, const std::string &toTAZID)
build flow over junctions
bool isPersonIdDuplicated(const std::string &id)
check if there is already a person (Person or PersonFlow) with the given ID
static void transformToContainerFlow(GNEContainer *originalContainer)
transform routeFlow over an existent route
void buildVehicleOverRoute(const CommonXMLStructure::SumoBaseObject *sumoBaseObject, const SUMOVehicleParameter &vehicleParameters)
build a vehicle over an existent route
void buildWalk(const CommonXMLStructure::SumoBaseObject *sumoBaseObject, const CommonXMLStructure::PlanParameters &planParameters, const double arrivalPos, const double speed, const SUMOTime duration)
build walk
static void transformToFlow(GNEVehicle *originalVehicle)
transform to flow
void buildTripTAZs(const CommonXMLStructure::SumoBaseObject *sumoBaseObject, const SUMOVehicleParameter &vehicleParameters, const std::string &fromTAZID, const std::string &toTAZID)
build trip over TAZs
GNEEdge * parseEdge(const SumoXMLTag tag, const std::string &edgeID)
parse edge
void buildFlowOverRoute(const CommonXMLStructure::SumoBaseObject *sumoBaseObject, const SUMOVehicleParameter &vehicleParameters)
build a flow over an existent route
void buildTripJunctions(const CommonXMLStructure::SumoBaseObject *sumoBaseObject, const SUMOVehicleParameter &vehicleParameters, const std::string &fromJunctionID, const std::string &toJunctionID)
build trip over junctions
void buildContainerStop(const CommonXMLStructure::SumoBaseObject *sumoBaseObject, const CommonXMLStructure::PlanParameters &planParameters, const double endPos, const SUMOTime duration, const SUMOTime until, const std::string &actType, const bool friendlyPos, const int parameterSet)
build container stop
void buildVTypeDistribution(const CommonXMLStructure::SumoBaseObject *sumoBaseObject, const std::string &id, const int deterministic, const std::vector< std::string > &vTypeIDs, const std::vector< double > &probabilities)
build vType distribution
void buildFlowJunctions(const CommonXMLStructure::SumoBaseObject *sumoBaseObject, const SUMOVehicleParameter &vehicleParameters, const std::string &fromJunctionID, const std::string &toJunctionID)
build flow over junctions
static bool canReverse(const GNEDemandElement *element)
reverse functions
bool isViaAttributeValid(const std::vector< std::string > &via)
check if via attribute is valid
void buildVType(const CommonXMLStructure::SumoBaseObject *sumoBaseObject, const SUMOVTypeParameter &vTypeParameter)
build vType
static void transformToTrip(GNEVehicle *originalVehicle)
transform to trip
void buildRouteDistribution(const CommonXMLStructure::SumoBaseObject *sumoBaseObject, const std::string &id, const std::vector< std::string > &routeIDs, const std::vector< double > &probabilities)
build route distribution
static void transformToPerson(GNEPerson *originalPerson)
transform person functions
void buildRide(const CommonXMLStructure::SumoBaseObject *sumoBaseObject, const CommonXMLStructure::PlanParameters &planParameters, const double arrivalPos, const std::vector< std::string > &lines, const std::string &group)
build ride
void buildFlow(const CommonXMLStructure::SumoBaseObject *sumoBaseObject, const SUMOVehicleParameter &vehicleParameters, const std::string &fromEdgeID, const std::string &toEdgeIDs)
build flow
bool buildContainerPlan(const GNEDemandElement *planTemplate, GNEDemandElement *containerParent, GNEAttributesCreator *containerPlanAttributes, GNEPlanCreator *planCreator, const bool centerAfterCreation)
build container plan
GNEAdditional * parseTAZ(const SumoXMLTag tag, const std::string &TAZID)
parse TAZ
GNEDemandElement * getType(const std::string &id) const
get type (Either type o typeDistribution)
virtual ~GNERouteHandler()
Destructor.
void buildTranship(const CommonXMLStructure::SumoBaseObject *sumoBaseObject, const CommonXMLStructure::PlanParameters &planParameters, const double arrivalPosition, const double departPosition, const double speed, const SUMOTime duration)
build tranship
void buildEmbeddedRoute(const CommonXMLStructure::SumoBaseObject *sumoBaseObject, const std::vector< std::string > &edgeIDs, const RGBColor &color, const int repeat, const SUMOTime cycleTime, const Parameterised::Map &routeParameters)
build embedded route
void buildPersonFlow(const CommonXMLStructure::SumoBaseObject *sumoBaseObject, const SUMOVehicleParameter &personFlowParameters)
build person flow
std::vector< GNEEdge * > parseEdges(const SumoXMLTag tag, const std::vector< std::string > &edgeIDs)
parse edges
void buildTransport(const CommonXMLStructure::SumoBaseObject *sumoBaseObject, const CommonXMLStructure::PlanParameters &planParameters, const double arrivalPos, const std::vector< std::string > &lines, const std::string &group)
build transport
void buildStop(const CommonXMLStructure::SumoBaseObject *sumoBaseObject, const CommonXMLStructure::PlanParameters &planParameters, const SUMOVehicleParameter::Stop &stopParameters)
build stop
GNEDemandElement * getContainerParent(const CommonXMLStructure::SumoBaseObject *sumoBaseObject) const
get container parent
static void reverse(GNEDemandElement *element)
reverse given demand element
static void transformToFlowJunctions(GNEVehicle *originalVehicle)
transform to flow over junctions
static void transformToTripJunctions(GNEVehicle *originalVehicle)
transform to trip over junctions
static void transformToContainer(GNEContainer *originalContainer)
transform container functions
void buildContainer(const CommonXMLStructure::SumoBaseObject *sumoBaseObject, const SUMOVehicleParameter &containerParameters)
build container
static void transformToPersonFlow(GNEPerson *originalPerson)
transform routeFlow over an existent route
bool getDistributionElements(const CommonXMLStructure::SumoBaseObject *sumoBaseObject, SumoXMLTag distributionElementTag, const std::vector< std::string > &distributionElementIDs, const std::vector< double > &probabilities, std::vector< const GNEDemandElement * > &elements)
get distribution elements
void buildRoute(const CommonXMLStructure::SumoBaseObject *sumoBaseObject, const std::string &id, SUMOVehicleClass vClass, const std::vector< std::string > &edgeIDs, const RGBColor &color, const int repeat, const SUMOTime cycleTime, const double probability, const Parameterised::Map &routeParameters)
build route
GNEDemandElement * myDemandToOverwrite
demand to overwrite (using undo-redo
static void transformToFlowTAZs(GNEVehicle *originalVehicle)
transform to flow over TAZs
GNERouteHandler(const std::string &file, GNENet *net, const bool allowUndoRedo, const bool overwrite)
Constructor.
static void transformToVehicle(GNEVehicle *originalVehicle, bool createEmbeddedRoute)
transform vehicle functions
static void transformToTripTAZs(GNEVehicle *originalVehicle)
transform to trip over TAZs
static GNEDemandElement * copyRoute(const GNERoute *originalRoute)
create a copy of the given route
bool isPlanTransport() const
return true if tag correspond to a transport
bool isContainer() const
return true if tag correspond to a container element
bool isFlow() const
return true if tag correspond to a flow element
bool isVehicle() const
return true if tag correspond to a vehicle element
bool vehicleJunctions() const
return true if tag correspond to a vehicle placed over from-to junctions
bool isPlanStopContainer() const
return true if tag correspond to a container stop plan
SumoXMLTag getTag() const
get Tag vinculated with this attribute Property
bool vehicleRouteEmbedded() const
return true if tag correspond to a vehicle placed over an embedded route
bool isPlanPersonTrip() const
return true if tag correspond to a person trip plan
bool vehicleEdges() const
return true if tag correspond to a vehicle placed over from-to edges
bool isPlanRide() const
return true if tag correspond to a ride plan
bool isPlanStopPerson() const
return true if tag correspond to a person stop plan
bool isPerson() const
return true if tag correspond to a person element
bool vehicleTAZs() const
return true if tag correspond to a vehicle placed over from-to TAZs
bool vehicleRoute() const
plan parents
bool isPlanWalk() const
return true if tag correspond to a walk plan
bool isPlanTranship() const
return true if tag correspond to a tranship
GNEAttributeCarrier * getTemplateAC(SumoXMLTag ACTag) const
get templateAC
void end()
End undo command sub-group. If the sub-group is still empty, it will be deleted; otherwise,...
void begin(GUIIcon icon, const std::string &description)
Begin undo command sub-group with current supermode. This begins a new group of commands that are tre...
void add(GNEChange *command, bool doit=false, bool merge=true)
Add new command, executing it if desired. The new command will be merged with the previous command if...
static void overwriteVType(GNEDemandElement *vType, const SUMOVTypeParameter newVTypeParameter, GNEUndoList *undoList)
overwrite all values of GNEVType with a SUMOVTypeParameter
GNETagSelector * getVehicleTagSelector() const
get vehicle tag selector (needed for transform vehicles)
SUMOVehicleClass getVClass() const
obtain VClass related with this demand element
static GNEDemandElement * copyVehicle(const GNEVehicle *originalVehicle)
create a copy of the given vehicle
GNEViewParent * getViewParent() const
get the net object
GNEUndoList * getUndoList() const
get the undoList object
bool isAttributeCarrierInspected(const GNEAttributeCarrier *AC) const
check if attribute carrier is being inspected
GNEVehicleFrame * getVehicleFrame() const
get frame for DEMAND_VEHICLE
GNEInspectorFrame * getInspectorFrame() const
get frame for inspect elements
Boundary getVisibleBoundary() const
get visible boundary
virtual void centerTo(GUIGlID id, bool applyZoom, double zoomDist=20)
centers to the chosen artifact
std::map< std::string, std::string > Map
parameters map
static const RGBColor YELLOW
static const RGBColor INVISIBLE
void writeError(const std::string &error)
write error and enable error creating element
Structure representing possible vehicle parameter.
std::string id
The vehicle type's id.
Definition of vehicle stop (position and duration)
std::string edge
The edge to stop at.
std::string lane
The lane to stop at.
bool friendlyPos
enable or disable friendly position (used by netedit)
double speed
the speed at which this stop counts as reached (waypoint mode)
std::string parkingarea
(Optional) parking area if one is assigned to the stop
std::string chargingStation
(Optional) charging station if one is assigned to the stop
int parametersSet
Information for the output which parameter were set.
SUMOTime until
The time at which the vehicle may continue its journey.
std::string actType
act Type (only used by Persons) (used by netedit)
double endPos
The stopping position end.
std::string busstop
(Optional) bus stop if one is assigned to the stop
std::string containerstop
(Optional) container stop if one is assigned to the stop
SUMOTime duration
The stopping duration.
Structure representing possible vehicle parameter.
double repetitionProbability
The probability for emitting a vehicle per second.
int parametersSet
Information for the router which parameter were set, TraCI may modify this (when changing color)
int departLane
(optional) The lane the vehicle shall depart from (index in edge)
double departSpeed
(optional) The initial speed of the vehicle
SumoXMLTag tag
The vehicle tag.
std::string vtypeid
The vehicle's type id.
SUMOTime repetitionOffset
The time offset between vehicle reinsertions.
std::vector< std::string > via
List of the via-edges the vehicle must visit.
DepartLaneDefinition departLaneProcedure
Information how the vehicle shall choose the lane to depart from.
SUMOTime repetitionEnd
The time at which the flow ends (only needed when using repetitionProbability)
DepartSpeedDefinition departSpeedProcedure
Information how the vehicle's initial speed shall be chosen.
std::string routeid
The vehicle's route id.
std::string id
The vehicle's id.
bool wasSet(int what) const
Returns whether the given parameter was set.