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 std::string& fromEdgeID,
const std::string& fromTAZID,
const std::string& fromJunctionID,
const std::string& fromBusStopID,
const std::string& fromTrainStopID,
612 const std::string& toEdgeID,
const std::string& toTAZID,
const std::string& toJunctionID,
const std::string& toBusStopID,
const std::string& toTrainStopID,
613 double arrivalPos,
const std::vector<std::string>& types,
const std::vector<std::string>& modes,
const std::vector<std::string>& lines) {
627 if ((toBusStop ==
nullptr) && (toTrainStop ==
nullptr)) {
648 if (personParent ==
nullptr) {
651 fromBusStop, toBusStop, fromTrainStop, toTrainStop).first ==
SUMO_TAG_NOTHING) {
656 fromEdge, fromTAZ, fromJunction, fromBusStop, fromTrainStop,
657 toEdge, toTAZ, toJunction, toBusStop, toTrainStop,
658 arrivalPos, types, modes, lines);
699 personTrip->
incRef(
"buildPersonTrip");
707 const std::string& fromEdgeID,
const std::string& fromTAZID,
const std::string& fromJunctionID,
const std::string& fromBusStopID,
const std::string& fromTrainStopID,
708 const std::string& toEdgeID,
const std::string& toTAZID,
const std::string& toJunctionID,
const std::string& toBusStopID,
const std::string& toTrainStopID,
709 const std::vector<std::string>& edgeIDs,
const std::string& routeID,
double arrivalPos) {
725 if ((toBusStop ==
nullptr) && (toTrainStop ==
nullptr)) {
730 edges.erase(std::unique(edges.begin(), edges.end()), edges.end());
748 if (personParent ==
nullptr) {
751 fromBusStop, toBusStop, fromTrainStop, toTrainStop).first ==
SUMO_TAG_NOTHING) {
756 fromEdge, fromTAZ, fromJunction, fromBusStop, fromTrainStop,
757 toEdge, toTAZ, toJunction, toBusStop, toTrainStop,
758 edges, route, arrivalPos);
799 for (
const auto& edge : edges) {
800 edge->addChildElement(walk);
805 walk->
incRef(
"buildWalk");
813 const std::string& fromEdgeID,
const std::string& fromBusStopID,
const std::string& fromTrainStopID,
814 const std::string& toEdgeID,
const std::string& toBusStopID,
const std::string& toTrainStopID,
815 double arrivalPos,
const std::vector<std::string>& lines) {
825 if ((toBusStop ==
nullptr) && (toTrainStop ==
nullptr)) {
840 if (personParent ==
nullptr) {
847 fromEdge, fromBusStop, fromTrainStop,
848 toEdge, toBusStop, toTrainStop,
872 ride->
incRef(
"buildRide");
884 if (type ==
nullptr) {
898 container->
incRef(
"buildContainer");
911 if (type ==
nullptr) {
925 containerFlow->
incRef(
"buildContainerFlow");
934 const std::string& toEdgeID,
const std::string& toContainerStopID,
const std::vector<std::string>& ,
const double arrivalPos) {
949 if (containerParent ==
nullptr) {
956 toEdge, toContainerStop, arrivalPos);
973 if (fromContainerStop) {
976 if (toContainerStop) {
979 transport->
incRef(
"buildTransport");
987 const std::string& toEdgeID,
const std::string& toContainerStopID,
const std::vector<std::string>& edgeIDs,
const double speed,
988 const double departPosition,
const double arrivalPosition) {
997 edges.erase(std::unique(edges.begin(), edges.end()), edges.end());
1006 if (containerParent ==
nullptr) {
1013 toContainerStop, edges, departPosition, arrivalPosition, speed);
1030 if (fromContainerStop) {
1033 if (toContainerStop) {
1036 for (
const auto& edge : edges) {
1037 edge->addChildElement(tranship);
1039 tranship->
incRef(
"buildTranship");
1047 const std::string& trainStopID,
const double endPos,
const SUMOTime duration,
const SUMOTime until,
1048 const std::string& actType,
const bool friendlyPos,
const int parameterSet) {
1055 if (personParent ==
nullptr) {
1062 endPos, duration, until, actType, friendlyPos, parameterSet);
1082 stopPlan->
incRef(
"buildPersonStop");
1090 const std::string& containerStopID,
const double endPos,
const SUMOTime duration,
1091 const SUMOTime until,
const std::string& actType,
const bool friendlyPos,
const int parameterSet) {
1097 if (containerParent ==
nullptr) {
1104 endPos, duration, until, actType, friendlyPos, parameterSet);
1118 if (containerStop) {
1121 stopPlan->
incRef(
"buildContainerStop");
1132 if (objParent ==
nullptr) {
1162 bool waypoint =
false;
1173 bool validParentDemandElement =
true;
1175 if (stopParameters.
busstop.size() > 0) {
1179 if (stoppingPlace ==
nullptr) {
1185 writeError(
TL(
"Containers don't support stops at busStops or trainStops"));
1186 validParentDemandElement =
false;
1193 writeError(
TL(
"Persons don't support stops at containerStops"));
1194 validParentDemandElement =
false;
1201 writeError(
TL(
"Persons don't support stops at chargingStations"));
1202 validParentDemandElement =
false;
1204 writeError(
TL(
"Containers don't support stops at chargingStations"));
1205 validParentDemandElement =
false;
1207 }
else if (stopParameters.
parkingarea.size() > 0) {
1212 writeError(
TL(
"Persons don't support stops at parkingAreas"));
1213 validParentDemandElement =
false;
1215 writeError(
TL(
"Containers don't support stops at parkingAreas"));
1216 validParentDemandElement =
false;
1218 }
else if (stopParameters.
lane.size() > 0) {
1221 }
else if (stopParameters.
edge.size() > 0) {
1225 writeError(
TL(
"vehicles don't support stops at edges"));
1226 validParentDemandElement =
false;
1235 if (validParentDemandElement) {
1237 if (stoppingPlace && lane && edge) {
1238 writeError(
TL(
"A stop must be defined either over a stoppingPlace, a edge or a lane"));
1239 }
else if (!stoppingPlace && !lane && !edge) {
1240 writeError(
TL(
"A stop requires only a stoppingPlace, edge or lane"));
1241 }
else if (stoppingPlace) {
1253 stop =
new GNEStop(stopTagType,
myNet, stopParent, stoppingPlace, stopParameters);
1265 stop->
incRef(
"buildStoppingPlaceStop");
1280 stop->
incRef(
"buildLaneStop");
1292 const bool centerAfterCreation) {
1294 if (personParent ==
nullptr) {
1341 if (fromEdge && !toEdge && !fromTAZ && !toTAZ && !fromJunction && !toJunction &&
1342 !fromBusStop && !toBusStop && !fromTrainStop && !toTrainStop &&
1343 consecutiveEdges.empty() && !route) {
1347 if (consecutiveEdges.size() > 0) {
1353 consecutiveEdges,
"", arrivalPos);
1360 {}, route->
getID(), arrivalPos);
1364 fromEdge, toEdge, fromTAZ, toTAZ, fromJunction, toJunction,
1365 fromBusStop, toBusStop, fromTrainStop, toTrainStop).first);
1367 if (fromEdge && toEdge) {
1370 fromEdge->getID(),
"",
"",
"",
"",
1371 toEdge->getID(),
"",
"",
"",
"",
1372 {},
"", arrivalPos);
1373 }
else if (fromEdge && toTAZ) {
1376 fromEdge->getID(),
"",
"",
"",
"",
1377 "", toTAZ->getID(),
"",
"",
"",
1378 {},
"", arrivalPos);
1379 }
else if (fromEdge && toJunction) {
1382 fromEdge->getID(),
"",
"",
"",
"",
1383 "",
"", toJunction->getID(),
"",
"",
1384 {},
"", arrivalPos);
1385 }
else if (fromEdge && toBusStop) {
1388 fromEdge->getID(),
"",
"",
"",
"",
1389 "",
"",
"", toBusStop->getID(),
"",
1390 {},
"", arrivalPos);
1391 }
else if (fromEdge && toTrainStop) {
1394 fromEdge->getID(),
"",
"",
"",
"",
1395 "",
"",
"",
"", toTrainStop->
getID(),
1396 {},
"", arrivalPos);
1398 }
else if (fromTAZ && toEdge) {
1401 "", fromTAZ->getID(),
"",
"",
"",
1402 toEdge->getID(),
"",
"",
"",
"",
1403 {},
"", arrivalPos);
1404 }
else if (fromTAZ && toTAZ) {
1407 "", fromTAZ->getID(),
"",
"",
"",
1408 "", toTAZ->getID(),
"",
"",
"",
1409 {},
"", arrivalPos);
1410 }
else if (fromTAZ && toJunction) {
1413 "", fromTAZ->getID(),
"",
"",
"",
1414 "",
"", toJunction->getID(),
"",
"",
1415 {},
"", arrivalPos);
1416 }
else if (fromTAZ && toBusStop) {
1419 "", fromTAZ->getID(),
"",
"",
"",
1420 "",
"",
"", toBusStop->getID(),
"",
1421 {},
"", arrivalPos);
1422 }
else if (fromTAZ && toTrainStop) {
1425 "", fromTAZ->getID(),
"",
"",
"",
1426 "",
"",
"",
"", toTrainStop->
getID(),
1427 {},
"", arrivalPos);
1429 }
else if (fromJunction && toEdge) {
1432 "",
"", fromJunction->getID(),
"",
"",
1433 toEdge->getID(),
"",
"",
"",
"",
1434 {},
"", arrivalPos);
1435 }
else if (fromJunction && toTAZ) {
1438 "",
"", fromJunction->getID(),
"",
"",
1439 "", toTAZ->getID(),
"",
"",
"",
1440 {},
"", arrivalPos);
1441 }
else if (fromJunction && toJunction) {
1444 "",
"", fromJunction->getID(),
"",
"",
1445 "",
"", toJunction->getID(),
"",
"",
1446 {},
"", arrivalPos);
1447 }
else if (fromJunction && toBusStop) {
1450 "",
"", fromJunction->getID(),
"",
"",
1451 "",
"",
"", toBusStop->getID(),
"",
1452 {},
"", arrivalPos);
1453 }
else if (fromJunction && toTrainStop) {
1456 "",
"", fromJunction->getID(),
"",
"",
1457 "",
"",
"",
"", toTrainStop->
getID(),
1458 {},
"", arrivalPos);
1460 }
else if (fromBusStop && toEdge) {
1463 "",
"",
"", fromBusStop->getID(),
"",
1464 toEdge->getID(),
"",
"",
"",
"",
1465 {},
"", arrivalPos);
1466 }
else if (fromBusStop && toTAZ) {
1469 "",
"",
"", fromBusStop->getID(),
"",
1470 "", toTAZ->getID(),
"",
"",
"",
1471 {},
"", arrivalPos);
1472 }
else if (fromBusStop && toJunction) {
1475 "",
"",
"", fromBusStop->getID(),
"",
1476 "",
"", toJunction->getID(),
"",
"",
1477 {},
"", arrivalPos);
1478 }
else if (fromBusStop && toBusStop) {
1481 "",
"",
"", fromBusStop->getID(),
"",
1482 "",
"",
"", toBusStop->getID(),
"",
1483 {},
"", arrivalPos);
1484 }
else if (fromBusStop && toTrainStop) {
1487 "",
"",
"", fromBusStop->getID(),
"",
1488 "",
"",
"",
"", toTrainStop->
getID(),
1489 {},
"", arrivalPos);
1491 }
else if (fromTrainStop && toEdge) {
1494 "",
"",
"",
"", fromTrainStop->getID(),
1495 toEdge->getID(),
"",
"",
"",
"",
1496 {},
"", arrivalPos);
1497 }
else if (fromTrainStop && toTAZ) {
1500 "",
"",
"",
"", fromTrainStop->getID(),
1501 "", toTAZ->getID(),
"",
"",
"",
1502 {},
"", arrivalPos);
1503 }
else if (fromTrainStop && toJunction) {
1506 "",
"",
"",
"", fromTrainStop->getID(),
1507 "",
"", toJunction->getID(),
"",
"",
1508 {},
"", arrivalPos);
1509 }
else if (fromTrainStop && toBusStop) {
1512 "",
"",
"",
"", fromTrainStop->getID(),
1513 "",
"",
"", toBusStop->getID(),
"",
1514 {},
"", arrivalPos);
1515 }
else if (fromTrainStop && toTrainStop) {
1518 "",
"",
"",
"", fromTrainStop->getID(),
1519 "",
"",
"",
"", toTrainStop->
getID(),
1520 {},
"", arrivalPos);
1525 fromTAZ, toTAZ, fromJunction, toJunction, fromBusStop, toBusStop,
1526 fromTrainStop, toTrainStop).first);
1528 if (fromEdge && toEdge) {
1531 fromEdge->
getID(),
"",
"",
"",
"",
1532 toEdge->
getID(),
"",
"",
"",
"",
1533 arrivalPos, types, modes, lines);
1534 }
else if (fromEdge && toTAZ) {
1537 fromEdge->
getID(),
"",
"",
"",
"",
1538 "", toTAZ->
getID(),
"",
"",
"",
1539 arrivalPos, types, modes, lines);
1540 }
else if (fromEdge && toJunction) {
1543 fromEdge->
getID(),
"",
"",
"",
"",
1544 "",
"", toJunction->
getID(),
"",
"",
1545 arrivalPos, types, modes, lines);
1546 }
else if (fromEdge && toBusStop) {
1549 fromEdge->
getID(),
"",
"",
"",
"",
1550 "",
"",
"", toBusStop->
getID(),
"",
1551 arrivalPos, types, modes, lines);
1552 }
else if (fromEdge && toTrainStop) {
1555 fromEdge->
getID(),
"",
"",
"",
"",
1556 "",
"",
"",
"", toTrainStop->
getID(),
1557 arrivalPos, types, modes, lines);
1559 }
else if (fromTAZ && toEdge) {
1562 "", fromTAZ->
getID(),
"",
"",
"",
1563 toEdge->
getID(),
"",
"",
"",
"",
1564 arrivalPos, types, modes, lines);
1565 }
else if (fromTAZ && toTAZ) {
1568 "", fromTAZ->
getID(),
"",
"",
"",
1569 "", toTAZ->
getID(),
"",
"",
"",
1570 arrivalPos, types, modes, lines);
1571 }
else if (fromTAZ && toJunction) {
1574 "", fromTAZ->
getID(),
"",
"",
"",
1575 "",
"", toJunction->
getID(),
"",
"",
1576 arrivalPos, types, modes, lines);
1577 }
else if (fromTAZ && toBusStop) {
1580 "", fromTAZ->
getID(),
"",
"",
"",
1581 "",
"",
"", toBusStop->
getID(),
"",
1582 arrivalPos, types, modes, lines);
1583 }
else if (fromTAZ && toTrainStop) {
1586 "", fromTAZ->
getID(),
"",
"",
"",
1587 "",
"",
"",
"", toTrainStop->
getID(),
1588 arrivalPos, types, modes, lines);
1590 }
else if (fromJunction && toEdge) {
1593 "",
"", fromJunction->
getID(),
"",
"",
1594 toEdge->
getID(),
"",
"",
"",
"",
1595 arrivalPos, types, modes, lines);
1596 }
else if (fromJunction && toTAZ) {
1599 "",
"", fromJunction->
getID(),
"",
"",
1600 "", toTAZ->
getID(),
"",
"",
"",
1601 arrivalPos, types, modes, lines);
1602 }
else if (fromJunction && toJunction) {
1605 "",
"", fromJunction->
getID(),
"",
"",
1606 "",
"", toJunction->
getID(),
"",
"",
1607 arrivalPos, types, modes, lines);
1608 }
else if (fromJunction && toBusStop) {
1611 "",
"", fromJunction->
getID(),
"",
"",
1612 "",
"",
"", toBusStop->
getID(),
"",
1613 arrivalPos, types, modes, lines);
1614 }
else if (fromJunction && toTrainStop) {
1617 "",
"", fromJunction->
getID(),
"",
"",
1618 "",
"",
"",
"", toTrainStop->
getID(),
1619 arrivalPos, types, modes, lines);
1621 }
else if (fromBusStop && toEdge) {
1624 "",
"",
"", fromBusStop->
getID(),
"",
1625 toEdge->
getID(),
"",
"",
"",
"",
1626 arrivalPos, types, modes, lines);
1627 }
else if (fromBusStop && toTAZ) {
1630 "",
"",
"", fromBusStop->
getID(),
"",
1631 "", toTAZ->
getID(),
"",
"",
"",
1632 arrivalPos, types, modes, lines);
1633 }
else if (fromBusStop && toJunction) {
1636 "",
"",
"", fromBusStop->
getID(),
"",
1637 "",
"", toJunction->
getID(),
"",
"",
1638 arrivalPos, types, modes, lines);
1639 }
else if (fromBusStop && toBusStop) {
1642 "",
"",
"", fromBusStop->
getID(),
"",
1643 "",
"",
"", toBusStop->
getID(),
"",
1644 arrivalPos, types, modes, lines);
1645 }
else if (fromBusStop && toTrainStop) {
1648 "",
"",
"", fromBusStop->
getID(),
"",
1649 "",
"",
"",
"", toTrainStop->
getID(),
1650 arrivalPos, types, modes, lines);
1652 }
else if (fromTrainStop && toEdge) {
1655 "",
"",
"",
"", fromTrainStop->
getID(),
1656 toEdge->
getID(),
"",
"",
"",
"",
1657 arrivalPos, types, modes, lines);
1658 }
else if (fromTrainStop && toTAZ) {
1661 "",
"",
"",
"", fromTrainStop->
getID(),
1662 "", toTAZ->
getID(),
"",
"",
"",
1663 arrivalPos, types, modes, lines);
1664 }
else if (fromTrainStop && toJunction) {
1667 "",
"",
"",
"", fromTrainStop->
getID(),
1668 "",
"", toJunction->
getID(),
"",
"",
1669 arrivalPos, types, modes, lines);
1670 }
else if (fromTrainStop && toBusStop) {
1673 "",
"",
"",
"", fromTrainStop->
getID(),
1674 "",
"",
"", toBusStop->
getID(),
"",
1675 arrivalPos, types, modes, lines);
1676 }
else if (fromTrainStop && toTrainStop) {
1679 "",
"",
"",
"", fromTrainStop->
getID(),
1680 "",
"",
"",
"", toTrainStop->
getID(),
1681 arrivalPos, types, modes, lines);
1686 fromBusStop, toBusStop, fromTrainStop, toTrainStop).first);
1688 if (fromEdge && toEdge) {
1691 fromEdge->
getID(),
"",
"",
1692 toEdge->
getID(),
"",
"",
1694 }
else if (fromEdge && toBusStop) {
1697 fromEdge->
getID(),
"",
"",
1698 "", toBusStop->
getID(),
"",
1700 }
else if (fromEdge && toTrainStop) {
1703 fromEdge->
getID(),
"",
"",
1704 "",
"", toTrainStop->
getID(),
1707 }
else if (fromBusStop && toEdge) {
1710 "", fromBusStop->
getID(),
"",
1711 toEdge->
getID(),
"",
"",
1713 }
else if (fromBusStop && toBusStop) {
1716 "", fromBusStop->
getID(),
"",
1717 "", toBusStop->
getID(),
"",
1719 }
else if (fromBusStop && toTrainStop) {
1722 "", fromBusStop->
getID(),
"",
1723 "",
"", toTrainStop->
getID(),
1726 }
else if (fromTrainStop && toEdge) {
1729 "",
"", fromTrainStop->
getID(),
1730 toEdge->
getID(),
"",
"",
1732 }
else if (fromTrainStop && toBusStop) {
1735 "",
"", fromTrainStop->
getID(),
1736 "", toBusStop->
getID(),
"",
1738 }
else if (fromTrainStop && toTrainStop) {
1741 "",
"", fromTrainStop->
getID(),
1742 "",
"", toTrainStop->
getID(),
1749 int parameterSet = 0;
1758 buildPersonStop(personPlanObject, edge->
getID(),
"",
"", endPos, duration, until, actType, friendlyPos, parameterSet);
1759 }
else if (busStop) {
1760 buildPersonStop(personPlanObject,
"", busStop->
getID(),
"", endPos, duration, until, actType, friendlyPos, parameterSet);
1761 }
else if (trainStop) {
1762 buildPersonStop(personPlanObject,
"",
"", trainStop->
getID(), endPos, duration, until, actType, friendlyPos, parameterSet);
1781 const bool centerAfterCreation) {
1783 if (containerParent ==
nullptr) {
1817 if (fromEdge && !toEdge && !fromContainerStop && !toContainerStop && consecutiveEdges.empty()) {
1821 if (consecutiveEdges.size() > 0) {
1827 consecutiveEdges, speed, departPos, arrivalPos);
1831 fromEdge, toEdge, fromContainerStop, toContainerStop).first);
1833 if (fromEdge && toEdge) {
1836 fromEdge->
getID(),
"",
1837 toEdge->getID(),
"",
1838 {}, speed, departPos, arrivalPos);
1839 }
else if (fromEdge && toContainerStop) {
1842 fromEdge->
getID(),
"",
1843 "", toContainerStop->
getID(),
1844 {}, speed, departPos, arrivalPos);
1846 }
else if (fromContainerStop && toEdge) {
1849 "", fromContainerStop->getID(),
1850 toEdge->getID(),
"",
1851 {}, speed, departPos, arrivalPos);
1852 }
else if (fromContainerStop && toContainerStop) {
1855 "", fromContainerStop->getID(),
1856 "", toContainerStop->
getID(),
1857 {}, speed, departPos, arrivalPos);
1862 fromContainerStop, toContainerStop).first);
1864 if (fromEdge && toEdge) {
1867 fromEdge->
getID(),
"",
1868 toEdge->
getID(),
"",
1870 }
else if (fromEdge && toContainerStop) {
1873 fromEdge->
getID(),
"",
1874 "", toContainerStop->
getID(),
1877 }
else if (fromContainerStop && toEdge) {
1880 "", fromContainerStop->
getID(),
1881 toEdge->
getID(),
"",
1883 }
else if (fromContainerStop && toContainerStop) {
1886 "", fromContainerStop->
getID(),
1887 "", toContainerStop->
getID(),
1894 int parameterSet = 0;
1902 buildContainerStop(containerPlanObject, edge->
getID(),
"", endPos, duration, until, actType, friendlyPos, parameterSet);
1903 }
else if (containerStop) {
1904 buildContainerStop(containerPlanObject,
"", containerStop->
getID(), endPos, duration, until, actType, friendlyPos, parameterSet);
1926 for (
const auto& vehicleTag : vehicleTags) {
1938 for (
const auto& edgeID : via) {
1983 const auto vClass = originalVehicle->
getVClass();
1987 std::vector<GNEEdge*> routeEdges;
2002 std::vector<std::string> edgeIDs;
2003 for (
const auto& edge : routeEdges) {
2004 edgeIDs.push_back(edge->getID());
2007 if (routeEdges.empty()) {
2009 const std::string header =
"Problem transforming to vehicle";
2011 const std::string message =
"Vehicle cannot be transformed. Invalid number of edges";
2015 FXMessageBox::warning(originalVehicle->
getNet()->
getViewNet()->getApp(), MBOX_OK, header.c_str(),
"%s", message.c_str());
2024 if (createEmbeddedRoute) {
2037 delete vehicleBaseOBject;
2044 routeHandler.
buildRoute(
nullptr, routeID, vClass, edgeIDs, routeColor,
false, 0, 1.0, {});
2046 vehicleParameters.
routeid = routeID;
2053 if (inspectAfterTransform) {
2074 const auto vClass = originalVehicle->
getVClass();
2078 std::vector<GNEEdge*> routeEdges;
2093 std::vector<std::string> edgeIDs;
2094 for (
const auto& edge : routeEdges) {
2095 edgeIDs.push_back(edge->getID());
2098 if (routeEdges.empty()) {
2100 const std::string header =
"Problem transforming to vehicle";
2102 const std::string message =
"Vehicle cannot be transformed. Invalid number of edges";
2106 FXMessageBox::warning(originalVehicle->
getNet()->
getViewNet()->getApp(), MBOX_OK, header.c_str(),
"%s", message.c_str());
2127 if (createEmbeddedRoute) {
2140 delete vehicleBaseOBject;
2147 routeHandler.
buildRoute(
nullptr, routeID, vClass, edgeIDs, routeColor,
false, 0, 1.0, {});
2149 vehicleParameters.
routeid = routeID;
2156 if (inspectAfterTransform) {
2179 std::vector<GNEEdge*> edges;
2194 if (edges.size() < 2) {
2196 const std::string header =
"Problem transforming to vehicle";
2198 const std::string message =
"Vehicle cannot be transformed. Invalid number of edges";
2202 FXMessageBox::warning(originalVehicle->
getNet()->
getViewNet()->getApp(), MBOX_OK, header.c_str(),
"%s", message.c_str());
2217 routeHandler.
buildTrip(
nullptr, vehicleParameters, edges.front()->getID(), edges.back()->getID());
2221 if (inspectAfterTransform) {
2244 std::vector<GNEEdge*> edges;
2259 if (edges.empty()) {
2261 const std::string header =
"Problem transforming to vehicle";
2263 const std::string message =
"Vehicle cannot be transformed. Invalid number of edges";
2267 FXMessageBox::warning(originalVehicle->
getNet()->
getViewNet()->getApp(), MBOX_OK, header.c_str(),
"%s", message.c_str());
2294 routeHandler.
buildFlow(
nullptr, vehicleParameters, edges.front()->getID(), edges.back()->getID());
2298 if (inspectAfterTransform) {
2313 const std::string header =
"Problem transforming to trip over junctions";
2315 const std::string message =
"Vehicle cannot be transformed. Invalid number of junctions";
2319 FXMessageBox::warning(originalVehicle->
getNet()->
getViewNet()->getApp(), MBOX_OK, header.c_str(),
"%s", message.c_str());
2342 if (inspectAfterTransform) {
2357 const std::string header =
"Problem transforming to flow over junctions";
2359 const std::string message =
"Vehicle cannot be transformed. Invalid number of junctions";
2363 FXMessageBox::warning(originalVehicle->
getNet()->
getViewNet()->getApp(), MBOX_OK, header.c_str(),
"%s", message.c_str());
2395 if (inspectAfterTransform) {
2410 const std::string header =
"Problem transforming to trip over TAZs";
2412 const std::string message =
"Vehicle cannot be transformed. Invalid number of TAZs";
2416 FXMessageBox::warning(originalVehicle->
getNet()->
getViewNet()->getApp(), MBOX_OK, header.c_str(),
"%s", message.c_str());
2439 if (inspectAfterTransform) {
2454 const std::string header =
"Problem transforming to flow over TAZs";
2456 const std::string message =
"Vehicle cannot be transformed. Invalid number of TAZs";
2460 FXMessageBox::warning(originalVehicle->
getNet()->
getViewNet()->getApp(), MBOX_OK, header.c_str(),
"%s", message.c_str());
2492 if (inspectAfterTransform) {
2515 const auto ID = personParameters.
id;
2517 personParameters.
id =
"%dummyID%";
2521 routeHandler.
buildPerson(
nullptr, personParameters);
2523 for (
const auto& personPlan : personPlans) {
2534 if (inspectAfterTransform) {
2556 const auto ID = personParameters.
id;
2558 personParameters.
id =
"%dummyID%";
2564 for (
const auto& personPlan : personPlans) {
2578 if (inspectAfterTransform) {
2600 const auto ID = containerParameters.
id;
2602 containerParameters.
id =
"%dummyID%";
2608 for (
const auto& containerPlan : containerPlans) {
2619 if (inspectAfterTransform) {
2641 const auto ID = containerParameters.
id;
2643 containerParameters.
id =
"%dummyID%";
2649 for (
const auto& containerPlan : containerPlans) {
2663 if (inspectAfterTransform) {
2696 if (edges.empty()) {
2700 std::vector<GNEEdge*> reverseEdges;
2701 for (
const auto& edge : edges) {
2702 const auto oppositeEdges = edge->getOppositeEdges();
2704 if (oppositeEdges.empty()) {
2707 reverseEdges.push_back(oppositeEdges.front());
2711 std::reverse(reverseEdges.begin(), reverseEdges.end());
2745 std::vector<GNEEdge*> oppositeEdges;
2747 oppositeEdges.push_back(edge->getOppositeEdges().front());
2749 std::reverse(oppositeEdges.begin(), oppositeEdges.end());
2757 oppositeEdges.erase(oppositeEdges.begin());
2758 oppositeEdges.pop_back();
2759 if (oppositeEdges.size() > 0) {
2789 if (junction ==
nullptr) {
2800 if (
TAZ ==
nullptr) {
2811 if (edge ==
nullptr) {
2818 std::vector<GNEEdge*>
2820 std::vector<GNEEdge*> edges;
2821 for (
const auto& edgeID : edgeIDs) {
2824 if (edge ==
nullptr) {
2829 edges.push_back(edge);
2839 if (type ==
nullptr) {
2860 if (personParent ==
nullptr) {
2863 return personParent;
2881 if (containerParent ==
nullptr) {
2884 return containerParent;
2894 if (parentObject ==
nullptr) {
2908 return *(itObj - 1);
2916 if (previousPlanObj ==
nullptr) {
2920 if (previousPlanObj->hasStringAttribute(
SUMO_ATTR_TO)) {
2922 }
else if (previousPlanObj->hasStringAttribute(
SUMO_ATTR_EDGE)) {
2939 if (containerStop) {
2944 if (edges.size() > 0) {
2963 if (previousPlanObj && previousPlanObj->hasStringAttribute(
SUMO_ATTR_TO_TAZ)) {
3021 const std::vector<std::string>& distributionElementIDs,
const std::vector<double>& probabilities,
3022 std::vector<const GNEDemandElement*>& elements) {
3024 std::string distributionTag =
toString(sumoBaseObject->
getTag());
3027 for (
const auto& distributionElementID : distributionElementIDs) {
3029 if (distributionElement) {
3030 elements.push_back(distributionElement);
3032 writeError(
TLF(
"% with id '%' doesn't exist in % '%'",
toString(distributionElementTag), distributionElementID, distributionTag, distributionID));
3038 for (
const auto& probability : probabilities) {
3039 if (probability < 0) {
3040 writeError(
TLF(
"invalid probability % in % '%'",
toString(probability), distributionTag, distributionID));
3045 if (elements.size() != probabilities.size()) {
3046 writeError(
TLF(
"Invalid type distribution probabilities in % '%'. Must have the same number of elements", distributionTag, distributionID));
3059 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
waypoint placed over a parking area
@ 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
waypoint placed over a busStop
@ GNE_TAG_WAYPOINT_CONTAINERSTOP
waypoint placed over a containerStop
@ GNE_TAG_WAYPOINT_BUSSTOP
waypoint placed over a busStop
@ SUMO_TAG_BUS_STOP
A bus stop.
@ GNE_TAG_WAYPOINT_CHARGINGSTATION
waypoint placed over a charging station
@ 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_WAYPOINT_LANE
waypoint placed over a lane
@ 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
@ 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
@ 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.
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
SumoXMLTag getTag() const
get XML myTag
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
const std::vector< SumoBaseObject * > & getSumoBaseObjectChildren() const
get SumoBaseObject children
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 > getPersonStopTagIcon(const GNEEdge *edge, const GNEAdditional *busStop, const GNEAdditional *trainStop)
get the person stop tag and icon for the combination
static std::pair< SumoXMLTag, GUIIcon > getPersonTripTagIcon(const GNEEdge *fromEdge, const GNEEdge *toEdge, const GNEAdditional *fromTAZ, const GNEAdditional *toTAZ, const GNEJunction *fromJunction, const GNEJunction *toJunction, const GNEAdditional *fromBusStop, const GNEAdditional *toBusStop, const GNEAdditional *fromTrainStop, const GNEAdditional *toTrainStop)
get the personTrip tag and icon for the combination
static std::pair< SumoXMLTag, GUIIcon > getRideTagIcon(const GNEEdge *fromEdge, const GNEEdge *toEdge, const GNEAdditional *fromBusStop, const GNEAdditional *toBusStop, const GNEAdditional *fromTrainStop, const GNEAdditional *toTrainStop)
get the ride tag and icon for the combination
static std::pair< SumoXMLTag, GUIIcon > getContainerStopTagIcon(const GNEEdge *edge, const GNEAdditional *containerStop)
get the container stop tag and icon for the combination
static std::pair< SumoXMLTag, GUIIcon > getTransportTagIcon(const GNEEdge *fromEdge, const GNEEdge *toEdge, const GNEAdditional *fromContainerStop, const GNEAdditional *toContainerStop)
get the transport tag and icon for the combination
static std::pair< SumoXMLTag, GUIIcon > getTranshipTagIcon(const std::vector< GNEEdge * > &consecutiveEdges, const GNEEdge *fromEdge, const GNEEdge *toEdge, const GNEAdditional *fromContainerStop, const GNEAdditional *toContainerStop)
get the tranship tag and icon for the combination
static std::pair< SumoXMLTag, GUIIcon > getWalkTagIcon(const std::vector< GNEEdge * > &consecutiveEdges, const GNEDemandElement *route, const GNEEdge *fromEdge, const GNEEdge *toEdge, const GNEAdditional *fromTAZ, const GNEAdditional *toTAZ, const GNEJunction *fromJunction, const GNEJunction *toJunction, const GNEAdditional *fromBusStop, const GNEAdditional *toBusStop, const GNEAdditional *fromTrainStop, const GNEAdditional *toTrainStop)
get the walk 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
const std::vector< GNELane * > & getParentLanes() const
get parent lanes
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
static GNEPersonTrip * buildPersonTrip(GNENet *net, GNEDemandElement *personParent, GNEEdge *fromEdge, GNEAdditional *fromTAZ, GNEJunction *fromJunction, GNEAdditional *fromBusStop, GNEAdditional *fromTrainStop, GNEEdge *toEdge, GNEAdditional *toTAZ, GNEJunction *toJunction, GNEAdditional *toBusStop, GNEAdditional *toTrainStop, double arrivalPosition, const std::vector< std::string > &types, const std::vector< std::string > &modes, const std::vector< std::string > &lines)
general constructor for personTrip
GNEAdditional * getFromContainerStop() const
get from container stop
GNEJunction * getFromJunction() const
get from junction
double getClickedPositionOverLane() const
get clicked position over lane
const std::vector< std::string > getConsecutiveEdgeIDs() const
get consecutive edge IDs
GNEEdge * getToEdge() const
get to edge
GNEAdditional * getTrainStop() const
get trainStop
GNEAdditional * getFromTAZ() const
get from TAZ
GNEAdditional * getFromTrainStop() const
get from train stop
GNEAdditional * getToContainerStop() const
get to container stop
GNEAdditional * getFromBusStop() const
get from bus stop
GNEAdditional * getToTAZ() const
get to TAZ
GNEDemandElement * getRoute() const
get route
GNEEdge * getFromEdge() const
get from edge
GNEAdditional * getBusStop() const
get busStop
GNEAdditional * getContainerStop() const
get containerStop
GNEEdge * getEdge() const
get edge
GNEJunction * getToJunction() const
get to junction
GNEAdditional * getToTrainStop() const
get to train stop
GNEAdditional * getToBusStop() const
get to bus stop
void incRef(const std::string &debugMsg="")
Increase reference.
static GNERide * buildRide(GNENet *net, GNEDemandElement *personParent, GNEEdge *fromEdge, GNEAdditional *fromBusStop, GNEAdditional *fromTrainStop, GNEEdge *toEdge, GNEAdditional *toBusStop, GNEAdditional *toTrainStop, double arrivalPosition, const std::vector< std::string > &lines)
general constructor for rides
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
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 buildWalk(const CommonXMLStructure::SumoBaseObject *sumoBaseObject, const std::string &fromEdgeID, const std::string &fromTAZID, const std::string &fromJunctionID, const std::string &fromBusStopID, const std::string &fromTrainStopID, const std::string &toEdgeID, const std::string &toTAZID, const std::string &toJunctionID, const std::string &toBusStopID, const std::string &toTrainStopID, const std::vector< std::string > &edgeIDs, const std::string &routeID, double arrivalPos)
build walk
static void transformToRouteFlow(GNEVehicle *originalVehicle, bool createEmbeddedRoute)
transform routeFlow over an existent route
GNENet * myNet
pointer to GNENet
GNEAdditional * getPreviousPlanTAZ(const CommonXMLStructure::SumoBaseObject *obj) const
get previous plan TAZ
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
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 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
GNEAdditional * getPreviousPlanTrainStop(const CommonXMLStructure::SumoBaseObject *obj) const
get previous plan trainStop
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
GNEEdge * getPreviousPlanEdge(const CommonXMLStructure::SumoBaseObject *obj) const
get previous plan edge
GNEAdditional * getPreviousPlanContainerStop(const CommonXMLStructure::SumoBaseObject *obj) const
get previous plan containerStop
static void transformToTrip(GNEVehicle *originalVehicle)
transform to trip
void buildTransport(const CommonXMLStructure::SumoBaseObject *sumoBaseObject, const std::string &fromEdgeID, const std::string &fromContainerStopID, const std::string &toEdgeID, const std::string &toContainerStopID, const std::vector< std::string > &lines, const double arrivalPos)
build transport
void buildRouteDistribution(const CommonXMLStructure::SumoBaseObject *sumoBaseObject, const std::string &id, const std::vector< std::string > &routeIDs, const std::vector< double > &probabilities)
build route distribution
void buildPersonTrip(const CommonXMLStructure::SumoBaseObject *sumoBaseObject, const std::string &fromEdgeID, const std::string &fromTAZID, const std::string &fromJunctionID, const std::string &fromBusStopID, const std::string &fromTrainStopID, const std::string &toEdgeID, const std::string &toTAZID, const std::string &toJunctionID, const std::string &toBusStopID, const std::string &toTrainStopID, double arrivalPos, const std::vector< std::string > &types, const std::vector< std::string > &modes, const std::vector< std::string > &lines)
build person trip
static void transformToPerson(GNEPerson *originalPerson)
transform person functions
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 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
const CommonXMLStructure::SumoBaseObject * getPreviousPlanObj(const CommonXMLStructure::SumoBaseObject *obj) const
get previous plan obj
std::vector< GNEEdge * > parseEdges(const SumoXMLTag tag, const std::vector< std::string > &edgeIDs)
parse edges
GNEJunction * getPreviousPlanJunction(const CommonXMLStructure::SumoBaseObject *obj) const
get previous plan junction
void buildTranship(const CommonXMLStructure::SumoBaseObject *sumoBaseObject, const std::string &fromEdgeID, const std::string &fromContainerStopID, const std::string &toEdgeID, const std::string &toContainerStopID, const std::vector< std::string > &edgeIDs, const double speed, const double departPosition, const double arrivalPosition)
build tranship
GNEDemandElement * getContainerParent(const CommonXMLStructure::SumoBaseObject *sumoBaseObject) const
get container parent
GNEAdditional * getPreviousPlanBusStop(const CommonXMLStructure::SumoBaseObject *obj) const
get previous plan busStop
void buildStop(const CommonXMLStructure::SumoBaseObject *sumoBaseObject, const SUMOVehicleParameter::Stop &stopParameters)
build stop
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 buildPersonStop(const CommonXMLStructure::SumoBaseObject *sumoBaseObject, const std::string &edgeID, const std::string &busStopID, const std::string &trainStopID, const double endPos, const SUMOTime duration, const SUMOTime until, const std::string &actType, const bool friendlyPos, const int parameterSet)
build person stop
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.
void buildRide(const CommonXMLStructure::SumoBaseObject *sumoBaseObject, const std::string &fromEdgeID, const std::string &fromBusStopID, const std::string &fromTrainStopID, const std::string &toEdgeID, const std::string &toBusStopID, const std::string &toTrainStopID, double arrivalPos, const std::vector< std::string > &lines)
build ride
static void transformToVehicle(GNEVehicle *originalVehicle, bool createEmbeddedRoute)
transform vehicle functions
void buildContainerStop(const CommonXMLStructure::SumoBaseObject *sumoBaseObject, const std::string &edgeID, const std::string &containerStopID, const double endPos, const SUMOTime duration, const SUMOTime until, const std::string &actType, const bool friendlyPos, const int parameterSet)
build container stop
static void transformToTripTAZs(GNEVehicle *originalVehicle)
transform to trip over TAZs
static GNEDemandElement * copyRoute(const GNERoute *originalRoute)
create a copy of the given route
static GNEStopPlan * buildContainerStopPlan(GNENet *net, GNEDemandElement *personParent, GNEEdge *edge, GNEAdditional *containerStop, const double endPos, const SUMOTime duration, const SUMOTime until, const std::string &actType, const bool friendlyPos, const int parameterSet)
general constructor for container stop plans
static GNEStopPlan * buildPersonStopPlan(GNENet *net, GNEDemandElement *personParent, GNEEdge *edge, GNEAdditional *busStop, GNEAdditional *trainStop, const double endPos, const SUMOTime duration, const SUMOTime until, const std::string &actType, const bool friendlyPos, const int parameterSet)
general constructor for person stop plans
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
bool isPersonTrip() const
return true if tag correspond to a person trip
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 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
static GNETranship * buildTranship(GNENet *net, GNEDemandElement *containerParent, GNEEdge *fromEdge, GNEAdditional *fromContainerStop, GNEEdge *toEdge, GNEAdditional *toContainerStop, std::vector< GNEEdge * > edgeList, const double departPosition, const double arrivalPosition, const double speed)
general constructor for tranships
static GNETransport * buildTransport(GNENet *net, GNEDemandElement *containerParent, GNEEdge *fromEdge, GNEAdditional *fromContainerStop, GNEEdge *toEdge, GNEAdditional *toContainerStop, double arrivalPosition)
general constructor for walks
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
static GNEWalk * buildWalk(GNENet *net, GNEDemandElement *personParent, GNEEdge *fromEdge, GNEAdditional *fromTAZ, GNEJunction *fromJunction, GNEAdditional *fromBusStop, GNEAdditional *fromTrainStop, GNEEdge *toEdge, GNEAdditional *toTAZ, GNEJunction *toJunction, GNEAdditional *toBusStop, GNEAdditional *toTrainStop, std::vector< GNEEdge * > edgeList, GNEDemandElement *route, double arrivalPosition)
general constructor for walks
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.
std::vector< std::string > getVector()
return vector of strings