60 for (
const auto& additionalTag : additionalTags) {
61 myAdditionals.insert(std::make_pair(additionalTag.getTag(), std::set<GNEAdditional*>()));
65 for (
const auto& demandElementTag : demandElementTags) {
66 myDemandElements.insert(std::make_pair(demandElementTag.getTag(), std::set<GNEDemandElement*>()));
69 for (
const auto& stopTag : stopTags) {
70 myDemandElements.insert(std::make_pair(stopTag.getTag(), std::set<GNEDemandElement*>()));
74 for (
const auto& genericDataElementTag : genericDataElementTags) {
75 myGenericDatas.insert(std::make_pair(genericDataElementTag.getTag(), std::set<GNEGenericData*>()));
79 for (
const auto& meanDataTag : meanDataTags) {
80 myMeanDatas.insert(std::make_pair(meanDataTag.getTag(), std::set<GNEMeanData*>()));
87 for (
const auto& edgeType : myEdgeTypes) {
88 edgeType.second->decRef(
"GNENetHelper::~GNENet");
90 WRITE_DEBUG(
"Deleting unreferenced " + edgeType.second->getTagStr() +
" '" + edgeType.second->getID() +
"' in AttributeCarriers destructor");
91 delete edgeType.second;
94 for (
const auto& edge : myEdges) {
95 edge.second->decRef(
"GNENetHelper::~GNENet");
97 WRITE_DEBUG(
"Deleting unreferenced " + edge.second->getTagStr() +
" '" + edge.second->getID() +
"' in AttributeCarriers destructor");
101 for (
const auto& junction : myJunctions) {
102 junction.second->decRef(
"GNENetHelper::~GNENet");
104 WRITE_DEBUG(
"Deleting unreferenced " + junction.second->getTagStr() +
" '" + junction.second->getID() +
"' in AttributeCarriers destructor");
105 delete junction.second;
108 for (
const auto& additionalTag : myAdditionals) {
109 for (
const auto& additional : additionalTag.second) {
111 additional->decRef();
113 WRITE_DEBUG(
"Deleting unreferenced " + additional->getTagStr() +
" in AttributeCarriers destructor");
118 for (
const auto& demandElementTag : myDemandElements) {
119 for (
const auto& demandElement : demandElementTag.second) {
121 demandElement->decRef();
123 if (demandElement->getTagProperty().isType()) {
126 WRITE_DEBUG(
"Deleting unreferenced " + demandElement->getTagStr() +
" in AttributeCarriers destructor");
129 WRITE_DEBUG(
"Deleting unreferenced " + demandElement->getTagStr() +
" in AttributeCarriers destructor");
131 delete demandElement;
135 for (
const auto& dataSet : myDataSets) {
139 WRITE_DEBUG(
"Deleting unreferenced " + dataSet->getTagStr() +
" in AttributeCarriers destructor");
143 for (
const auto& meanDataTag : myMeanDatas) {
144 for (
const auto& meanData : meanDataTag.second) {
148 WRITE_DEBUG(
"Deleting unreferenced " + meanData->getTagStr() +
" in AttributeCarriers destructor");
157 std::map<std::string, GNEEdge*> newEdgeMap;
158 std::map<std::string, GNEJunction*> newJunctionMap;
160 for (
const auto& edge : myEdges) {
161 edge.second->setMicrosimID(edge.second->getNBEdge()->getID());
162 newEdgeMap[edge.second->getNBEdge()->getID()] = edge.second;
164 for (
const auto& junction : myJunctions) {
165 newJunctionMap[junction.second->getNBNode()->getID()] = junction.second;
166 junction.second->setMicrosimID(junction.second->getNBNode()->getID());
168 myEdges = newEdgeMap;
169 myJunctions = newJunctionMap;
186 for (
const auto& lane : myEdges.at(AC->
getID())->getLanes()) {
220 if (
object !=
nullptr) {
226 throw ProcessError(
"GUIGlObject does not match the declared type");
230 }
else if (hardFail) {
231 throw ProcessError(
"Attempted to retrieve non-existant GUIGlObject");
238std::vector<GNEAttributeCarrier*>
240 std::vector<GNEAttributeCarrier*> result;
242 for (
const auto& junction : myJunctions) {
243 result.push_back(junction.second);
246 for (
const auto& edge : myEdges) {
247 result.push_back(edge.second);
250 for (
const auto& lane : myLanes) {
251 result.push_back(lane);
254 for (
const auto& connection : myConnections) {
255 result.push_back(connection);
258 for (
const auto& crossing : myCrossings) {
259 result.push_back(crossing);
262 for (
const auto& walkingArea : myWalkingAreas) {
263 result.push_back(walkingArea);
266 for (
const auto& additional : myAdditionals.at(tag)) {
267 result.push_back(additional);
270 for (
const auto& demandElemet : myDemandElements.at(tag)) {
271 result.push_back(demandElemet);
274 for (
const auto& dataSet : myDataSets) {
275 result.push_back(dataSet);
278 for (
const auto& dataInterval : myDataIntervals) {
279 result.push_back(dataInterval);
282 for (
const auto& genericData : myGenericDatas.at(tag)) {
283 result.push_back(genericData);
286 for (
const auto& meanData : myMeanDatas.at(tag)) {
287 result.push_back(meanData);
294std::vector<GNEAttributeCarrier*>
296 std::vector<GNEAttributeCarrier*> result;
300 for (
const auto& junction : myJunctions) {
301 if (!onlySelected || junction.second->isAttributeCarrierSelected()) {
302 result.push_back(junction.second);
305 for (
const auto& crossing : myCrossings) {
306 if (!onlySelected || crossing->isAttributeCarrierSelected()) {
307 result.push_back(crossing);
310 for (
const auto& edge : myEdges) {
311 if (!onlySelected || edge.second->isAttributeCarrierSelected()) {
312 result.push_back(edge.second);
315 for (
const auto& lane : myLanes) {
316 if (!onlySelected || lane->isAttributeCarrierSelected()) {
317 result.push_back(lane);
320 for (
const auto& connection : myConnections) {
321 if (!onlySelected || connection->isAttributeCarrierSelected()) {
322 result.push_back(connection);
325 for (
const auto& additionalSet : myAdditionals) {
326 for (
const auto& additional : additionalSet.second) {
327 if (!onlySelected || additional->isAttributeCarrierSelected()) {
328 result.push_back(additional);
333 for (
const auto& demandElementSet : myDemandElements) {
334 for (
const auto& demandElement : demandElementSet.second) {
335 if (!onlySelected || demandElement->isAttributeCarrierSelected()) {
336 result.push_back(demandElement);
341 for (
const auto& dataSet : myDataSets) {
342 if (!onlySelected || dataSet->isAttributeCarrierSelected()) {
343 result.push_back(dataSet);
346 for (
const auto& dataInterval : myDataIntervals) {
347 if (!onlySelected || dataInterval->isAttributeCarrierSelected()) {
348 result.push_back(dataInterval);
351 for (
const auto& genericDataSet : myGenericDatas) {
352 for (
const auto& genericData : genericDataSet.second) {
353 if (!onlySelected || genericData->isAttributeCarrierSelected()) {
354 result.push_back(genericData);
358 for (
const auto& meanDataSet : myMeanDatas) {
359 for (
const auto& meanData : meanDataSet.second) {
360 if (!onlySelected || meanData->isAttributeCarrierSelected()) {
361 result.push_back(meanData);
370std::vector<GNEAttributeCarrier*>
373 const auto& editModes = myNet->getViewNet()->getEditModes();
375 std::vector<GNEAttributeCarrier*> result;
384 if (ignoreCurrentSupermode) {
394 result.push_back(AC);
404 if (myJunctions.count(
id)) {
405 return myJunctions.at(
id);
406 }
else if (hardFail) {
415const std::map<std::string, GNEJunction*>&
421std::vector<GNEJunction*>
423 std::vector<GNEJunction*> result;
425 for (
const auto& junction : myJunctions) {
426 if (junction.second->isAttributeCarrierSelected()) {
427 result.push_back(junction.second);
437 junction->
incRef(
"GNENet::registerJunction");
443 myNet->addGLObjectIntoGrid(junction);
461 std::map<std::string, GNEJunction*> junctionCopy = myJunctions;
465 for (
const auto& junction : junctionCopy) {
469 myJunctions[prefix + junction.first] = junction.second;
476 if (myJunctions.count(junction->
getID()) == 0) {
477 throw ProcessError(junction->
getTagStr() +
" with ID='" + junction->
getID() +
"' doesn't exist in AttributeCarriers.junction");
478 }
else if (myJunctions.count(newID) != 0) {
479 throw ProcessError(
"There is another " + junction->
getTagStr() +
" with new ID='" + newID +
"' in myJunctions");
484 myNet->getNetBuilder()->getNodeCont().rename(junction->
getNBNode(), newID);
488 myJunctions[junction->
getID()] = junction;
492 myNet->getSavingStatus()->requireSaveNetwork();
500 for (
const auto& junction : myJunctions) {
501 if (junction.second->isAttributeCarrierSelected()) {
513 if (crossing && (myCrossings.count(crossing) > 0)) {
515 }
else if (hardFail) {
527const std::set<GNECrossing*>&
533std::vector<GNECrossing*>
535 std::vector<GNECrossing*> result;
537 for (
const auto& crossing : myCrossings) {
538 if (crossing->isAttributeCarrierSelected()) {
539 result.push_back(crossing);
548 if (myCrossings.insert(crossing).second ==
false) {
556 const auto finder = myCrossings.find(crossing);
557 if (finder == myCrossings.end()) {
560 myCrossings.erase(finder);
568 for (
const auto& crossing : myCrossings) {
569 if (crossing->isAttributeCarrierSelected()) {
581 if (walkingArea && (myWalkingAreas.count(walkingArea) > 0)) {
583 }
else if (hardFail) {
595const std::set<GNEWalkingArea*>&
597 return myWalkingAreas;
601std::vector<GNEWalkingArea*>
603 std::vector<GNEWalkingArea*> result;
605 for (
const auto& walkingArea : myWalkingAreas) {
606 if (walkingArea->isAttributeCarrierSelected()) {
607 result.push_back(walkingArea);
616 if (myWalkingAreas.insert(walkingArea).second ==
false) {
624 const auto finder = myWalkingAreas.find(walkingArea);
625 if (finder == myWalkingAreas.end()) {
628 myWalkingAreas.erase(finder);
636 for (
const auto& walkingArea : myWalkingAreas) {
637 if (walkingArea->isAttributeCarrierSelected()) {
647 if (myEdgeTypes.count(
id) > 0) {
648 return myEdgeTypes.at(
id);
649 }
else if (hardFail) {
661 edgeType->
incRef(
"GNENet::registerEdgeType");
668const std::map<std::string, GNEEdgeType*>&
681 if (myEdgeTypes.count(edgeType->
getID()) == 0) {
682 throw ProcessError(edgeType->
getTagStr() +
" with ID='" + edgeType->
getID() +
"' doesn't exist in AttributeCarriers.edgeType");
683 }
else if (myEdgeTypes.count(newID) != 0) {
684 throw ProcessError(
"There is another " + edgeType->
getTagStr() +
" with new ID='" + newID +
"' in myEdgeTypes");
687 myEdgeTypes.erase(edgeType->
getID());
689 myNet->getNetBuilder()->getTypeCont().updateEdgeTypeID(edgeType->
getID(), newID);
693 myEdgeTypes[edgeType->
getID()] = edgeType;
695 myNet->getSavingStatus()->requireSaveNetwork();
703 while (myEdgeTypes.count(
"edgeType_" +
toString(counter)) != 0) {
706 return (
"edgeType_" +
toString(counter));
712 if (myEdges.count(
id) > 0) {
713 return myEdges.at(
id);
714 }
else if (hardFail) {
725 if ((from ==
nullptr) || (to ==
nullptr)) {
728 std::vector<GNEEdge*> edges;
730 for (
const auto& edge : myEdges) {
731 if ((edge.second->getFromJunction() == from) && (edge.second->getToJunction() == to)) {
732 edges.push_back(edge.second);
739const std::map<std::string, GNEEdge*>&
747 std::vector<GNEEdge*> result;
749 for (
const auto& edge : myEdges) {
750 if (edge.second->isAttributeCarrierSelected()) {
751 result.push_back(edge.second);
760 edge->
incRef(
"GNENet::registerEdge");
767 myNet->addGLObjectIntoGrid(edge);
769 for (
const auto& lane : edge->
getLanes()) {
788 std::map<std::string, GNEEdge*> edgeCopy = myEdges;
792 for (
const auto& edge : edgeCopy) {
796 myEdges[prefix + edge.first] = edge.second;
803 if (myEdges.count(edge->
getID()) == 0) {
805 }
else if (myEdges.count(newID) != 0) {
806 throw ProcessError(
"There is another " + edge->
getTagStr() +
" with new ID='" + newID +
"' in myEdges");
811 myNet->getNetBuilder()->getEdgeCont().rename(edge->
getNBEdge(), newID);
815 myEdges[edge->
getID()] = edge;
817 for (
const auto& lane : edge->
getLanes()) {
818 lane->updateConnectionIDs();
821 myNet->getSavingStatus()->requireSaveNetwork();
829 for (
const auto& edge : myEdges) {
830 if (edge.second->isAttributeCarrierSelected()) {
841 const GNEEdge* edge = retrieveEdge(edge_id,
false);
842 if (edge !=
nullptr) {
845 for (
auto laneIt : edge->
getLanes()) {
846 if (laneIt->getID() == id) {
851 if (lane ==
nullptr) {
858 if (checkVolatileChange && (myNet->getEdgesAndNumberOfLanes().count(edge_id) == 1) &&
859 myNet->getEdgesAndNumberOfLanes().at(edge_id) != (
int)edge->
getLanes().size()) {
864 }
else if (hardFail) {
876 if (lane && (myLanes.count(lane) > 0)) {
878 }
else if (hardFail) {
890const std::set<GNELane*>&
898 std::vector<GNELane*> result;
900 for (
const auto& lane : myLanes) {
901 if (lane->isAttributeCarrierSelected()) {
902 result.push_back(lane);
911 if (myLanes.insert(lane).second ==
false) {
919 const auto finder = myLanes.find(lane);
920 if (finder == myLanes.end()) {
923 myLanes.erase(finder);
931 for (
const auto& lane : myLanes) {
932 if (lane->isAttributeCarrierSelected()) {
943 for (
const auto& connection : myConnections) {
944 if (connection->getID() == id) {
961 if (connection && (myConnections.count(connection) > 0)) {
963 }
else if (hardFail) {
975const std::set<GNEConnection*>&
977 return myConnections;
981std::vector<GNEConnection*>
983 std::vector<GNEConnection*> result;
985 for (
const auto& connection : myConnections) {
986 if (connection->isAttributeCarrierSelected()) {
987 result.push_back(connection);
996 if (myConnections.insert(connection).second ==
false) {
1004 const auto finder = myConnections.find(connection);
1005 if (finder == myConnections.end()) {
1008 myConnections.erase(finder);
1016 for (
const auto& connection : myConnections) {
1017 if (connection->isAttributeCarrierSelected()) {
1027 for (
const auto& additional : myAdditionals.at(type)) {
1028 if (additional->getID() == id) {
1033 throw ProcessError(
"Attempted to retrieve non-existant additional (string)");
1046 }
else if (hardFail) {
1047 throw ProcessError(
"Attempted to retrieve non-existant additional (AttributeCarrier)");
1073 throw ProcessError(
"Attempted to retrieve non-existant rerouter interval");
1077const std::map<SumoXMLTag, std::set<GNEAdditional*> >&
1079 return myAdditionals;
1083std::vector<GNEAdditional*>
1085 std::vector<GNEAdditional*> result;
1087 for (
const auto& additionalsTags : myAdditionals) {
1088 for (
const auto& additional : additionalsTags.second) {
1089 if (additional->isAttributeCarrierSelected()) {
1090 result.push_back(additional);
1098std::vector<GNEAdditional*>
1100 std::vector<GNEAdditional*> result;
1102 for (
const auto& additionalsTags : myAdditionals) {
1103 for (
const auto& additional : additionalsTags.second) {
1104 if (additional->getTagProperty().isShapeElement() && additional->isAttributeCarrierSelected()) {
1105 result.push_back(additional);
1116 for (
const auto& additionalsTag : myAdditionals) {
1117 counter += (int)additionalsTag.second.size();
1126 for (
const auto& additionalsTags : myAdditionals) {
1127 for (
const auto& additional : additionalsTags.second) {
1128 myNet->removeGLObjectFromGrid(additional);
1132 for (
auto& additionals : myAdditionals) {
1133 additionals.second.clear();
1145 prefix = neteditOptions.getString(
"busStop-prefix");
1147 prefix = neteditOptions.getString(
"trainStop-prefix");
1149 prefix = neteditOptions.getString(
"containerStop-prefix");
1151 prefix = neteditOptions.getString(
"chargingStation-prefix");
1153 prefix = neteditOptions.getString(
"parkingArea-prefix");
1155 prefix = neteditOptions.getString(
"e1Detector-prefix");
1157 prefix = neteditOptions.getString(
"e2Detector-prefix");
1159 prefix = neteditOptions.getString(
"e3Detector-prefix");
1161 prefix = neteditOptions.getString(
"e1InstantDetector-prefix");
1163 prefix = neteditOptions.getString(
"rerouter-prefix");
1165 prefix = neteditOptions.getString(
"calibrator-prefix");
1167 prefix = neteditOptions.getString(
"routeProbe-prefix");
1169 prefix = neteditOptions.getString(
"vss-prefix");
1171 prefix = neteditOptions.getString(
"tractionSubstation-prefix");
1173 prefix = neteditOptions.getString(
"overheadWire-prefix");
1175 prefix = neteditOptions.getString(
"polygon-prefix");
1177 prefix = neteditOptions.getString(
"poi-prefix");
1202 while ((retrieveAdditional(
SUMO_TAG_POI, prefix +
"_" +
toString(counter),
false) !=
nullptr) ||
1213 while (retrieveAdditional(tag, prefix +
"_" +
toString(counter),
false) !=
nullptr) {
1217 return (prefix +
"_" +
toString(counter));
1224 for (
const auto& additionalsTags : myAdditionals) {
1225 for (
const auto& additional : additionalsTags.second) {
1226 if (additional->isAttributeCarrierSelected()) {
1237 return getNumberOfSelectedAdditionals() - getNumberOfSelectedPolygons() -
1238 getNumberOfSelectedPOIs() - getNumberOfSelectedTAZs() - getNumberOfSelectedTAZSources() -
1239 getNumberOfSelectedTAZSinks() - getNumberOfSelectedWires();
1247 if (poly->isAttributeCarrierSelected()) {
1259 if (
POI->isAttributeCarrierSelected()) {
1264 if (POILane->isAttributeCarrierSelected()) {
1269 if (
POIGEO->isAttributeCarrierSelected()) {
1281 if (
TAZ->isAttributeCarrierSelected()) {
1293 if (TAZSource->isAttributeCarrierSelected()) {
1305 if (TAZSink->isAttributeCarrierSelected()) {
1316 for (
const auto& additionalsTags : myAdditionals) {
1317 for (
const auto& additional : additionalsTags.second) {
1318 if (additional->isAttributeCarrierSelected() && additional->getTagProperty().isWireElement()) {
1329 for (
const auto& demandElement : myDemandElements.at(type)) {
1330 if (demandElement->getID() == id) {
1331 return demandElement;
1335 throw ProcessError(
"Attempted to retrieve non-existant demand element (string)");
1346 if (demandElement && (myDemandElements.at(AC->
getTagProperty().
getTag()).count(demandElement) > 0)) {
1347 return demandElement;
1348 }
else if (hardFail) {
1349 throw ProcessError(
"Attempted to retrieve non-existant demand element (AttributeCarrier)");
1358 if (myDemandElements.at(type).size() == 0) {
1362 std::map<std::string, GNEDemandElement* > map;
1363 for (
const auto& demandElement : myDemandElements.at(type)) {
1364 map[demandElement->getID()] = demandElement;
1366 return map.begin()->second;
1371std::vector<GNEDemandElement*>
1373 std::vector<GNEDemandElement*> result;
1375 for (
const auto& demandElementTag : myDemandElements) {
1376 for (
const auto& demandElement : demandElementTag.second) {
1377 if (demandElement->isAttributeCarrierSelected()) {
1378 result.push_back(demandElement);
1386const std::map<SumoXMLTag, std::set<GNEDemandElement*> >&
1388 return myDemandElements;
1395 for (
const auto& demandElementTag : myDemandElements) {
1398 for (
const auto& vType : demandElementTag.second) {
1404 counter += (int)demandElementTag.second.size();
1420 prefix = neteditOptions.getString(
"route-prefix");
1422 prefix = neteditOptions.getString(
"vType-prefix");
1424 prefix = neteditOptions.getString(
"vTypeDistribution-prefix");
1426 prefix = neteditOptions.getString(
"trip-prefix");
1427 }
else if (tagProperty.isVehicle() && !tagProperty.isFlow()) {
1428 prefix = neteditOptions.getString(
"vehicle-prefix");
1429 }
else if (tagProperty.isPerson()) {
1430 if (tagProperty.isFlow()) {
1431 prefix = neteditOptions.getString(
"personflow-prefix");
1433 prefix = neteditOptions.getString(
"person-prefix");
1435 }
else if (tagProperty.isContainer()) {
1436 if (tagProperty.isFlow()) {
1437 prefix = neteditOptions.getString(
"containerflow-prefix");
1439 prefix = neteditOptions.getString(
"container-prefix");
1441 }
else if (tagProperty.isFlow()) {
1442 prefix = neteditOptions.getString(
"flow-prefix");
1446 if (tagProperty.isType()) {
1453 return (prefix +
"_" +
toString(counter));
1454 }
else if (tagProperty.isPerson()) {
1461 return (prefix +
"_" +
toString(counter));
1462 }
else if (tagProperty.isContainer()) {
1469 return (prefix +
"_" +
toString(counter));
1470 }
else if (tagProperty.isVehicle() || tagProperty.isFlow()) {
1485 return (prefix +
"_" +
toString(counter));
1487 while (retrieveDemandElement(tag, prefix +
"_" +
toString(counter),
false) !=
nullptr) {
1491 return (prefix +
"_" +
toString(counter));
1510 for (
const auto& demandElementsTags : myDemandElements) {
1511 for (
const auto& demandElement : demandElementsTags.second) {
1512 myNet->removeGLObjectFromGrid(demandElement);
1516 for (
auto& demandElements : myDemandElements) {
1517 demandElements.second.clear();
1527 defaultVehicleType->
incRef(
"GNENet::DEFAULT_VEHTYPE");
1532 defaultBikeType->
incRef(
"GNENet::DEFAULT_BIKETYPE_ID");
1537 defaultTaxiType->
incRef(
"GNENet::DEFAULT_TAXITYPE_ID");
1542 defaultRailType->
incRef(
"GNENet::DEFAULT_RAILTYPE_ID");
1547 defaultPersonType->
incRef(
"GNENet::DEFAULT_PEDTYPE_ID");
1551 myDemandElements.at(defaultContainerType->
getTagProperty().
getTag()).insert(defaultContainerType);
1552 defaultContainerType->
incRef(
"GNENet::DEFAULT_CONTAINERTYPE_ID");
1558 return myStopIndex++;
1565 for (
const auto& demandElementsTags : myDemandElements) {
1566 for (
const auto& demandElement : demandElementsTags.second) {
1567 if (demandElement->isAttributeCarrierSelected()) {
1581 if (route->isAttributeCarrierSelected()) {
1587 if (vehicle->getChildDemandElements().front()->isAttributeCarrierSelected()) {
1592 if (flow->getChildDemandElements().front()->isAttributeCarrierSelected()) {
1605 if (vehicle->isAttributeCarrierSelected()) {
1609 for (
const auto& trip : myDemandElements.at(
SUMO_TAG_TRIP)) {
1610 if (trip->isAttributeCarrierSelected()) {
1615 if (vehicle->isAttributeCarrierSelected()) {
1619 for (
const auto& flow : myDemandElements.at(
SUMO_TAG_FLOW)) {
1620 if (flow->isAttributeCarrierSelected()) {
1625 if (flow->isAttributeCarrierSelected()) {
1630 if (flow->isAttributeCarrierSelected()) {
1643 if (person->isAttributeCarrierSelected()) {
1648 if (personFlow->isAttributeCarrierSelected()) {
1661 for (
const auto& personPlan : person->getChildDemandElements()) {
1662 if (personPlan->getTagProperty().isPersonTrip() && personPlan->isAttributeCarrierSelected()) {
1668 for (
const auto& personPlan : personFlow->getChildDemandElements()) {
1669 if (personPlan->getTagProperty().isPersonTrip() && personPlan->isAttributeCarrierSelected()) {
1683 for (
const auto& personPlan : person->getChildDemandElements()) {
1684 if (personPlan->getTagProperty().isWalk() && personPlan->isAttributeCarrierSelected()) {
1690 for (
const auto& personPlan : personFlow->getChildDemandElements()) {
1691 if (personPlan->getTagProperty().isWalk() && personPlan->isAttributeCarrierSelected()) {
1705 for (
const auto& personPlan : person->getChildDemandElements()) {
1706 if (personPlan->getTagProperty().isRide() && personPlan->isAttributeCarrierSelected()) {
1712 for (
const auto& personPlan : personFlow->getChildDemandElements()) {
1713 if (personPlan->getTagProperty().isRide() && personPlan->isAttributeCarrierSelected()) {
1727 if (container->isAttributeCarrierSelected()) {
1732 if (containerFlow->isAttributeCarrierSelected()) {
1745 for (
const auto& containerPlan : container->getChildDemandElements()) {
1746 if (containerPlan->getTagProperty().isTransportPlan() && containerPlan->isAttributeCarrierSelected()) {
1752 for (
const auto& containerPlan : containerFlow->getChildDemandElements()) {
1753 if (containerPlan->getTagProperty().isTransportPlan() && containerPlan->isAttributeCarrierSelected()) {
1767 for (
const auto& containerPlan : container->getChildDemandElements()) {
1768 if (containerPlan->getTagProperty().isTranshipPlan() && containerPlan->isAttributeCarrierSelected()) {
1774 for (
const auto& containerPlan : containerFlow->getChildDemandElements()) {
1775 if (containerPlan->getTagProperty().isTranshipPlan() && containerPlan->isAttributeCarrierSelected()) {
1789 if (route->isAttributeCarrierSelected()) {
1794 for (
const auto& trip : myDemandElements.at(
SUMO_TAG_TRIP)) {
1795 for (
const auto& stop : trip->getChildDemandElements()) {
1796 if (stop->getTagProperty().isStop() && stop->isAttributeCarrierSelected()) {
1802 for (
const auto& stop : vehicle->getChildDemandElements().front()->getChildDemandElements()) {
1803 if (stop->getTagProperty().isStop() && stop->isAttributeCarrierSelected()) {
1808 for (
const auto& flow : myDemandElements.at(
SUMO_TAG_FLOW)) {
1809 for (
const auto& stop : flow->getChildDemandElements()) {
1810 if (stop->getTagProperty().isStop() && stop->isAttributeCarrierSelected()) {
1816 for (
const auto& stop : flow->getChildDemandElements().front()->getChildDemandElements()) {
1817 if (stop->getTagProperty().isStop() && stop->isAttributeCarrierSelected()) {
1824 for (
const auto& personPlan : person->getChildDemandElements()) {
1825 if (personPlan->getTagProperty().isStopPerson() && personPlan->isAttributeCarrierSelected()) {
1831 for (
const auto& personPlan : personFlow->getChildDemandElements()) {
1832 if (personPlan->getTagProperty().isStopPerson() && personPlan->isAttributeCarrierSelected()) {
1839 for (
const auto& containerPlan : container->getChildDemandElements()) {
1840 if (containerPlan->getTagProperty().isStopContainer() && containerPlan->isAttributeCarrierSelected()) {
1846 for (
const auto& containerPlan : containerFlow->getChildDemandElements()) {
1847 if (containerPlan->getTagProperty().isStopContainer() && containerPlan->isAttributeCarrierSelected()) {
1858 for (
const auto& dataSet : myDataSets) {
1859 if (dataSet->getID() == id) {
1864 throw ProcessError(
"Attempted to retrieve non-existant data set");
1875 if (dataSet && (myDataSets.count(dataSet) > 0)) {
1877 }
else if (hardFail) {
1878 throw ProcessError(
"Attempted to retrieve non-existant data set");
1885const std::set<GNEDataSet*>&
1895 while (retrieveDataSet(prefix + dataSetTagStr +
"_" +
toString(counter),
false) !=
nullptr) {
1898 return (prefix + dataSetTagStr +
"_" +
toString(counter));
1906 if (dataInterval && (myDataIntervals.count(dataInterval) > 0)) {
1907 return dataInterval;
1908 }
else if (hardFail) {
1909 throw ProcessError(
"Attempted to retrieve non-existant data interval");
1916const std::set<GNEDataInterval*>&
1918 return myDataIntervals;
1924 if (myDataIntervals.insert(dataInterval).second ==
false) {
1928 myNet->getViewNet()->getIntervalBar().markForUpdate();
1934 const auto finder = myDataIntervals.find(dataInterval);
1935 if (finder == myDataIntervals.end()) {
1938 myDataIntervals.erase(finder);
1941 myNet->getViewNet()->getIntervalBar().markForUpdate();
1949 if (genericData && (myGenericDatas.at(AC->
getTagProperty().
getTag()).count(genericData) > 0)) {
1951 }
else if (hardFail) {
1952 throw ProcessError(
"Attempted to retrieve non-existant data set");
1959std::vector<GNEGenericData*>
1961 std::vector<GNEGenericData*> result;
1963 for (
const auto& genericDataTag : myGenericDatas) {
1964 for (
const auto& genericData : genericDataTag.second) {
1965 if (genericData->isAttributeCarrierSelected()) {
1966 result.push_back(genericData);
1974const std::map<SumoXMLTag, std::set<GNEGenericData*> >&
1976 return myGenericDatas;
1980std::vector<GNEGenericData*>
1983 std::vector<GNEGenericData*> genericDatas;
1985 for (
const auto& genericData : myGenericDatas.at(genericDataTag)) {
1987 if ((genericData->getDataIntervalParent()->getAttributeDouble(
SUMO_ATTR_BEGIN) >= begin) &&
1988 (genericData->getDataIntervalParent()->getAttributeDouble(
SUMO_ATTR_END) <= end)) {
1989 genericDatas.push_back(genericData);
1992 return genericDatas;
2000 for (
const auto& genericDataTag : myGenericDatas) {
2001 counter += (int)genericDataTag.second.size();
2012 if (genericData->isAttributeCarrierSelected()) {
2025 if (genericData->isAttributeCarrierSelected()) {
2038 if (genericData->isAttributeCarrierSelected()) {
2048 if (myGenericDatas.at(genericData->
getTagProperty().
getTag()).insert(genericData).second ==
false) {
2052 myNet->getViewNet()->getIntervalBar().markForUpdate();
2058 const auto finder = myGenericDatas.at(genericData->
getTagProperty().
getTag()).find(genericData);
2065 myNet->getViewNet()->getIntervalBar().markForUpdate();
2069std::set<std::string>
2072 std::set<std::string> attributesSolution;
2074 std::vector<GNEGenericData*> genericDatas;
2076 for (
const auto& interval : myDataIntervals) {
2080 for (
const auto& genericData : interval->getGenericDataChildren()) {
2081 if (genericDataTag.empty() || (genericData->getTagProperty().getTagStr() == genericDataTag)) {
2082 genericDatas.push_back(genericData);
2088 for (
const auto& genericData : genericDatas) {
2089 for (
const auto& attribute : genericData->getParametersMap()) {
2090 attributesSolution.insert(attribute.first);
2093 return attributesSolution;
2097std::set<std::string>
2099 const std::string& beginStr,
const std::string& endStr)
const {
2101 std::set<std::string> attributesSolution;
2103 std::vector<GNEDataSet*> dataSets;
2104 std::vector<GNEDataInterval*> dataIntervals;
2106 GNEDataSet* retrievedDataSet = retrieveDataSet(dataSetID,
false);
2108 if (dataSetID.empty()) {
2110 dataSets.reserve(myDataSets.size());
2111 for (
const auto& dataSet : myDataSets) {
2112 dataSets.push_back(dataSet);
2114 }
else if (retrievedDataSet) {
2115 dataSets.push_back(retrievedDataSet);
2117 return attributesSolution;
2120 int numberOfIntervals = 0;
2121 for (
const auto& dataSet : dataSets) {
2122 numberOfIntervals += (int)dataSet->getDataIntervalChildren().size();
2125 dataIntervals.reserve(numberOfIntervals);
2127 for (
const auto& dataSet : dataSets) {
2128 for (
const auto& dataInterval : dataSet->getDataIntervalChildren()) {
2130 if (beginStr.empty() && endStr.empty()) {
2131 dataIntervals.push_back(dataInterval.second);
2132 }
else if (endStr.empty()) {
2134 const double begin = GNEAttributeCarrier::parse<double>(beginStr);
2135 if (dataInterval.second->getAttributeDouble(
SUMO_ATTR_BEGIN) >= begin) {
2136 dataIntervals.push_back(dataInterval.second);
2138 }
else if (beginStr.empty()) {
2140 const double end = GNEAttributeCarrier::parse<double>(endStr);
2141 if (dataInterval.second->getAttributeDouble(
SUMO_ATTR_END) <= end) {
2142 dataIntervals.push_back(dataInterval.second);
2146 const double begin = GNEAttributeCarrier::parse<double>(beginStr);
2147 const double end = GNEAttributeCarrier::parse<double>(endStr);
2148 if ((dataInterval.second->getAttributeDouble(
SUMO_ATTR_BEGIN) >= begin) &&
2149 (dataInterval.second->getAttributeDouble(
SUMO_ATTR_END) <= end)) {
2150 dataIntervals.push_back(dataInterval.second);
2156 for (
const auto& dataInterval : dataIntervals) {
2157 for (
const auto& genericData : dataInterval->getGenericDataChildren()) {
2159 if (genericDataTag.empty() || (genericData->getTagProperty().getTagStr() == genericDataTag)) {
2160 for (
const auto& attribute : genericData->getParametersMap()) {
2161 attributesSolution.insert(attribute.first);
2166 return attributesSolution;
2172 for (
const auto& meanData : myMeanDatas.at(type)) {
2173 if (meanData->getID() == id) {
2178 throw ProcessError(
"Attempted to retrieve non-existant meanData (string)");
2191 }
else if (hardFail) {
2192 throw ProcessError(
"Attempted to retrieve non-existant meanData (AttributeCarrier)");
2199const std::map<SumoXMLTag, std::set<GNEMeanData*> >&
2208 for (
const auto& meanDatasTag : myMeanDatas) {
2209 counter += (int)meanDatasTag.second.size();
2218 for (
const auto& meanDatasTags : myMeanDatas) {
2219 for (
const auto& meanData : meanDatasTags.second) {
2220 myNet->removeGLObjectFromGrid(meanData);
2224 for (
auto& meanDatas : myMeanDatas) {
2225 meanDatas.second.clear();
2237 prefix = neteditOptions.getString(
"meanDataEdge-prefix");
2239 prefix = neteditOptions.getString(
"meanDataLane-prefix");
2242 while (retrieveMeanData(tag, prefix +
"_" +
toString(counter),
false) !=
nullptr) {
2245 return (prefix +
"_" +
toString(counter));
2251 myNet->getNetBuilder()->getNodeCont().insert(junction->
getNBNode());
2252 registerJunction(junction);
2259 myNet->getViewNet()->removeFromAttributeCarrierInspected(junction);
2260 myNet->getViewNet()->getViewParent()->getInspectorFrame()->getHierarchicalElementTree()->removeCurrentEditedAttributeCarrier(junction);
2262 myNet->removeGLObjectFromGrid(junction);
2264 myNet->getNetBuilder()->getNodeCont().extract(junction->
getNBNode());
2265 junction->
decRef(
"GNENet::deleteSingleJunction");
2272 return (myEdgeTypes.count(edgeType->
getID()) > 0);
2279 const auto& createEdgeFrame = myNet->getViewNet()->getViewParent()->getCreateEdgeFrame();
2283 if (myNet->getViewNet()->getViewParent()->getCreateEdgeFrame()->shown()) {
2284 myNet->getViewNet()->getViewParent()->getCreateEdgeFrame()->getEdgeTypeSelector()->refreshEdgeTypeSelector();
2287 createEdgeFrame->getEdgeTypeSelector()->setCurrentEdgeType(edgeType);
2294 const auto& createEdgeFrame = myNet->getViewNet()->getViewParent()->getCreateEdgeFrame();
2296 myNet->getViewNet()->removeFromAttributeCarrierInspected(edgeType);
2297 myNet->getViewNet()->getViewParent()->getInspectorFrame()->getHierarchicalElementTree()->removeCurrentEditedAttributeCarrier(edgeType);
2301 if (createEdgeFrame->getEdgeTypeSelector()->getEdgeTypeSelected() == edgeType) {
2302 createEdgeFrame->getEdgeTypeSelector()->clearEdgeTypeSelected();
2305 createEdgeFrame->getEdgeTypeSelector()->refreshEdgeTypeSelector();
2312 myNet->getNetBuilder()->getEdgeCont().insert(nbe);
2324 myNet->getViewNet()->removeFromAttributeCarrierInspected(edge);
2325 myNet->getViewNet()->getViewParent()->getInspectorFrame()->getHierarchicalElementTree()->removeCurrentEditedAttributeCarrier(edge);
2327 myNet->removeGLObjectFromGrid(edge);
2330 for (
const auto& lane : edge->
getLanes()) {
2334 myNet->getNetBuilder()->getEdgeCont().extract(myNet->getNetBuilder()->getDistrictCont(), edge->
getNBEdge());
2335 edge->
decRef(
"GNENet::deleteSingleEdge");
2356 return std::find(additionalElementTag.begin(), additionalElementTag.end(), additional) != additionalElementTag.end();
2366 if (myAdditionals.at(additional->
getTagProperty().
getTag()).insert(additional).second ==
false) {
2371 myNet->addGLObjectIntoGrid(additional);
2374 if (myNet->isUpdateGeometryEnabled()) {
2378 myNet->getSavingStatus()->requireSaveAdditionals();
2391 myNet->getViewNet()->removeFromAttributeCarrierInspected(additional);
2392 myNet->getViewNet()->getViewParent()->getInspectorFrame()->getHierarchicalElementTree()->removeCurrentEditedAttributeCarrier(additional);
2397 myNet->removeGLObjectFromGrid(additional);
2400 myNet->getPathManager()->removePath(additional);
2402 myNet->getSavingStatus()->requireSaveAdditionals();
2409 if (demandElement) {
2413 return std::find(demandElementTag.begin(), demandElementTag.end(), demandElement) != demandElementTag.end();
2423 if (myDemandElements.at(demandElement->
getTagProperty().
getTag()).insert(demandElement).second ==
false) {
2427 myNet->addGLObjectIntoGrid(demandElement);
2429 if (myNet->isUpdateGeometryEnabled()) {
2435 myNet->getSavingStatus()->requireSaveDemandElements();
2442 auto itFind = myDemandElements.at(demandElement->
getTagProperty().
getTag()).find(demandElement);
2448 myNet->getViewNet()->removeFromAttributeCarrierInspected(demandElement);
2449 myNet->getViewNet()->getViewParent()->getInspectorFrame()->getHierarchicalElementTree()->removeCurrentEditedAttributeCarrier(demandElement);
2450 myNet->getViewNet()->getViewParent()->getPersonPlanFrame()->getPersonHierarchy()->removeCurrentEditedAttributeCarrier(demandElement);
2451 myNet->getViewNet()->getViewParent()->getContainerPlanFrame()->getContainerHierarchy()->removeCurrentEditedAttributeCarrier(demandElement);
2453 if (myNet->getViewNet()->getLastCreatedRoute() == demandElement) {
2454 myNet->getViewNet()->setLastCreatedRoute(
nullptr);
2459 myNet->removeGLObjectFromGrid(demandElement);
2461 myNet->getPathManager()->removePath(demandElement);
2467 myNet->getSavingStatus()->requireSaveDemandElements();
2475 if (myDataSets.find(dataSet) != myDataSets.end()) {
2489 if (myDataSets.insert(dataSet).second ==
false) {
2493 myNet->getSavingStatus()->requireSaveDataElements();
2495 myNet->getViewNet()->getIntervalBar().markForUpdate();
2502 const auto itFind = myDataSets.find(dataSet);
2504 if (itFind == myDataSets.end()) {
2508 myNet->getViewNet()->removeFromAttributeCarrierInspected(dataSet);
2509 myNet->getViewNet()->getViewParent()->getInspectorFrame()->getHierarchicalElementTree()->removeCurrentEditedAttributeCarrier(dataSet);
2511 myDataSets.erase(itFind);
2513 myNet->getSavingStatus()->requireSaveDataElements();
2515 myNet->getViewNet()->getIntervalBar().markForUpdate();
2526 return std::find(meanDataElementTag.begin(), meanDataElementTag.end(), meanData) != meanDataElementTag.end();
2541 myNet->addGLObjectIntoGrid(meanData);
2544 if (myNet->isUpdateGeometryEnabled()) {
2548 myNet->getSavingStatus()->requireSaveMeanDatas();
2561 myNet->getViewNet()->removeFromAttributeCarrierInspected(meanData);
2562 myNet->getViewNet()->getViewParent()->getInspectorFrame()->getHierarchicalElementTree()->removeCurrentEditedAttributeCarrier(meanData);
2567 myNet->removeGLObjectFromGrid(meanData);
2570 myNet->getSavingStatus()->requireSaveMeanDatas();
2576 if (myNet->getViewNet()->getEditModes().isCurrentSupermodeDemand()) {
2578 switch (myNet->getViewNet()->getEditModes().demandEditMode) {
2580 if (tagProperty.
isType()) {
2581 myNet->getViewNet()->getViewParent()->getVehicleFrame()->getTypeSelector()->refreshDemandElementSelector();
2585 if (tagProperty.
isType()) {
2586 myNet->getViewNet()->getViewParent()->getTypeFrame()->getTypeSelector()->refreshTypeSelector();
2590 if (tagProperty.
isType()) {
2591 myNet->getViewNet()->getViewParent()->getTypeDistributionFrame()->getTypeDistributionSelector()->refreshTypeDistributionSelector();
2595 myNet->getViewNet()->getViewParent()->getStopFrame()->getStopParentSelector()->refreshDemandElementSelector();
2598 if (tagProperty.
isType()) {
2599 myNet->getViewNet()->getViewParent()->getPersonFrame()->getTypeSelector()->refreshDemandElementSelector();
2604 myNet->getViewNet()->getViewParent()->getPersonPlanFrame()->getPersonSelector()->refreshDemandElementSelector();
2608 if (tagProperty.
isType()) {
2609 myNet->getViewNet()->getViewParent()->getContainerFrame()->getTypeSelector()->refreshDemandElementSelector();
2614 myNet->getViewNet()->getViewParent()->getContainerPlanFrame()->getContainerSelector()->refreshDemandElementSelector();
2634 mySumoConfigSaved =
false;
2640 mySumoConfigSaved =
true;
2646 return mySumoConfigSaved;
2653 myNeteditConfigSaved =
false;
2659 myNeteditConfigSaved =
true;
2665 return myNeteditConfigSaved;
2671 myNetworkSaved =
false;
2673 myNeteditConfigSaved =
false;
2674 mySumoConfigSaved =
false;
2680 myNetworkSaved =
true;
2686 return myNetworkSaved;
2710 myEdgeTypeSaved =
false;
2716 myEdgeTypeSaved =
true;
2722 return myEdgeTypeSaved;
2728 myAdditionalSaved =
false;
2730 myNeteditConfigSaved =
false;
2731 mySumoConfigSaved =
false;
2737 myAdditionalSaved =
true;
2743 return myAdditionalSaved;
2749 myDemandElementSaved =
false;
2751 myNeteditConfigSaved =
false;
2752 mySumoConfigSaved =
false;
2758 myDemandElementSaved =
true;
2764 return myDemandElementSaved;
2770 myDataElementSaved =
false;
2772 myNeteditConfigSaved =
false;
2773 mySumoConfigSaved =
false;
2779 myDataElementSaved =
true;
2785 return myDataElementSaved;
2791 myMeanDataElementSaved =
false;
2793 myNeteditConfigSaved =
false;
2794 mySumoConfigSaved =
false;
2800 myMeanDataElementSaved =
true;
2806 return myMeanDataElementSaved;
2816 myReplaced(replaced),
2827 myTllcont.replaceRemoved(myBy, -1, myReplaced, -1,
true);
2834 myTllcont.replaceRemoved(myReplaced, -1, myBy, -1,
true);
2840 return TL(
"Redo replace in TLS");
2846 return TL(
"Undo replace in TLS");
2852 return myReplaced != myBy;
Supermode
@brie enum for supermodes
@ NETWORK
Network mode (Edges, junctions, etc..)
@ DATA
Data mode (edgeData, LaneData etc..)
@ DEMAND
Demand mode (Routes, Vehicles etc..)
@ DEMAND_PERSONPLAN
Mode for editing person plan.
@ DEMAND_CONTAINER
Mode for editing container.
@ DEMAND_PERSON
Mode for editing person.
@ DEMAND_TYPEDISTRIBUTION
Mode for editing type distributions.
@ DEMAND_VEHICLE
Mode for editing vehicles.
@ DEMAND_STOP
Mode for editing stops.
@ DEMAND_CONTAINERPLAN
Mode for editing container plan.
@ DEMAND_TYPE
Mode for editing types.
GUISelectedStorage gSelected
A global holder of selected objects.
std::string time2string(SUMOTime t, bool humanReadable)
convert SUMOTime to string (independently of global format setting)
@ SVC_IGNORING
vehicles ignoring classes
@ SVC_RAIL
vehicle is a not electrified rail
@ SVC_PASSENGER
vehicle is a passenger car (a "normal" car)
@ SVC_BICYCLE
vehicle is a bicycle
@ SVC_TAXI
vehicle is a taxi
@ SVC_PEDESTRIAN
pedestrian
const std::string DEFAULT_TAXITYPE_ID
const std::string DEFAULT_RAILTYPE_ID
const std::string DEFAULT_PEDTYPE_ID
const std::set< std::string > DEFAULT_VTYPES
const std::string DEFAULT_VTYPE_ID
const std::string DEFAULT_CONTAINERTYPE_ID
const std::string DEFAULT_BIKETYPE_ID
SumoXMLTag
Numbers representing SUMO-XML - element names.
@ GNE_TAG_TRIP_JUNCTIONS
a trip between junctions
@ SUMO_TAG_TRACTION_SUBSTATION
A traction substation.
@ GNE_TAG_TRIP_TAZS
a single trip definition that uses TAZs
@ SUMO_TAG_INTERVAL
an aggreagated-output interval
@ SUMO_TAG_REROUTER
A rerouter.
@ SUMO_TAG_EDGEREL
a relation between two edges
@ 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_NOTHING
invalid tag
@ SUMO_TAG_CONTAINER_STOP
A container stop.
@ 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_MEANDATA_LANE
a lane based mean data detector
@ SUMO_TAG_VEHICLE
description of a vehicle
@ GNE_TAG_FLOW_ROUTE
a flow definition using a route instead of a from-to edges route
@ GNE_TAG_FLOW_JUNCTIONS
a flow between junctions
@ GNE_TAG_POIGEO
Point of interest over view with GEO attributes.
@ 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_CONNECTION
connectioon between two lanes
@ SUMO_TAG_PARKING_AREA
A parking area.
@ SUMO_TAG_WALKINGAREA
walking area for pedestrians
@ GNE_TAG_FLOW_TAZS
a flow between TAZs
@ GNE_TAG_CALIBRATOR_LANE
A calibrator placed over lane.
@ SUMO_TAG_JUNCTION
begin/end of the description of a junction
@ SUMO_TAG_CROSSING
crossing between edges for pedestrians
@ SUMO_TAG_ROUTE
begin/end of the description of a route
@ SUMO_TAG_MEANDATA_EDGE
an edge based mean data detector
@ 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_VTYPE_DISTRIBUTION
distribution of a vehicle type
@ SUMO_TAG_LANE
begin/end of the description of a single lane
@ SUMO_TAG_INSTANT_INDUCTION_LOOP
An instantenous induction loop.
@ GNE_TAG_VEHICLE_WITHROUTE
description of a vehicle with an embedded route
@ GNE_TAG_POILANE
Point of interest over Lane.
@ SUMO_TAG_LANE_AREA_DETECTOR
alternative tag for e2 detector
@ SUMO_TAG_TAZREL
a relation between two TAZs
@ SUMO_TAG_TAZSOURCE
a source within a district (connection road)
@ SUMO_TAG_INDUCTION_LOOP
alternative tag for e1 detector
@ 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_TRIP
a single trip definition (used by router)
@ SUMO_TAG_EDGE
begin/end of the description of an edge
@ SUMO_ATTR_BEGIN
weights: time range begin
@ GNE_ATTR_DEFAULT_VTYPE
Flag to check if VType is a default VType.
@ SUMO_ATTR_END
weights: time range end
std::string toString(const T &t, std::streamsize accuracy=gPrecision)
An Element which don't belong to GNENet but has influence in the simulation.
virtual void updateGeometry()=0
update pre-computed geometry information
const GUIGeometry & getAdditionalGeometry() const
obtain additional geometry
virtual Position getPositionInView() const =0
Returns position of additional in view.
const std::string getID() const
get ID (all Attribute Carriers have one)
bool isAttributeCarrierSelected() const
check if attribute carrier is selected
static const std::vector< GNETagProperties > getTagPropertiesByType(const int tagPropertyCategory)
get tagProperties associated to the given GNETagProperties::TagType (NETWORKELEMENT,...
static const std::string True
true value in string format (used for comparing boolean values in getAttribute(......
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
the function-object for an editing operation (abstract base)
const PositionVector & getConnectionShape() const
This object is responsible for drawing a shape and for supplying a a popup menu. Messages are routete...
const PositionVector & getCrossingShape() const
An Element which don't belong to GNENet but has influence in the simulation.
An Element which don't belong to GNENet but has influence in the simulation.
virtual void updateGeometry()=0
update pre-computed geometry information
A road/street connecting two junctions (netedit-version)
void setResponsible(bool newVal)
set responsibility for deleting internal structures
NBEdge * getNBEdge() const
returns the internal NBEdge
const std::vector< GNELane * > & getLanes() const
returns a reference to the lane vector
GNEJunction * getFromJunction() const
get from Junction (only used to increase readability)
GNEJunction * getToJunction() const
get from Junction (only used to increase readability)
void setMicrosimID(const std::string &newID)
override to also set lane ids
An Element which don't belong to GNENet but has influence in the simulation.
const std::vector< GNEAdditional * > & getChildAdditionals() const
return child additionals
void setEdgeTemplate(const GNEEdge *edge)
set edge template
GNEEdgeTemplate * getEdgeTemplate() const
get edge template (to copy attributes from)
void setResponsible(bool newVal)
set responsibility for deleting internal structures
void updateGeometry()
update pre-computed geometry information (including crossings)
void removeOutgoingGNEEdge(GNEEdge *edge)
remove outgoing GNEEdge
void removeIncomingGNEEdge(GNEEdge *edge)
remove incoming GNEEdge
void addIncomingGNEEdge(GNEEdge *edge)
add incoming GNEEdge
NBNode * getNBNode() const
Return net build node.
void addOutgoingGNEEdge(GNEEdge *edge)
add outgoing GNEEdge
This lane is powered by an underlying GNEEdge and basically knows how to draw itself.
int getIndex() const
returns the index of the lane
An Element which don't belong to GNENet but has influence in the simulation.
void updateGeometry()
update pre-computed geometry information
std::vector< GNEEdge * > retrieveEdges(GNEJunction *from, GNEJunction *to) const
get all edges by from and to GNEJunction
void insertWalkingArea(GNEWalkingArea *walkingArea)
insert walkingArea
GNEAttributeCarrier * retrieveAttributeCarrier(const GUIGlID id, bool hardFail=true) const
get a single attribute carrier based on a GLID
int getNumberOfSelectedAdditionals() const
get number of selected additionals (Including POIs, Polygons, TAZs and Wires)
const std::map< SumoXMLTag, std::set< GNEGenericData * > > & getGenericDatas() const
get all generic datas
const std::set< GNELane * > & getLanes() const
get lanes
const std::set< GNEConnection * > & getConnections() const
get connections
int getNumberOfSelectedConnections() const
get number of selected connections
void deleteDataSet(GNEDataSet *dataSet)
delete demand element element of GNENet container
void addPrefixToJunctions(const std::string &prefix)
add prefix to all junctions
void insertLane(GNELane *lane)
insert lane
int getNumberOfSelectedEdgeRelDatas() const
get number of selected edge rel datas
int getNumberOfSelectedCrossings() const
get number of selected crossings
GNEEdgeType * registerEdgeType(GNEEdgeType *edgeType)
registers a edge in GNENet containers
std::vector< GNEAdditional * > getSelectedShapes() const
get selected shapes
GNELane * retrieveLane(const std::string &id, bool hardFail=true, bool checkVolatileChange=false) const
get lane by id
std::map< SumoXMLTag, std::set< GNEDemandElement * > > myDemandElements
map with the tag and pointer to demand elements of net
const std::map< SumoXMLTag, std::set< GNEDemandElement * > > & getDemandElements() const
get demand elements
void insertDataSet(GNEDataSet *dataSet)
Insert a demand element element int GNENet container.
bool dataSetExist(GNEDataSet *dataSet) const
return true if given demand element exist
int getNumberOfSelectedRides() const
get number of selected rides
void clearDemandElements()
clear demand elements
void insertGenericData(GNEGenericData *genericData)
insert generic data
GNEEdge * registerEdge(GNEEdge *edge)
registers an edge with GNENet containers
bool demandElementExist(GNEDemandElement *demandElement) const
return true if given demand element exist
void deleteDemandElement(GNEDemandElement *demandElement, const bool updateFrames)
delete demand element element of GNENet container
int getNumberOfSelectedPersonTrips() const
get number of selected person trips
std::string generateDemandElementID(SumoXMLTag tag) const
generate demand element id
int getNumberOfMeanDatas() const
get number of meanDatas
void addPrefixToEdges(const std::string &prefix)
add prefix to all edges
void remapJunctionAndEdgeIds()
remap junction and edge IDs
std::vector< GNEAttributeCarrier * > retrieveAttributeCarriers(SumoXMLTag tag=SUMO_TAG_NOTHING)
get the attribute carriers based on Type
void clearEdgeTypes()
clear edgeTypes
int getNumberOfSelectedTranships() const
get number of selected tranships
const std::map< SumoXMLTag, std::set< GNEMeanData * > > & getMeanDatas() const
get meanDatas
int getNumberOfSelectedVehicles() const
get number of selected vehicles
int getNumberOfSelectedWalks() const
get number of selected walks
void deleteEdgeType(GNEEdgeType *edgeType)
deletes edgeType
std::string generateDataSetID(const std::string &prefix) const
generate data set id
void deleteConnection(GNEConnection *connection)
delete connection
void clearAdditionals()
clear additionals
GNEAdditional * retrieveAdditional(SumoXMLTag type, const std::string &id, bool hardFail=true) const
Returns the named additional.
std::vector< GNEGenericData * > retrieveGenericDatas(const SumoXMLTag genericDataTag, const double begin, const double end)
retrieve generic datas within the given interval
int getStopIndex()
get (and update) stop index
std::set< std::string > retrieveGenericDataParameters(const std::string &genericDataTag, const double begin, const double end) const
return a set of parameters for the given data Interval
std::vector< GNEWalkingArea * > getSelectedWalkingAreas() const
return all selected walkingAreas
std::map< SumoXMLTag, std::set< GNEGenericData * > > myGenericDatas
map with the tag and pointer to all generic datas
void deleteSingleJunction(GNEJunction *junction)
deletes a single junction
GNEMeanData * retrieveMeanData(SumoXMLTag type, const std::string &id, bool hardFail=true) const
Returns the named meanData.
GNEJunction * registerJunction(GNEJunction *junction)
registers a junction in GNENet containers
const std::set< GNEDataSet * > & getDataSets() const
get demand elements
int getNumberOfSelectedWalkingAreas() const
get number of selected walkingAreas
bool isNetworkElementAroundShape(GNEAttributeCarrier *AC, const PositionVector &shape) const
check if shape of given AC (network element) is around the given shape
GNEJunction * retrieveJunction(const std::string &id, bool hardFail=true) const
get junction by id
std::vector< GNEDemandElement * > getSelectedDemandElements() const
get selected demand elements
GNEDemandElement * retrieveFirstDemandElement(SumoXMLTag type) const
Returns the first demand element sorted by ID (or null if type is empty)
void updateJunctionID(GNEJunction *junction, const std::string &newID)
update junction ID in container
void deleteGenericData(GNEGenericData *genericData)
delete generic data
~AttributeCarriers()
destructor
void insertCrossing(GNECrossing *crossing)
insert crossing
int getNumberOfSelectedWires() const
get number of selected Wires
std::string generateMeanDataID(SumoXMLTag type) const
generate meanData id
void insertMeanData(GNEMeanData *meanData)
Insert a meanData element int GNENet container.
GNEDataSet * retrieveDataSet(const std::string &id, bool hardFail=true) const
Returns the named data set.
int getNumberOfSelectedTAZs() const
get number of selected TAZs
void deleteWalkingArea(GNEWalkingArea *walkingArea)
delete walkingArea
int getNumberOfSelectedTransport() const
get number of selected transports
GNEDataInterval * retrieveDataInterval(GNEAttributeCarrier *AC, bool hardFail=true) const
Returns the data interval.
std::vector< GNELane * > getSelectedLanes() const
get selected lanes
void insertConnection(GNEConnection *connection)
insert connection
std::vector< GNEAdditional * > getSelectedAdditionals() const
get selected additionals
int getNumberOfSelectedJunctions() const
get number of selected junctions
const std::map< std::string, GNEEdge * > & getEdges() const
map with the ID and pointer to edges of net
int getNumberOfGenericDatas() const
Return the number of generic datas.
int getNumberOfSelectedDemandElements() const
get number of selected demand elements
int getNumberOfSelectedPersons() const
get number of selected persons
int getNumberOfSelectedPureAdditionals() const
get number of selected pure additionals (Except POIs, Polygons, TAZs and Wires)
GNEEdgeType * retrieveEdgeType(const std::string &id, bool hardFail=true) const
get edge type by id
void deleteMeanData(GNEMeanData *meanData)
delete meanData element of GNENet container
int getNumberOfSelectedRoutes() const
get number of selected routes
void addDefaultVTypes()
add default VTypes
int getNumberOfSelectedPOIs() const
get number of selected POIs
void deleteSingleEdge(GNEEdge *edge)
deletes a single edge
std::string generateAdditionalID(SumoXMLTag type) const
generate additional id
const std::set< GNEDataInterval * > & getDataIntervals() const
get all data intervals of network
void deleteAdditional(GNEAdditional *additional)
delete additional element of GNENet container
int getNumberOfDemandElements() const
Return the number of demand elements.
int getNumberOfSelectedPolygons() const
get number of selected polygons
std::vector< GNEJunction * > getSelectedJunctions() const
return selected junctions
int getNumberOfAdditionals() const
get number of additionals
const std::set< GNECrossing * > & getCrossings() const
get crossings
void insertEdge(GNEEdge *edge)
void insertDemandElement(GNEDemandElement *demandElement)
Insert a demand element element int GNENet container.
const std::map< SumoXMLTag, std::set< GNEAdditional * > > & getAdditionals() const
get additionals
void updateEdgeID(GNEEdge *edge, const std::string &newID)
update edge ID in container
std::vector< GNECrossing * > getSelectedCrossings() const
return all selected crossings
std::map< SumoXMLTag, std::set< GNEMeanData * > > myMeanDatas
map with the tag and pointer to meanData elements of net
int getNumberOfSelectedLanes() const
get number of selected lanes
GNEAdditional * retrieveRerouterInterval(const std::string &rerouterID, const SUMOTime begin, const SUMOTime end) const
Returns the rerouter interval defined by given begin and end.
int getNumberOfSelectedEdgeDatas() const
get number of selected edge datas
void updateEdgeTypeID(GNEEdgeType *edgeType, const std::string &newID)
update edgeType ID in container
int getNumberOfSelectedTAZSources() const
get number of selected TAZSources
bool additionalExist(const GNEAdditional *additional) const
return true if given additional exist
void insertAdditional(GNEAdditional *additional)
Insert a additional element int GNENet container.
void insertEdgeType(GNEEdgeType *edgeType)
inserts a single edgeType into the net and into the underlying netbuild-container
GNEEdge * retrieveEdge(const std::string &id, bool hardFail=true) const
get edge by id
int getNumberOfSelectedEdgeTAZRel() const
get number of selected edge TAZ Rels
std::vector< GNEGenericData * > getSelectedGenericDatas() const
get selected generic datas
void deleteLane(GNELane *lane)
delete lane
void clearEdges()
clear edges
void insertJunction(GNEJunction *junction)
std::vector< GNEEdge * > getSelectedEdges() const
return all edges
std::map< SumoXMLTag, std::set< GNEAdditional * > > myAdditionals
map with the tag and pointer to additional elements of net
void insertDataInterval(GNEDataInterval *dataInterval)
insert data interval
int getNumberOfSelectedTAZSinks() const
get number of selected TAZSinks
void updateDemandElementFrames(const GNETagProperties &tagProperty)
update demand element frames (called after insert/delete demand element)
const std::map< std::string, GNEJunction * > & getJunctions() const
get junctions
int getNumberOfSelectedEdges() const
get number of selected edges
const std::map< std::string, GNEEdgeType * > & getEdgeTypes() const
map with the ID and pointer to edgeTypes of net
GNECrossing * retrieveCrossing(GNEAttributeCarrier *AC, bool hardFail=true) const
get Crossing by AC
void clearMeanDatas()
clear meanDatas
GNEDemandElement * retrieveDemandElement(SumoXMLTag type, const std::string &id, bool hardFail=true) const
Returns the named demand element.
std::vector< GNEConnection * > getSelectedConnections() const
get selected connections
void clearJunctions()
clear junctions
bool meanDataExist(const GNEMeanData *meanData) const
return true if given meanData exist
void deleteCrossing(GNECrossing *crossing)
delete crossing
GNEGenericData * retrieveGenericData(GNEAttributeCarrier *AC, bool hardFail=true) const
Returns the generic data.
GNEDemandElement * getDefaultType() const
get default type
bool edgeTypeExist(const GNEEdgeType *edgeType) const
GNEWalkingArea * retrieveWalkingArea(GNEAttributeCarrier *AC, bool hardFail=true) const
get WalkingArea by AC
std::vector< GNEAttributeCarrier * > getSelectedAttributeCarriers(const bool ignoreCurrentSupermode)
get all selected attribute carriers (or only relative to current supermode
int getNumberOfSelectedStops() const
get number of selected stops
AttributeCarriers(GNENet *net)
constructor
std::string generateEdgeTypeID() const
generate edgeType id
void deleteDataInterval(GNEDataInterval *dataInterval)
delete data interval
GNEConnection * retrieveConnection(const std::string &id, bool hardFail=true) const
get Connection by id
const std::set< GNEWalkingArea * > & getWalkingAreas() const
get walkingAreas
int getNumberOfSelectedContainers() const
get number of selected containers
std::string undoName() const
undo name
GNEChange_ReplaceEdgeInTLS(NBTrafficLightLogicCont &tllcont, NBEdge *replaced, NBEdge *by)
constructor
~GNEChange_ReplaceEdgeInTLS()
destructor
std::string redoName() const
get Redo name
bool trueChange()
wether original and new value differ
void requireSaveTLS()
inform that TLS has to be saved
void dataElementsSaved()
mark demand elements as saved
bool isEdgeTypeSaved() const
check if edgeType are saved
SavingStatus()
constructor
void requireSaveNetwork()
inform that network has to be saved
void requireSaveEdgeType()
inform that edgeType has to be saved
bool isTLSSaved() const
check if TLS are saved
void demandElementsSaved()
mark demand elements as saved
void SumoConfigSaved()
mark SumoConfig as saved
void additionalsSaved()
mark additionals as saved
void requireSaveNeteditConfig()
inform that netedit config has to be saved
void requireSaveSumoConfig()
inform that SumoConfig has to be saved
void TLSSaved()
mark TLS as saved
bool isSumoConfigSaved() const
check if SumoConfig is saved
void neteditConfigSaved()
mark netedit config as saved
void requireSaveMeanDatas()
inform that mean data elements has to be saved
void meanDatasSaved()
mark mean data elements as saved
bool isDemandElementsSaved() const
check if demand elements are saved
void requireSaveAdditionals()
inform that additionals has to be saved
bool isDataElementsSaved() const
check if data elements are saved
bool isNetworkSaved() const
check if network is saved
bool isMeanDatasSaved() const
check if mean data elements are saved
void requireSaveDataElements()
inform that data elements has to be saved
bool isNeteditConfigSaved() const
check if netedit config is saved
void networkSaved()
mark network as saved
bool isAdditionalsSaved() const
check if additionals are saved
void requireSaveDemandElements()
inform that demand elements has to be saved
void edgeTypeSaved()
mark edgeType as saved
A NBNetBuilder extended by visualisation and editing capabilities.
Boundary getCenteringBoundary() const
Returns the boundary to which the view shall be centered in order to show the object.
void decRef(const std::string &debugMsg="")
Decrease reference.
void incRef(const std::string &debugMsg="")
Increase reference.
bool isMeanData() const
return true if tag correspond to a mean data element
bool isContainer() const
return true if tag correspond to a container element
bool isGenericData() const
return true if tag correspond to a generic data element
bool isNetworkElement() const
return true if tag correspond to a network element
bool isDataElement() const
return true if tag correspond to a data element
bool isType() const
return true if tag correspond to a vehicle/person/container type element
bool isPlacedInRTree() const
return true if Tag correspond to an element that has to be placed in RTREE
SumoXMLTag getTag() const
get Tag vinculated with this attribute Property
bool isDemandElement() const
return true if tag correspond to a demand element
bool isAdditionalElement() const
return true if tag correspond to an additional element (note: this include TAZ, shapes and wires)
bool isPerson() const
return true if tag correspond to a person element
This object is responsible for drawing a shape and for supplying a a popup menu. Messages are routete...
const PositionVector & getShape() const
The shape of the additional element.
const std::string & getMicrosimID() const
Returns the id of the object as known to microsim.
virtual void setMicrosimID(const std::string &newID)
Changes the microsimID of the object.
void unblockObject(GUIGlID id)
Marks an object as unblocked.
GUIGlObject * getObjectBlocking(GUIGlID id) const
Returns the object from the container locking it.
static GUIGlObjectStorage gIDStorage
A single static instance of this class.
const std::set< GUIGlID > & getSelected() const
Returns the set of ids of all selected objects.
The representation of a single edge during network building.
NBNode * getToNode() const
Returns the destination node of the edge.
const std::string & getID() const
NBNode * getFromNode() const
Returns the origin node of the edge.
void addIncomingEdge(NBEdge *edge)
adds an incoming edge
Position getCenter() const
Returns a position that is guaranteed to lie within the node shape.
int buildCrossings()
build pedestrian crossings
void addOutgoingEdge(NBEdge *edge)
adds an outgoing edge
const Position & getPosition() const
const PositionVector & getShape() const
retrieve the junction shape
A container for traffic light definitions and built programs.
const std::string & getID() const
Returns the id.
static OptionsCont & getOptions()
Retrieves the options.
C++ TraCI client API implementation.
double z() const
Returns the z-position.
bool overlapsWith(const AbstractPoly &poly, double offset=0) const
Returns the information whether the given polygon overlaps with this.
bool around(const Position &p, double offset=0) const
Returns the information whether the position vector describes a polygon lying around the given point.
static std::string getEdgeIDFromLane(const std::string laneID)
return edge id when given the lane ID