72 myAllowUndoRedo(allowUndoRedo) {
84 const std::string& laneID,
const double startPos,
const double endPos,
const std::string& name,
85 const std::vector<std::string>& lines,
const int personCapacity,
const double parkingLength,
86 const RGBColor& color,
const bool friendlyPosition,
const double angle,
98 if (lane ==
nullptr) {
109 parkingLength, color, friendlyPosition, angle, parameters);
118 busStop->
incRef(
"buildBusStop");
128 const std::string& laneID,
const double startPos,
const double endPos,
const std::string& name,
129 const std::vector<std::string>& lines,
const int personCapacity,
const double parkingLength,
130 const RGBColor& color,
const bool friendlyPosition,
const double angle,
142 if (lane ==
nullptr) {
153 parkingLength, color, friendlyPosition, angle, parameters);
162 trainStop->
incRef(
"buildTrainStop");
172 const std::string& pos,
const double length,
const bool friendlyPos,
const Parameterised::Map& parameters) {
180 if ((busStop ==
nullptr) && (trainStop ==
nullptr) && (containerStop ==
nullptr)) {
187 GNEAdditional* accessParent = busStop ? busStop : trainStop ? trainStop : containerStop;
189 bool validPos =
true;
190 double posDouble = 0;
192 if (GNEAttributeCarrier::canParse<double>(pos)) {
193 posDouble = GNEAttributeCarrier::parse<double>(pos);
195 }
else if (pos ==
"random" || pos ==
"doors" || pos ==
"carriage") {
197 }
else if (pos.empty()) {
204 if (lane ==
nullptr) {
206 }
else if (!validPos) {
214 return writeError(
TLF(
"Could not build access in netedit; The lane '%' doesn't support pedestrians", lane->
getID()));
217 GNEAdditional* access =
new GNEAccess(accessParent, lane, posDouble, pos, friendlyPos, length, parameters);
227 access->
incRef(
"buildAccess");
236 const double startPos,
const double endPos,
const std::string& name,
const std::vector<std::string>& lines,
const int containerCapacity,
237 const double parkingLength,
const RGBColor& color,
const bool friendlyPosition,
const double angle,
const Parameterised::Map& parameters) {
248 if (lane ==
nullptr) {
258 GNEAdditional* containerStop =
new GNEContainerStop(
id,
myNet,
myFileBucket, lane, startPos, endPos, name, lines, containerCapacity, parkingLength,
259 color, friendlyPosition, angle, parameters);
268 containerStop->
incRef(
"buildContainerStop");
278 const std::string& laneID,
const double startPos,
const double endPos,
const std::string& name,
const double chargingPower,
279 const double totalPower,
const double efficiency,
const bool chargeInTransit,
const SUMOTime chargeDelay,
const std::string& chargeType,
280 const SUMOTime waitingTime,
const bool friendlyPosition,
const std::string& parkingAreaID,
const Parameterised::Map& parameters) {
291 if (lane ==
nullptr) {
303 GNEAdditional* chargingStation =
new GNEChargingStation(
id,
myNet,
myFileBucket, lane, startPos, endPos, name, chargingPower, totalPower, efficiency, chargeInTransit,
304 chargeDelay, chargeType, waitingTime, parkingAreaID, friendlyPosition, parameters);
313 chargingStation->
incRef(
"buildChargingStation");
323 const double startPos,
const double endPos,
const std::string& departPos,
const std::string& name,
324 const std::vector<std::string>& badges,
const bool friendlyPosition,
const int roadSideCapacity,
const bool onRoad,
325 const double width,
const double length,
const double angle,
const bool lefthand,
const Parameterised::Map& parameters) {
336 const double departPosDouble = GNEAttributeCarrier::canParse<double>(departPos) ? GNEAttributeCarrier::parse<double>(departPos) : 0;
338 if (lane ==
nullptr) {
349 return writeError(
TLF(
"Could not build parking area with ID '%' in netedit; Invalid departPos over lane.",
id));
353 name, badges, friendlyPosition, roadSideCapacity, onRoad,
363 parkingArea->
incRef(
"buildParkingArea");
373 const std::string& name,
const std::string& width,
const std::string& length,
const std::string& angle,
const double slope,
376 if (!width.empty() && !GNEAttributeCarrier::canParse<double>(width)) {
377 return writeError(
TL(
"Could not build parking space in netedit; attribute width cannot be parse to float."));
378 }
else if (!length.empty() && !GNEAttributeCarrier::canParse<double>(length)) {
379 return writeError(
TL(
"Could not build parking space in netedit; attribute length cannot be parse to float."));
380 }
else if (!angle.empty() && !GNEAttributeCarrier::canParse<double>(angle)) {
381 return writeError(
TL(
"Could not build parking space in netedit; attribute angle cannot be parse to float."));
386 const double widthDouble = width.empty() ?
INVALID_DOUBLE : GNEAttributeCarrier::parse<double>(width);
387 const double lengthDouble = length.empty() ?
INVALID_DOUBLE : GNEAttributeCarrier::parse<double>(length);
388 const double angleDouble = angle.empty() ?
INVALID_DOUBLE : GNEAttributeCarrier::parse<double>(angle);
390 if (parkingArea ==
nullptr) {
407 parkingSpace->
incRef(
"buildParkingSpace");
419 const double position,
const SUMOTime period,
const std::string& file,
const std::vector<std::string>& vehicleTypes,
420 const std::vector<std::string>& nextEdges,
const std::string& detectPersons,
const std::string& name,
432 if (lane ==
nullptr) {
445 nextEdges, detectPersons, name, friendlyPos, parameters);
454 detectorE1->
incRef(
"buildDetectorE1");
464 const double pos,
const double length,
const SUMOTime period,
const std::string& trafficLight,
const std::string& filename,
465 const std::vector<std::string>& vehicleTypes,
const std::vector<std::string>& nextEdges,
const std::string& detectPersons,
466 const std::string& name,
const SUMOTime timeThreshold,
const double speedThreshold,
const double jamThreshold,
478 if (lane ==
nullptr) {
491 return writeError(
TLF(
"Could not build lane area detector with ID '%' in netedit; invalid traffic light ID.",
id));
505 vehicleTypes, nextEdges, detectPersons, name, timeThreshold,
506 speedThreshold, jamThreshold, friendlyPosCheck, show, parameters);
515 detectorE2->
incRef(
"buildDetectorE2");
526 const double pos,
const double endPos,
const SUMOTime period,
const std::string& trafficLight,
const std::string& filename,
527 const std::vector<std::string>& vehicleTypes,
const std::vector<std::string>& nextEdges,
const std::string& detectPersons,
528 const std::string& name,
const SUMOTime timeThreshold,
const double speedThreshold,
const double jamThreshold,
545 return writeError(
TLF(
"Could not build lane area detector with ID '%' in netedit; Lanes aren't consecutives.",
id));
547 pos, lanes.front()->getParentEdge()->getNBEdge()->getFinalLength(),
548 endPos, lanes.back()->getParentEdge()->getNBEdge()->getFinalLength(), friendlyPos)) {
554 return writeError(
TLF(
"Could not build lane area detector with ID '%' in netedit; invalid traffic light ID.",
id));
568 vehicleTypes, nextEdges, detectPersons, name, timeThreshold,
569 speedThreshold, jamThreshold, friendlyPos, show, parameters);
577 for (
const auto& lane : lanes) {
578 lane->addChildElement(detectorE2);
580 detectorE2->
incRef(
"buildDetectorE2Multilane");
591 const std::string& filename,
const std::vector<std::string>& vehicleTypes,
const std::vector<std::string>& nextEdges,
592 const std::string& detectPersons,
const std::string& name,
const SUMOTime timeThreshold,
const double speedThreshold,
593 const bool openEntry,
const bool expectedArrival,
const Parameterised::Map& parameters) {
613 name, timeThreshold, speedThreshold, openEntry, expectedArrival, parameters);
621 E3->incRef(
"buildDetectorE3");
636 if (lane ==
nullptr) {
638 }
else if (
E3 ==
nullptr) {
653 E3->addChildElement(entry);
654 entry->
incRef(
"buildDetectorEntry");
669 if (lane ==
nullptr) {
671 }
else if (
E3 ==
nullptr) {
686 E3->addChildElement(exit);
687 exit->
incRef(
"buildDetectorExit");
696 const std::string& filename,
const std::vector<std::string>& vehicleTypes,
const std::vector<std::string>& nextEdges,
697 const std::string& detectPersons,
const std::string& name,
const bool friendlyPos,
const Parameterised::Map& parameters) {
708 if (lane ==
nullptr) {
717 detectPersons, name, friendlyPos, parameters);
726 detectorE1Instant->
incRef(
"buildDetectorE1Instant");
736 const std::string& name,
const std::string& outfile,
const SUMOTime period,
const std::string& routeprobeID,
const double jamThreshold,
const std::vector<std::string>& vTypes,
748 }
else if ((routeprobeID.size() > 0) && (routeProbe ==
nullptr)) {
750 }
else if (lane ==
nullptr) {
763 new GNECalibrator(
id,
myNet,
myFileBucket, lane, pos, period, name, outfile, jamThreshold, vTypes, parameters) :
764 new GNECalibrator(
id,
myNet,
myFileBucket, lane, pos, period, name, outfile, routeProbe, jamThreshold, vTypes, parameters);
781 calibrator->
incRef(
"buildCalibrator");
791 const std::string& name,
const std::string& outfile,
const SUMOTime period,
const std::string& routeprobeID,
const double jamThreshold,
const std::vector<std::string>& vTypes,
803 }
else if ((routeprobeID.size() > 0) && (routeProbe ==
nullptr)) {
805 }
else if (edge ==
nullptr) {
817 new GNECalibrator(
id,
myNet,
myFileBucket, edge, pos, period, name, outfile, jamThreshold, vTypes, parameters) :
818 new GNECalibrator(
id,
myNet,
myFileBucket, edge, pos, period, name, outfile, routeProbe, jamThreshold, vTypes, parameters);
835 calibrator->
incRef(
"buildCalibrator");
852 if (vType ==
nullptr) {
854 }
else if (route ==
nullptr) {
856 }
else if (calibrator ==
nullptr) {
871 flow->
incRef(
"buildCalibratorFlow");
880 const std::vector<std::string>& edgeIDs,
const double prob,
const std::string& name,
881 const bool off,
const bool optional,
const SUMOTime timeThreshold,
905 if (edges.size() > 0) {
906 PositionVector laneShape = edges.front()->getChildLanes().front()->getLaneShape();
910 rerouter =
new GNERerouter(
id,
myNet,
myFileBucket, laneShape.
positionAtOffset2D(laneShape.
length2D() - 6), name, prob, off, optional, timeThreshold, vTypes, parameters);
912 rerouter =
new GNERerouter(
id,
myNet,
myFileBucket,
Position(0, 0), name, prob, off, optional, timeThreshold, vTypes, parameters);
915 rerouter =
new GNERerouter(
id,
myNet,
myFileBucket, pos, name, prob, off, optional, timeThreshold, vTypes, parameters);
918 std::vector<GNEAdditional*> rerouterSymbols;
919 for (
const auto& edge : edges) {
927 for (
const auto& rerouterSymbol : rerouterSymbols) {
933 rerouter->
incRef(
"buildRerouter");
935 for (
const auto& rerouterSymbol : rerouterSymbols) {
939 for (
int i = 0; i < (int)edges.size(); i++) {
940 edges.at(i)->addChildElement(rerouterSymbols.at(i));
954 if (rerouter ==
nullptr) {
960 }
else if (end < begin) {
961 return writeError(
TLF(
"Could not build interval with ID '%' in netedit; begin is greater than end.", rerouter->
getID()));
974 rerouterInterval->
incRef(
"buildRerouterInterval");
993 if (lane ==
nullptr) {
995 }
else if (rerouterInterval ==
nullptr) {
1007 closingLaneReroute->
incRef(
"buildClosingLaneReroute");
1023 if (edge ==
nullptr) {
1025 }
else if (rerouterInterval ==
nullptr) {
1037 closingLaneReroute->
incRef(
"buildClosingLaneReroute");
1052 if (edge ==
nullptr) {
1054 }
else if (rerouterInterval ==
nullptr) {
1066 destProbReroute->
incRef(
"builDestProbReroute");
1082 if (parkingArea ==
nullptr) {
1084 }
else if (rerouterInterval ==
nullptr) {
1096 parkingAreaReroute->
incRef(
"builParkingAreaReroute");
1112 if (route ==
nullptr) {
1114 }
else if (rerouterInterval ==
nullptr) {
1126 routeProbReroute->
incRef(
"buildRouteProbReroute");
1137 const std::string& name,
const std::string& file,
const SUMOTime begin,
const std::vector<std::string>& vTypes,
1149 if (edge ==
nullptr) {
1173 routeProbe->
incRef(
"buildRouteProbe");
1183 const std::vector<std::string>& laneIDs,
const std::string& name,
const std::vector<std::string>& vTypes,
const Parameterised::Map& parameters) {
1194 if (lanes.empty()) {
1204 std::vector<GNEAdditional*> VSSSymbols;
1205 for (
const auto& lane : lanes) {
1212 for (
const auto& VSSSymbol : VSSSymbols) {
1218 variableSpeedSign->
incRef(
"buildVariableSpeedSign");
1220 for (
const auto& VSSSymbol : VSSSymbols) {
1224 for (
int i = 0; i < (int)lanes.size(); i++) {
1225 lanes.at(i)->addChildElement(VSSSymbols.at(i));
1240 if (
VSS ==
nullptr) {
1253 VSS->addChildElement(variableSpeedSignStep);
1254 variableSpeedSignStep->
incRef(
"buildVariableSpeedSignStep");
1257 VSS->updateCenteringBoundary(
true);
1276 if (edge ==
nullptr) {
1282 }
else if (endTime < beginTime) {
1283 return writeError(
TLF(
"Could not build Vaporizer with ID '%' in netedit; begin is greater than end.", edge->
getID()));
1300 vaporizer->
incRef(
"buildVaporizer");
1310 const Position& center,
const bool fill,
const RGBColor& color,
const std::vector<std::string>& edgeIDs,
1314 if (edges.size() != edgeIDs.size()) {
1319 if (TAZShape.size() == 0) {
1322 for (
const auto& edge : edges) {
1323 TAZBoundary.
add(edge->getCenteringBoundary());
1330 if (sourceSinkEdge) {
1336 TAZShape = TAZBoundary.
getShape(
true);
1344 }
else if (TAZShape.size() == 0) {
1345 return writeError(
TLF(
"Could not build TAZ with ID '%' in netedit; Invalid Shape.",
id));
1357 for (
const auto& edge : edges) {
1368 TAZ->incRef(
"buildTAZ");
1369 for (
const auto& edge : edges) {
1373 TAZSource->
incRef(
"buildTAZ");
1374 TAZ->addChildElement(TAZSource);
1375 edge->addChildElement(TAZSource);
1379 TAZSink->
incRef(
"buildTAZ");
1380 TAZ->addChildElement(TAZSink);
1381 edge->addChildElement(TAZSink);
1387 TAZ->updateGeometry();
1401 if (
TAZ ==
nullptr) {
1403 }
else if (edge ==
nullptr) {
1410 if (((*it)->getTagProperty()->getTag() ==
SUMO_TAG_TAZSOURCE) && ((*it)->getParentAdditionals().front() ==
TAZ)) {
1411 existentTAZSource = (*it);
1415 if (existentTAZSource ==
nullptr) {
1425 TAZ->addChildElement(TAZSource);
1427 TAZSource->
incRef(
"buildTAZSource");
1451 if (
TAZ ==
nullptr) {
1453 }
else if (edge ==
nullptr) {
1460 if (((*it)->getTagProperty()->getTag() ==
SUMO_TAG_TAZSINK) && ((*it)->getParentAdditionals().front() ==
TAZ)) {
1461 existentTAZSink = (*it);
1465 if (existentTAZSink ==
nullptr) {
1475 TAZ->addChildElement(TAZSink);
1477 TAZSink->
incRef(
"buildTAZSink");
1496 const double voltage,
const double currentLimit,
const Parameterised::Map& parameters) {
1517 tractionSubstation->
incRef(
"buildTractionSubstation");
1526 const std::vector<std::string>& laneIDs,
const double startPos,
const double endPos,
const bool friendlyPos,
1527 const std::vector<std::string>& forbiddenInnerLanes,
const Parameterised::Map& parameters) {
1540 if (lanes.empty()) {
1545 return writeError(
TLF(
"Could not build overhead wire with ID '%' in netedit; Lanes aren't consecutives.",
id));
1547 startPos, lanes.front()->getParentEdge()->getNBEdge()->getFinalLength(),
1548 endPos, lanes.back()->getParentEdge()->getNBEdge()->getFinalLength(), friendlyPos)) {
1550 }
else if (tractionSubstation ==
nullptr) {
1562 for (
const auto& lane : lanes) {
1563 lane->addChildElement(overheadWire);
1565 overheadWire->
incRef(
"buildOverheadWire");
1576 const std::string& ,
const std::string& ,
const std::string& ,
1585 const RGBColor& color,
double layer,
double angle,
const std::string& imgFile,
const PositionVector& shape,
1586 bool geo,
bool fill,
double lineWidth,
const std::string& name,
const Parameterised::Map& parameters) {
1588 if (type ==
"jupedsim.walkable_area") {
1590 }
else if (type ==
"jupedsim.obstacle") {
1603 GNEPoly* poly =
new GNEPoly(
id,
myNet,
myFileBucket, type, shape, geo, fill, lineWidth, color, layer, angle, imgFile, name, parameters);
1612 poly->
incRef(
"addPolygon");
1622 const RGBColor& color,
const double x,
const double y,
const std::string& icon,
double layer,
double angle,
1623 const std::string& imgFile,
double width,
double height,
const std::string& name,
const Parameterised::Map& parameters) {
1642 GNEPOI*
POI =
new GNEPOI(
id,
myNet,
myFileBucket, type, color, pos,
false, ic, layer, angle, imgFile, width, height, name, parameters);
1651 POI->incRef(
"addPOI");
1660 const RGBColor& color,
const std::string& laneID,
double posOverLane,
const bool friendlyPos,
double posLat,
1661 const std::string& icon,
double layer,
double angle,
const std::string& imgFile,
double width,
double height,
1679 if (lane ==
nullptr) {
1687 GNEAdditional* POILane =
new GNEPOI(
id,
myNet,
myFileBucket, type, color, lane, posOverLane, friendlyPos, posLat, ic, layer,
1688 angle, imgFile, width, height, name, parameters);
1698 POILane->
incRef(
"buildPOILane");
1708 const RGBColor& color,
const double lon,
const double lat,
const std::string& icon,
double layer,
1709 double angle,
const std::string& imgFile,
double width,
double height,
const std::string& name,
1724 return writeError(
TLF(
"Could not build POI with ID '%' in netedit",
id) + std::string(
"; ") +
TL(
"Network requires a geo projection."));
1727 const auto pos =
Position(lon, lat);
1731 GNEPOI*
POIGEO =
new GNEPOI(
id,
myNet,
myFileBucket, type, color, pos,
true, ic, layer, angle, imgFile, width, height, name, parameters);
1740 POIGEO->incRef(
"buildPOIGeo");
1767 walkableArea->
incRef(
"addWalkableArea");
1794 obstacle->
incRef(
"addObstacle");
1822 std::vector<std::pair<SUMOTime, SUMOTime>> sortedIntervals;
1825 if (!rerouterChild->getTagProperty()->isSymbol()) {
1833 sortedIntervals.push_back(std::make_pair(newBegin, newEnd));
1835 std::sort(sortedIntervals.begin(), sortedIntervals.end());
1837 for (
int i = 0; i < (int)sortedIntervals.size() - 1; i++) {
1838 if (sortedIntervals.at(i).second > sortedIntervals.at(i + 1).first) {
1856 if ((pos < 0) || (pos > laneLength)) {
1860 if ((pos + length) > laneLength) {
1870 if (friendlyPos ==
true) {
1878 if ((pos < 0) || (pos > laneLength)) {
1882 if ((pos + length) > laneLength) {
1908 if ((to - from) < POSITION_EPS) {
1911 if ((from < 0) || (from > laneLength)) {
1914 if ((to < 0) || (to > laneLength)) {
1935 }
else if (from > laneLength) {
1944 }
else if (to > laneLength) {
1948 if ((to - from) < POSITION_EPS) {
1949 if (to >= POSITION_EPS) {
1950 from = to - POSITION_EPS;
2002std::vector<GNEEdge*>
2004 std::vector<GNEEdge*> edges;
2005 for (
const auto& edgeID : edgeIDs) {
2008 if (edge ==
nullptr) {
2013 edges.push_back(edge);
2020std::vector<GNELane*>
2022 std::vector<GNELane*> lanes;
2023 for (
const auto& laneID : laneIDs) {
2026 if (lane ==
nullptr) {
2031 lanes.push_back(lane);
2040 for (
const auto& tag : tags) {
2043 if (additionalElement) {
2044 return additionalElement;
2053 if (additionalElement) {
long long int SVCPermissions
bitset where each bit declares whether a certain SVC may use this edge/lane
const std::string DEFAULT_VTYPE_ID
SumoXMLTag
Numbers representing SUMO-XML - element names.
@ SUMO_TAG_TRACTION_SUBSTATION
A traction substation.
@ SUMO_TAG_INTERVAL
an aggreagated-output interval
@ SUMO_TAG_CLOSING_REROUTE
reroute of type closing
@ SUMO_TAG_REROUTER
A rerouter.
@ GNE_TAG_MULTI_LANE_AREA_DETECTOR
an e2 detector over multiple lanes (placed here due create Additional Frame)
@ SUMO_TAG_ROUTEPROBE
a routeprobe detector
@ 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_ACCESS
An access point for a train stop.
@ SUMO_TAG_CONTAINER_STOP
A container stop.
@ SUMO_TAG_PARKING_AREA_REROUTE
entry for an alternative parking zone
@ SUMO_TAG_TAZSINK
a sink within a district (connection road)
@ SUMO_TAG_BUS_STOP
A bus stop.
@ SUMO_TAG_POI
begin/end of the description of a Point of interest
@ SUMO_TAG_STEP
trigger: a step description
@ GNE_TAG_POIGEO
Point of interest over view with GEO attributes.
@ SUMO_TAG_FLOW
a flow definition using from and to edges or a route
@ SUMO_TAG_PARKING_AREA
A parking area.
@ SUMO_TAG_ROUTE_PROB_REROUTE
probability of route of a reroute
@ GNE_TAG_CALIBRATOR_LANE
A calibrator placed over lane.
@ SUMO_TAG_DET_ENTRY
an e3 entry point
@ SUMO_TAG_PARKING_SPACE
A parking space for a single vehicle within a parking area.
@ SUMO_TAG_ROUTE
description of a route
@ SUMO_TAG_POLY
begin/end of the description of a polygon
@ SUMO_TAG_OVERHEAD_WIRE_SECTION
An overhead wire section.
@ SUMO_TAG_TRAIN_STOP
A train stop (alias for bus stop)
@ SUMO_TAG_SOURCE
a source
@ SUMO_TAG_LANE
begin/end of the description of a single lane
@ SUMO_TAG_INSTANT_INDUCTION_LOOP
An instantenous induction loop.
@ SUMO_TAG_DEST_PROB_REROUTE
probability of destination of a reroute
@ GNE_TAG_POILANE
Point of interest over Lane.
@ GNE_TAG_JPS_OBSTACLE
polygon used for draw juPedSim obstacles
@ SUMO_TAG_DET_EXIT
an e3 exit point
@ SUMO_TAG_VAPORIZER
vaporizer of vehicles
@ SUMO_TAG_LANE_AREA_DETECTOR
alternative tag for e2 detector
@ SUMO_TAG_TAZSOURCE
a source within a district (connection road)
@ SUMO_TAG_CLOSING_LANE_REROUTE
lane of a reroute of type closing
@ SUMO_TAG_INDUCTION_LOOP
alternative tag for e1 detector
@ GNE_TAG_JPS_WALKABLEAREA
polygon used for draw juPedSim walkable areas
@ SUMO_TAG_CALIBRATOR
A calibrator placed over edge.
@ SUMO_TAG_ENTRY_EXIT_DETECTOR
alternative tag for e3 detector
@ SUMO_TAG_VSS
A variable speed sign.
@ SUMO_TAG_EDGE
begin/end of the description of an edge
@ GNE_ATTR_CENTER_AFTER_CREATION
flag to center camera after element creation
@ SUMO_ATTR_JAM_DIST_THRESHOLD
@ SUMO_ATTR_PARKING_LENGTH
@ SUMO_ATTR_VOLTAGE
voltage of the traction substation [V]
@ SUMO_ATTR_BEGIN
weights: time range begin
@ SUMO_ATTR_HALTING_TIME_THRESHOLD
@ SUMO_ATTR_CONTAINER_CAPACITY
@ SUMO_ATTR_HALTING_SPEED_THRESHOLD
@ SUMO_ATTR_END
weights: time range end
@ SUMO_ATTR_ROADSIDE_CAPACITY
@ SUMO_ATTR_CURRENTLIMIT
current limit of the traction substation [A]
@ SUMO_ATTR_CHARGINGPOWER
@ SUMO_ATTR_PERSON_CAPACITY
@ SUMO_ATTR_CHARGEDELAY
Delay in the charge of charging stations (different of waiting time)
@ SUMO_ATTR_TIME
trigger: the time of the step
const double INVALID_DOUBLE
invalid double
const double SUMO_const_laneWidth
std::string toString(const T &t, std::streamsize accuracy=gPrecision)
A class that stores a 2D geometrical boundary.
void add(double x, double y, double z=0)
Makes the boundary include the given coordinate.
PositionVector getShape(const bool closeShape) const
get position vector (shape) based on this boundary
bool writeError(const std::string &error)
write error and enable error creating element
bool checkValidDetectorID(const SumoXMLTag tag, const std::string &value)
check if the given detector ID is valid
bool checkListOfVehicleTypes(const SumoXMLTag tag, const std::string &id, const std::vector< std::string > &vTypeIDs)
check list of IDs
bool writeWarningDuplicated(const SumoXMLTag tag, const std::string &id, const SumoXMLTag checkedTag)
write warning duplicated element
bool writeErrorInvalidParent(const SumoXMLTag tag, const std::string &id, const std::vector< SumoXMLTag > parentTags, const std::string &parentID)
write error "invalid parent element" giving ids of current and parent element
bool myOverwriteElements
overwrite elements
bool checkValidAdditionalID(const SumoXMLTag tag, const std::string &value)
check if the given additional ID is valid
bool checkFileName(const SumoXMLTag tag, const std::string &id, const SumoXMLAttr attribute, const std::string &value)
check if the given filename is valid
bool writeErrorInvalidPosition(const SumoXMLTag tag, const std::string &id)
write error "invalid position"
FileBucket * myFileBucket
fileBucket
bool checkNegative(const SumoXMLTag tag, const std::string &id, const SumoXMLAttr attribute, const int value, const bool canBeZero)
check if the given int value is NOT negative
bool myRemainElements
remain elements
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
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
SumoXMLTag getTag() const
get XML myTag
bool getBoolAttribute(const SumoXMLAttr attr) const
get bool attribute
const std::string & getStringAttribute(const SumoXMLAttr attr) const
get string attribute
const std::vector< SumoBaseObject * > & getSumoBaseObjectChildren() const
get SumoBaseObject children
GNEAdditional * retrieveAdditionalElement(const std::vector< SumoXMLTag > tags, const std::string &id)
get element by ID
bool buildJpsWalkableArea(const CommonXMLStructure::SumoBaseObject *sumoBaseObject, const std::string &id, const PositionVector &shape, bool geo, const std::string &name, const Parameterised::Map ¶meters)
Builds a JuPedSim walkable area using the given values.
bool buildLaneCalibrator(const CommonXMLStructure::SumoBaseObject *sumoBaseObject, const std::string &id, const std::string &laneID, const double pos, const std::string &name, const std::string &outfile, const SUMOTime period, const std::string &routeprobe, const double jamThreshold, const std::vector< std::string > &vTypes, const Parameterised::Map ¶meters)
builds a microscopic calibrator over a lane
bool buildClosingReroute(const CommonXMLStructure::SumoBaseObject *sumoBaseObject, const std::string &closedEdgeID, SVCPermissions permissions)
builds a closing edge reroute
~GNEAdditionalHandler()
Destructor.
GNEAdditional * getRerouterIntervalParent(const CommonXMLStructure::SumoBaseObject *sumoBaseObject) const
get rerouter interval parent
std::vector< GNELane * > parseLanes(const SumoXMLTag tag, const std::string &id, const std::vector< std::string > &laneIDs)
parse lanes
void fixLaneDoublePosition(double &from, double &to, const double laneLengt)
fix the given positions over lane
bool checkFriendlyPosSmallLanes(double pos, const double length, const double laneLength, const bool friendlyPos)
check if enable friendly pos in small lanes
bool buildPOI(const CommonXMLStructure::SumoBaseObject *sumoBaseObject, const std::string &id, const std::string &type, const RGBColor &color, const double x, const double y, const std::string &icon, const double layer, const double angle, const std::string &imgFile, const double width, const double height, const std::string &name, const Parameterised::Map ¶meters)
Builds a POI using the given values.
bool buildPOIGeo(const CommonXMLStructure::SumoBaseObject *sumoBaseObject, const std::string &id, const std::string &type, const RGBColor &color, const double lon, const double lat, const std::string &icon, const double layer, const double angle, const std::string &imgFile, const double width, const double height, const std::string &name, const Parameterised::Map ¶meters)
Builds a POI in GEO coordinaten using the given values.
bool buildTrainStop(const CommonXMLStructure::SumoBaseObject *sumoBaseObject, const std::string &id, const std::string &laneID, const double startPos, const double endPos, const std::string &name, const std::vector< std::string > &lines, const int personCapacity, const double parkingLength, const RGBColor &color, const bool friendlyPosition, const double angle, const Parameterised::Map ¶meters)
Builds a train stop.
bool buildTAZSource(const CommonXMLStructure::SumoBaseObject *sumoBaseObject, const std::string &edgeID, const double departWeight)
Builds a TAZSource (Traffic Assignment Zone)
bool buildOverheadWireClamp(const CommonXMLStructure::SumoBaseObject *sumoBaseObject, const std::string &id, const std::string &overheadWireIDStartClamp, const std::string &laneIDStartClamp, const std::string &overheadWireIDEndClamp, const std::string &laneIDEndClamp, const Parameterised::Map ¶meters)
build overhead wire clamp
bool buildOverheadWire(const CommonXMLStructure::SumoBaseObject *sumoBaseObject, const std::string &id, const std::string &substationId, const std::vector< std::string > &laneIDs, const double startPos, const double endPos, const bool friendlyPos, const std::vector< std::string > &forbiddenInnerLanes, const Parameterised::Map ¶meters)
build overhead wire
GNEAdditional * getAdditionalParent(const CommonXMLStructure::SumoBaseObject *sumoBaseObject, SumoXMLTag tag) const
get additional parent
bool buildMultiLaneDetectorE2(const CommonXMLStructure::SumoBaseObject *sumoBaseObject, const std::string &id, const std::vector< std::string > &laneIDs, const double pos, const double endPos, const SUMOTime period, const std::string &trafficLight, const std::string &filename, const std::vector< std::string > &vehicleTypes, const std::vector< std::string > &nextEdges, const std::string &detectPersons, const std::string &name, const SUMOTime timeThreshold, const double speedThreshold, const double jamThreshold, const bool friendlyPos, const bool show, const Parameterised::Map ¶meters)
Builds a multi-lane Area Detector (E2)
bool buildE1Detector(const CommonXMLStructure::SumoBaseObject *sumoBaseObject, const std::string &id, const std::string &laneID, const double position, const SUMOTime period, const std::string &file, const std::vector< std::string > &vehicleTypes, const std::vector< std::string > &nextEdges, const std::string &detectPersons, const std::string &name, const bool friendlyPos, const Parameterised::Map ¶meters)
Builds a induction loop detector (E1)
bool buildVariableSpeedSignStep(const CommonXMLStructure::SumoBaseObject *sumoBaseObject, const SUMOTime time, const double speed)
Builds a VariableSpeedSign Step.
bool buildPOILane(const CommonXMLStructure::SumoBaseObject *sumoBaseObject, const std::string &id, const std::string &type, const RGBColor &color, const std::string &laneID, const double posOverLane, const bool friendlyPos, const double posLat, const std::string &icon, const double layer, const double angle, const std::string &imgFile, const double width, const double height, const std::string &name, const Parameterised::Map ¶meters)
Builds a POI over lane using the given values.
bool buildBusStop(const CommonXMLStructure::SumoBaseObject *sumoBaseObject, const std::string &id, const std::string &laneID, const double startPos, const double endPos, const std::string &name, const std::vector< std::string > &lines, const int personCapacity, const double parkingLength, const RGBColor &color, const bool friendlyPosition, const double angle, const Parameterised::Map ¶meters)
Builds a bus stop.
bool buildAccess(const CommonXMLStructure::SumoBaseObject *sumoBaseObject, const std::string &laneID, const std::string &pos, const double length, const bool friendlyPos, const Parameterised::Map ¶meters)
Builds an Access.
static bool accessExists(const GNEAdditional *stoppingPlaceParent, const GNEEdge *edge)
check if a GNEAccess can be created in the given edge
bool buildDetectorEntry(const CommonXMLStructure::SumoBaseObject *sumoBaseObject, const std::string &laneID, const double pos, const bool friendlyPos, const Parameterised::Map ¶meters)
Builds a entry detector (E3)
bool buildContainerStop(const CommonXMLStructure::SumoBaseObject *sumoBaseObject, const std::string &id, const std::string &laneID, const double startPos, const double endPos, const std::string &name, const std::vector< std::string > &lines, const int containerCapacity, const double parkingLength, const RGBColor &color, const bool friendlyPosition, const double angle, const Parameterised::Map ¶meters)
Builds a container stop.
bool buildEdgeCalibrator(const CommonXMLStructure::SumoBaseObject *sumoBaseObject, const std::string &id, const std::string &edgeID, const double pos, const std::string &name, const std::string &outfile, const SUMOTime period, const std::string &routeprobe, const double jamThreshold, const std::vector< std::string > &vTypes, const Parameterised::Map ¶meters)
builds a microscopic calibrator over an edge
bool buildRerouter(const CommonXMLStructure::SumoBaseObject *sumoBaseObject, const std::string &id, const Position &pos, const std::vector< std::string > &edgeIDs, const double prob, const std::string &name, const bool off, const bool optional, const SUMOTime timeThreshold, const std::vector< std::string > &vTypes, const Parameterised::Map ¶meters)
builds a rerouter
bool buildDestProbReroute(const CommonXMLStructure::SumoBaseObject *sumoBaseObject, const std::string &newEdgeDestinationID, const double probability)
builds a dest prob reroute
bool buildClosingLaneReroute(const CommonXMLStructure::SumoBaseObject *sumoBaseObject, const std::string &closedLane, SVCPermissions permissions)
builds a closing lane reroute
bool buildCalibratorFlow(const CommonXMLStructure::SumoBaseObject *sumoBaseObject, const SUMOVehicleParameter &vehicleParameter)
builds a calibrator flow
bool buildVariableSpeedSign(const CommonXMLStructure::SumoBaseObject *sumoBaseObject, const std::string &id, const Position &pos, const std::vector< std::string > &laneIDs, const std::string &name, const std::vector< std::string > &vTypes, const Parameterised::Map ¶meters)
Builds a VariableSpeedSign (lane speed additional)
bool buildParkingAreaReroute(const CommonXMLStructure::SumoBaseObject *sumoBaseObject, const std::string &newParkignAreaID, const double probability, const bool visible)
builds a parking area reroute
GNEAdditionalHandler()=delete
invalidate default constructo
bool buildDetectorExit(const CommonXMLStructure::SumoBaseObject *sumoBaseObject, const std::string &laneID, const double pos, const bool friendlyPos, const Parameterised::Map ¶meters)
Builds a exit detector (E3)
bool buildParkingSpace(const CommonXMLStructure::SumoBaseObject *sumoBaseObject, const double x, const double y, const double z, const std::string &name, const std::string &width, const std::string &length, const std::string &angle, const double slope, const Parameterised::Map ¶meters)
Builds a Parking Space.
bool buildChargingStation(const CommonXMLStructure::SumoBaseObject *sumoBaseObject, const std::string &id, const std::string &laneID, const double startPos, const double endPos, const std::string &name, const double chargingPower, const double totalPower, const double efficiency, const bool chargeInTransit, const SUMOTime chargeDelay, const std::string &chargeType, const SUMOTime waitingTime, const bool friendlyPosition, const std::string &parkingAreaID, const Parameterised::Map ¶meters)
Builds a charging Station.
const bool myAllowUndoRedo
allow undo/redo
bool checkLaneDoublePosition(double from, const double to, const double laneLength, const bool friendlyPos)
check if the given positions over a lane is valid
std::vector< GNEEdge * > parseEdges(const SumoXMLTag tag, const std::string &id, const std::vector< std::string > &edgeIDs)
parse edges
bool buildTractionSubstation(const CommonXMLStructure::SumoBaseObject *sumoBaseObject, const std::string &id, const Position &pos, const double voltage, const double currentLimit, const Parameterised::Map ¶meters)
build traction substation
bool checkLanePosition(double pos, const double length, const double laneLength, const bool friendlyPos)
check if the given position over a lane is valid
bool buildRerouterInterval(const CommonXMLStructure::SumoBaseObject *sumoBaseObject, const SUMOTime begin, const SUMOTime end)
builds a rerouter interval
bool buildDetectorE1Instant(const CommonXMLStructure::SumoBaseObject *sumoBaseObject, const std::string &id, const std::string &laneID, const double pos, const std::string &filename, const std::vector< std::string > &vehicleTypes, const std::vector< std::string > &nextEdges, const std::string &detectPersons, const std::string &name, const bool friendlyPos, const Parameterised::Map ¶meters)
Builds a Instant Induction Loop Detector (E1Instant)
bool buildTAZSink(const CommonXMLStructure::SumoBaseObject *sumoBaseObject, const std::string &edgeID, const double arrivalWeight)
Builds a TAZSink (Traffic Assignment Zone)
bool checkElement(const SumoXMLTag tag, GNEAdditional *additional)
check if element exist, and if overwrite
bool buildSingleLaneDetectorE2(const CommonXMLStructure::SumoBaseObject *sumoBaseObject, const std::string &id, const std::string &laneID, const double pos, const double length, const SUMOTime period, const std::string &trafficLight, const std::string &filename, const std::vector< std::string > &vehicleTypes, const std::vector< std::string > &nextEdges, const std::string &detectPersons, const std::string &name, const SUMOTime timeThreshold, const double speedThreshold, const double jamThreshold, const bool friendlyPos, const bool show, const Parameterised::Map ¶meters)
Builds a single-lane Area Detector (E2)
bool checkOverlappingRerouterIntervals(GNEAdditional *rerouter, const SUMOTime newBegin, const SUMOTime newEnd)
check if an overlapping is produced in rerouter if a interval with certain begin and end is inserted
GNENet * myNet
pointer to GNENet
bool buildJpsObstacle(const CommonXMLStructure::SumoBaseObject *sumoBaseObject, const std::string &id, const PositionVector &shape, bool geo, const std::string &name, const Parameterised::Map ¶meters)
Builds a JuPedSim obstacle using the given values.
bool buildParkingArea(const CommonXMLStructure::SumoBaseObject *sumoBaseObject, const std::string &id, const std::string &laneID, const double startPos, const double endPos, const std::string &departPos, const std::string &name, const std::vector< std::string > &badges, const bool friendlyPosition, const int roadSideCapacity, const bool onRoad, const double width, const double length, const double angle, const bool lefthand, const Parameterised::Map ¶meters)
Builds a Parking Area.
bool buildTAZ(const CommonXMLStructure::SumoBaseObject *sumoBaseObject, const std::string &id, const PositionVector &shape, const Position ¢er, const bool fill, const RGBColor &color, const std::vector< std::string > &edgeIDs, const std::string &name, const Parameterised::Map ¶meters)
Builds a TAZ (Traffic Assignment Zone)
bool buildVaporizer(const CommonXMLStructure::SumoBaseObject *sumoBaseObject, const std::string &edgeID, const SUMOTime from, const SUMOTime endTime, const std::string &name, const Parameterised::Map ¶meters)
Builds a vaporizer (lane speed additional)
bool buildRouteProbe(const CommonXMLStructure::SumoBaseObject *sumoBaseObject, const std::string &id, const std::string &edgeID, const SUMOTime period, const std::string &name, const std::string &file, const SUMOTime begin, const std::vector< std::string > &vTypes, const Parameterised::Map ¶meters)
builds a Route probe
bool buildDetectorE3(const CommonXMLStructure::SumoBaseObject *sumoBaseObject, const std::string &id, const Position &pos, const SUMOTime period, const std::string &filename, const std::vector< std::string > &vehicleTypes, const std::vector< std::string > &nextEdges, const std::string &detectPersons, const std::string &name, const SUMOTime timeThreshold, const double speedThreshold, const bool openEntry, const bool expectedArrival, const Parameterised::Map ¶meters)
Builds a multi entry exit detector (E3)
bool buildRouteProbReroute(const CommonXMLStructure::SumoBaseObject *sumoBaseObject, const std::string &newRouteID, const double probability)
builds a route prob reroute
bool buildPolygon(const CommonXMLStructure::SumoBaseObject *sumoBaseObject, const std::string &id, const std::string &type, const RGBColor &color, const double layer, const double angle, const std::string &imgFile, const PositionVector &shape, const bool geo, const bool fill, const double lineWidth, const std::string &name, const Parameterised::Map ¶meters)
Builds a polygon using the given values.
bool checkMultiLanePosition(double fromPos, const double fromLaneLength, const double toPos, const double tolaneLength, const bool friendlyPos)
check if the given positions over two lanes are valid
virtual void updateCenteringBoundary(const bool updateGrid)=0
update centering boundary (implies change in RTREE)
static bool areLaneConsecutives(const std::vector< GNELane * > &lanes)
check if the given lanes are consecutive
virtual Position getPositionInView() const =0
Returns position of additional in view.
void updateOptions()
update options
GNEApplicationWindowHelper::FileBucketHandler * getFileBucketHandler() const
get file bucket handler
const std::string getID() const override
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
virtual void updateGeometry()=0
update pre-computed geometry information
static GNEBusStop * buildTrainStop(GNENet *net)
default constructor
static GNEBusStop * buildBusStop(GNENet *net)
default constructor
Result getResult() const
get result to indicate if this dialog was closed accepting or rejecting changes
NBEdge * getNBEdge() const
returns the internal NBEdge
Boundary getCenteringBoundary() const override
Returns the boundary to which the view shall be centered in order to show the object.
const GNEHierarchicalContainerParents< GNEAdditional * > & getParentAdditionals() const
get parent additionals
const GNEHierarchicalContainerChildren< GNELane * > & getChildLanes() const
get child lanes
const GNEHierarchicalContainerChildren< GNEAdditional * > & getChildAdditionals() const
return child additionals
const GNEHierarchicalContainerChildrenSet< GNETAZSourceSink * > & getChildTAZSourceSinks() const
return child TAZSourceSinks (Set)
void addChildElement(ChildType *element)
add child without updating parent (ONLY used if we're creating elements without undo-redo)
bool allowPedestrians() const
check if current lane allow pedestrians
GNEEdge * getParentEdge() const
get parent edge
GNELane * retrieveLane(const std::string &id, bool hardFail=true, bool checkVolatileChange=false) const
get lane by id
GNEAdditional * retrieveAdditional(SumoXMLTag type, const std::string &id, bool hardFail=true) const
Returns the named additional.
void insertTAZSourceSink(GNETAZSourceSink *sourceSink)
Insert a sourceSink element in container.
GNEAdditional * retrieveRerouterInterval(const std::string &rerouterID, const SUMOTime begin, const SUMOTime end) const
Returns the rerouter interval defined by given begin and end.
void insertAdditional(GNEAdditional *additional)
Insert a additional 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.
void deleteAdditional(GNEAdditional *additional, GNEUndoList *undoList)
remove additional
void disableUpdateGeometry()
disable update geometry of elements after inserting or removing an element in net
GNENetHelper::AttributeCarriers * getAttributeCarriers() const
get all attribute carriers used in this net
GNEApplicationWindow * getGNEApplicationWindow() const
get tag properties database
GNEUndoList * getUndoList() const
get undo list(used for simplify code)
GNEViewNet * getViewNet() const
get view net (used for simplify code)
void enableUpdateGeometry()
void incRef(const std::string &debugMsg="")
Increase reference.
void setAttribute(SumoXMLAttr key, const std::string &value, GNEUndoList *undoList) override
SumoXMLTag getTag() const
get Tag vinculated with this attribute Property
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...
virtual void centerTo(GUIGlID id, bool applyZoom, double zoomDist=20)
centers to the chosen artifact
static const GeoConvHelper & getFinal()
the coordinate transformation for writing the location element and for tracking the original coordina...
double getFinalLength() const
get length that will be assigned to the lanes in the final network
static const std::vector< SumoXMLTag > busStops
busStops namespace
static const std::vector< SumoXMLTag > laneAreaDetectors
lane area detectors namespace
static const std::vector< SumoXMLTag > POIs
POIs namespace.
static const std::vector< SumoXMLTag > calibrators
calibrators namespace
static const std::vector< SumoXMLTag > polygons
polygon namespace
static OptionsCont & getOptions()
Retrieves the options.
C++ TraCI client API implementation.
std::map< std::string, std::string > Map
parameters map
A point in 2D or 3D with translation and scaling methods.
static const Position INVALID
used to indicate that a position is valid
double length2D() const
Returns the length.
void move2side(double amount, double maxExtension=100)
move position vector to side using certain amount
Position getCentroid() const
Returns the centroid (closes the polygon if unclosed)
Position positionAtOffset2D(double pos, double lateralOffset=0, bool extrapolateBeyond=false) const
Returns the position at the given length.
Structure representing possible vehicle parameter.
std::string vtypeid
The vehicle's type id.
std::string routeid
The vehicle's route id.
static StringBijection< ChargeType > ChargeTypes
charge type
static StringBijection< POIIcon > POIIcons
POI icon values.
static bool isValidNetID(const std::string &value)
whether the given string is a valid id for a network element
bool hasString(const std::string &str) const
check if the given string exist
T get(const std::string &str) const
get key