118 for (
const auto& additionalTagProperty : additionalTagProperties) {
119 myAdditionals.insert(std::make_pair(additionalTagProperty->getTag(), std::unordered_map<const GUIGlObject*, GNEAdditional*>()));
121 myAdditionalIDs.insert(std::make_pair(additionalTagProperty->getTag(), std::map<const std::string, GNEAdditional*>()));
128 for (
const auto& demandElementTagProperty : demandElementTagProperties) {
129 myDemandElements.insert(std::make_pair(demandElementTagProperty->getTag(), std::unordered_map<const GUIGlObject*, GNEDemandElement*>()));
130 if (demandElementTagProperty->hasAttribute(
SUMO_ATTR_ID)) {
131 myDemandElementIDs.insert(std::make_pair(demandElementTagProperty->getTag(), std::map<const std::string, GNEDemandElement*>()));
135 for (
const auto& stopTagProperty : stopTagProperties) {
136 myDemandElements.insert(std::make_pair(stopTagProperty->getTag(), std::unordered_map<const GUIGlObject*, GNEDemandElement*>()));
140 for (
const auto& genericDataElementTagProperty : genericDataElementTagProperties) {
141 myGenericDatas.insert(std::make_pair(genericDataElementTagProperty->getTag(), std::unordered_map<const GUIGlObject*, GNEGenericData*>()));
145 for (
const auto& meanDataTagProperty : meanDataTagProperties) {
146 myMeanDatas.insert(std::make_pair(meanDataTagProperty->getTag(), std::map<const std::string, GNEMeanData*>()));
153 for (
const auto& edgeType : myEdgeTypes) {
154 edgeType.second->decRef(
"GNENetHelper::~GNENet");
155 delete edgeType.second;
158 for (
const auto& edge : myEdges) {
159 edge.second->decRef(
"GNENetHelper::~GNENet");
163 for (
const auto& junction : myJunctions) {
164 junction.second->decRef(
"GNENetHelper::~GNENet");
165 delete junction.second;
168 for (
const auto& additionalTag : myAdditionals) {
169 for (
const auto& additional : additionalTag.second) {
171 additional.second->decRef();
172 delete additional.second;
176 for (
const auto& demandElementTag : myDemandElements) {
177 for (
const auto& demandElement : demandElementTag.second) {
179 demandElement.second->decRef();
180 delete demandElement.second;
184 for (
const auto& dataSet : myDataSets) {
186 dataSet.second->decRef();
187 delete dataSet.second;
190 for (
const auto& meanDataTag : myMeanDatas) {
191 for (
const auto& meanData : meanDataTag.second) {
193 meanData.second->decRef();
194 delete meanData.second;
202 std::map<std::string, GNEEdge*> newEdgeMap;
203 std::map<std::string, GNEJunction*> newJunctionMap;
205 for (
const auto& edge : myEdges) {
206 edge.second->setEdgeID(edge.second->getNBEdge()->getID());
207 newEdgeMap[edge.second->getNBEdge()->getID()] = edge.second;
209 for (
const auto& junction : myJunctions) {
210 newJunctionMap[junction.second->getNBNode()->getID()] = junction.second;
211 junction.second->setNetworkElementID(junction.second->getNBNode()->getID());
213 myEdges = newEdgeMap;
214 myJunctions = newJunctionMap;
231 for (
const auto& lane : myEdges.at(AC->
getID())->getChildLanes()) {
262 return myNumberOfNetworkElements;
268 return myNumberOfDemandElements;
274 return myNumberOfDataElements;
283 if (
object !=
nullptr) {
289 throw ProcessError(
"GUIGlObject does not match the declared type");
293 }
else if (hardFail) {
294 throw ProcessError(
"Attempted to retrieve non-existant GUIGlObject");
301std::vector<GNEAttributeCarrier*>
303 std::vector<GNEAttributeCarrier*> ACs;
306 const auto rootTagProperty = myNet->getTagPropertiesDatabase()->getTagProperty(
SUMO_TAG_ROOTFILE,
true);
307 ACs.reserve(myNumberOfNetworkElements + myNumberOfDemandElements + myNumberOfDataElements);
308 retrieveAttributeCarriersRecursively(rootTagProperty, ACs);
310 const auto tagProperty = myNet->getTagPropertiesDatabase()->getTagProperty(tag,
true);
313 ACs.reserve(myNumberOfNetworkElements);
315 ACs.reserve(myNumberOfDemandElements);
317 ACs.reserve(myNumberOfDataElements + myNumberOfMeanDataElements);
319 retrieveAttributeCarriersRecursively(tagProperty, ACs);
325std::vector<GNEAttributeCarrier*>
327 std::vector<GNEAttributeCarrier*> result;
331 for (
const auto& junction : myJunctions) {
332 if (!onlySelected || junction.second->isAttributeCarrierSelected()) {
333 result.push_back(junction.second);
336 for (
const auto& crossing : myCrossings) {
337 if (!onlySelected || crossing.second->isAttributeCarrierSelected()) {
338 result.push_back(crossing.second);
341 for (
const auto& edge : myEdges) {
342 if (!onlySelected || edge.second->isAttributeCarrierSelected()) {
343 result.push_back(edge.second);
346 for (
const auto& lane : myLanes) {
347 if (!onlySelected || lane.second->isAttributeCarrierSelected()) {
348 result.push_back(lane.second);
351 for (
const auto& connection : myConnections) {
352 if (!onlySelected || connection.second->isAttributeCarrierSelected()) {
353 result.push_back(connection.second);
356 for (
const auto& additionalSet : myAdditionals) {
357 for (
const auto& additional : additionalSet.second) {
358 if (!onlySelected || additional.second->isAttributeCarrierSelected()) {
359 result.push_back(additional.second);
364 for (
const auto& demandElementSet : myDemandElements) {
365 for (
const auto& demandElement : demandElementSet.second) {
366 if (!onlySelected || demandElement.second->isAttributeCarrierSelected()) {
367 result.push_back(demandElement.second);
372 for (
const auto& dataSet : myDataSets) {
373 if (!onlySelected || dataSet.second->isAttributeCarrierSelected()) {
374 result.push_back(dataSet.second);
377 for (
const auto& dataInterval : myDataIntervals) {
378 if (!onlySelected || dataInterval.second->isAttributeCarrierSelected()) {
379 result.push_back(dataInterval.second);
382 for (
const auto& genericDataSet : myGenericDatas) {
383 for (
const auto& genericData : genericDataSet.second) {
384 if (!onlySelected || genericData.second->isAttributeCarrierSelected()) {
385 result.push_back(genericData.second);
389 for (
const auto& meanDataSet : myMeanDatas) {
390 for (
const auto& meanData : meanDataSet.second) {
391 if (!onlySelected || meanData.second->isAttributeCarrierSelected()) {
392 result.push_back(meanData.second);
401std::vector<GNEAttributeCarrier*>
404 const auto& editModes = myNet->getViewNet()->getEditModes();
406 std::vector<GNEAttributeCarrier*> result;
414 if (ignoreCurrentSupermode) {
415 result.push_back(AC);
418 result.push_back(AC);
420 result.push_back(AC);
422 result.push_back(AC);
432 auto it = myJunctions.find(
id);
433 if (it != myJunctions.end()) {
438 throw UnknownElement(
"Attempted to retrieve non-existant junction " +
id);
445const std::map<std::string, GNEJunction*>&
451std::vector<GNEJunction*>
453 std::vector<GNEJunction*> result;
455 for (
const auto& junction : myJunctions) {
456 if (junction.second->isAttributeCarrierSelected()) {
457 result.push_back(junction.second);
467 junction->
incRef(
"GNENet::registerJunction");
470 myNumberOfNetworkElements++;
474 myNet->addGLObjectIntoGrid(junction);
492 auto junctionCopy = myJunctions;
496 for (
const auto& junction : junctionCopy) {
500 myJunctions[prefix + junction.first] = junction.second;
507 if (myJunctions.count(junction->
getID()) == 0) {
508 throw ProcessError(junction->
getTagStr() +
" with ID='" + junction->
getID() +
"' doesn't exist in AttributeCarriers.junction");
509 }
else if (myJunctions.count(newID) != 0) {
510 throw ProcessError(
"There is another " + junction->
getTagStr() +
" with new ID='" + newID +
"' in myJunctions");
515 myNet->getNetBuilder()->getNodeCont().rename(junction->
getNBNode(), newID);
519 myJunctions[junction->
getID()] = junction;
523 myNet->getSavingStatus()->requireSaveNetwork();
531 for (
const auto& junction : myJunctions) {
532 if (junction.second->isAttributeCarrierSelected()) {
542 auto it = myCrossings.find(glObject);
543 if (it != myCrossings.end()) {
555const std::unordered_map<const GUIGlObject*, GNECrossing*>&
561std::vector<GNECrossing*>
563 std::vector<GNECrossing*> result;
565 for (
const auto& crossing : myCrossings) {
566 if (crossing.second->isAttributeCarrierSelected()) {
567 result.push_back(crossing.second);
577 for (
const auto& crossing : myCrossings) {
578 if (crossing.second->isAttributeCarrierSelected()) {
588 auto it = myWalkingAreas.find(glObject);
589 if (it != myWalkingAreas.end()) {
601const std::unordered_map<const GUIGlObject*, GNEWalkingArea*>&
603 return myWalkingAreas;
607std::vector<GNEWalkingArea*>
609 std::vector<GNEWalkingArea*> result;
611 for (
const auto& walkingArea : myWalkingAreas) {
612 if (walkingArea.second->isAttributeCarrierSelected()) {
613 result.push_back(walkingArea.second);
623 for (
const auto& walkingArea : myWalkingAreas) {
624 if (walkingArea.second->isAttributeCarrierSelected()) {
634 if (myEdgeTypes.count(
id) > 0) {
635 return myEdgeTypes.at(
id);
636 }
else if (hardFail) {
638 throw UnknownElement(
"Attempted to retrieve non-existant EdgeType " +
id);
648 edgeType->
incRef(
"GNENet::registerEdgeType");
655const std::map<std::string, GNEEdgeType*>&
668 if (myEdgeTypes.count(edgeType->
getID()) == 0) {
669 throw ProcessError(edgeType->
getTagStr() +
" with ID='" + edgeType->
getID() +
"' doesn't exist in AttributeCarriers.edgeType");
670 }
else if (myEdgeTypes.count(newID) != 0) {
671 throw ProcessError(
"There is another " + edgeType->
getTagStr() +
" with new ID='" + newID +
"' in myEdgeTypes");
674 myEdgeTypes.erase(edgeType->
getID());
676 myNet->getNetBuilder()->getTypeCont().updateEdgeTypeID(edgeType->
getID(), newID);
680 myEdgeTypes[edgeType->
getID()] = edgeType;
682 myNet->getSavingStatus()->requireSaveNetwork();
690 while (myEdgeTypes.count(
"edgeType_" +
toString(counter)) != 0) {
693 return (
"edgeType_" +
toString(counter));
699 auto it = myEdges.find(
id);
700 if (it != myEdges.end()) {
705 throw UnknownElement(
"Attempted to retrieve non-existant edge " +
id);
714 if ((from ==
nullptr) || (to ==
nullptr)) {
717 std::vector<GNEEdge*> edges;
720 if (edgeTo->getToJunction() == to) {
721 edges.push_back(edgeTo);
728const std::map<std::string, GNEEdge*>&
736 std::vector<GNEEdge*> result;
738 for (
const auto& edge : myEdges) {
739 if (edge.second->isAttributeCarrierSelected()) {
740 result.push_back(edge.second);
749 edge->
incRef(
"GNENet::registerEdge");
753 myNumberOfNetworkElements++;
769 myNet->addGLObjectIntoGrid(edge);
783 auto edgeCopy = myEdges;
787 for (
const auto& edge : edgeCopy) {
791 myEdges[prefix + edge.first] = edge.second;
801 while (myEdges.count(edgePrefix +
toString(myNet->getEdgeIDCounter())) != 0) {
802 myNet->getEdgeIDCounter()++;
804 return edgePrefix +
toString(myNet->getEdgeIDCounter());
810 if (myEdges.count(edge->
getID()) == 0) {
812 }
else if (myEdges.count(newID) != 0) {
813 throw ProcessError(
"There is another " + edge->
getTagStr() +
" with new ID='" + newID +
"' in myEdges");
818 myNet->getNetBuilder()->getEdgeCont().rename(edge->
getNBEdge(), newID);
822 myEdges[edge->
getID()] = edge;
825 lane->updateConnectionIDs();
828 myNet->getSavingStatus()->requireSaveNetwork();
836 for (
const auto& edge : myEdges) {
837 if (edge.second->isAttributeCarrierSelected()) {
848 const GNEEdge* edge = retrieveEdge(edge_id,
false);
849 if (edge !=
nullptr) {
853 if (laneIt->getID() == id) {
858 if (lane ==
nullptr) {
865 if (checkVolatileChange && (myNet->getEdgesAndNumberOfLanes().count(edge_id) == 1) &&
866 myNet->getEdgesAndNumberOfLanes().at(edge_id) != (
int)edge->
getChildLanes().size()) {
871 }
else if (hardFail) {
881 auto it = myLanes.find(glObject);
882 if (it != myLanes.end()) {
894const std::unordered_map<const GUIGlObject*, GNELane*>&
902 std::vector<GNELane*> result;
904 for (
const auto& lane : myLanes) {
905 if (lane.second->isAttributeCarrierSelected()) {
906 result.push_back(lane.second);
916 for (
const auto& lane : myLanes) {
917 if (lane.second->isAttributeCarrierSelected()) {
928 for (
const auto& connection : myConnections) {
929 if (connection.second->getID() == id) {
930 return connection.second;
935 throw UnknownElement(
"Attempted to retrieve non-existant connection " +
id);
944 auto it = myConnections.find(glObject);
945 if (it != myConnections.end()) {
957const std::unordered_map<const GUIGlObject*, GNEConnection*>&
959 return myConnections;
963std::vector<GNEConnection*>
965 std::vector<GNEConnection*> result;
967 for (
const auto& connection : myConnections) {
968 if (connection.second->isAttributeCarrierSelected()) {
969 result.push_back(connection.second);
979 for (
const auto& connection : myConnections) {
980 if (connection.second->isAttributeCarrierSelected()) {
990 auto it = myInternalLanes.find(glObject);
991 if (it != myInternalLanes.end()) {
1005 auto it = myAdditionalIDs.at(type).find(
id);
1006 if (it != myAdditionalIDs.at(type).end()) {
1010 throw ProcessError(
"Attempted to retrieve non-existant additional (string)");
1019 for (
const auto& type : types) {
1020 auto it = myAdditionalIDs.at(type).find(
id);
1021 if (it != myAdditionalIDs.at(type).end()) {
1026 throw ProcessError(
"Attempted to retrieve non-existant additional (string)");
1036 for (
const auto& additionalTag : myAdditionals) {
1037 auto it = additionalTag.second.find(glObject);
1038 if (it != additionalTag.second.end()) {
1043 throw ProcessError(
"Attempted to retrieve non-existant additional (glObject)");
1069 throw ProcessError(
"Attempted to retrieve non-existant rerouter interval");
1073const std::unordered_map<SumoXMLTag, std::unordered_map<const GUIGlObject*, GNEAdditional*>, std::hash<int> >&
1075 return myAdditionals;
1079std::vector<GNEAdditional*>
1081 std::vector<GNEAdditional*> result;
1083 for (
const auto& additionalsTags : myAdditionals) {
1084 for (
const auto& additional : additionalsTags.second) {
1085 if (additional.second->isAttributeCarrierSelected()) {
1086 result.push_back(additional.second);
1094std::vector<GNEAdditional*>
1096 std::vector<GNEAdditional*> result;
1098 for (
const auto& additionalsTags : myAdditionals) {
1099 for (
const auto& additional : additionalsTags.second) {
1100 if (additional.second->getTagProperty()->isShapeElement() && additional.second->isAttributeCarrierSelected()) {
1101 result.push_back(additional.second);
1112 for (
const auto& additionalsTag : myAdditionals) {
1113 counter += (int)additionalsTag.second.size();
1122 for (
const auto& additionalsTags : myAdditionals) {
1123 for (
const auto& additional : additionalsTags.second) {
1124 myNet->removeGLObjectFromGrid(additional.second);
1128 for (
auto& additionals : myAdditionals) {
1129 additionals.second.clear();
1131 for (
auto& additionals : myAdditionalIDs) {
1132 additionals.second.clear();
1140 const auto it = myAdditionalIDs.at(tag).find(additional->
getID());
1141 if (it == myAdditionalIDs.at(tag).end()) {
1142 throw ProcessError(additional->
getTagStr() +
" with ID='" + additional->
getID() +
"' doesn't exist in AttributeCarriers.additionals");
1145 myAdditionalIDs.at(tag).erase(it);
1148 myAdditionalIDs.at(tag)[newID] = additional;
1160 prefix = neteditOptions.getString(
"busStop-prefix");
1162 prefix = neteditOptions.getString(
"trainStop-prefix");
1164 prefix = neteditOptions.getString(
"containerStop-prefix");
1166 prefix = neteditOptions.getString(
"chargingStation-prefix");
1168 prefix = neteditOptions.getString(
"parkingArea-prefix");
1170 prefix = neteditOptions.getString(
"e1Detector-prefix");
1172 prefix = neteditOptions.getString(
"e2Detector-prefix");
1174 prefix = neteditOptions.getString(
"e3Detector-prefix");
1176 prefix = neteditOptions.getString(
"e1InstantDetector-prefix");
1178 prefix = neteditOptions.getString(
"rerouter-prefix");
1180 prefix = neteditOptions.getString(
"calibrator-prefix");
1182 prefix = neteditOptions.getString(
"routeProbe-prefix");
1184 prefix = neteditOptions.getString(
"vss-prefix");
1186 prefix = neteditOptions.getString(
"tractionSubstation-prefix");
1188 prefix = neteditOptions.getString(
"overheadWire-prefix");
1190 prefix = neteditOptions.getString(
"polygon-prefix");
1192 prefix = neteditOptions.getString(
"poi-prefix");
1196 prefix = neteditOptions.getString(
"jps.walkableArea-prefix");
1198 prefix = neteditOptions.getString(
"jps.obstacle-prefix");
1223 while (retrieveAdditional(tag, prefix +
"_" +
toString(counter),
false) !=
nullptr) {
1228 return (prefix +
"_" +
toString(counter));
1235 for (
const auto& additionalsTags : myAdditionals) {
1236 for (
const auto& additional : additionalsTags.second) {
1237 if (additional.second->isAttributeCarrierSelected()) {
1248 return getNumberOfSelectedAdditionals() -
1250 getNumberOfSelectedPolygons() - getNumberOfSelectedPOIs() -
1252 getNumberOfSelectedJpsWalkableAreas() - getNumberOfSelectedJpsObstacles() -
1254 getNumberOfSelectedTAZs() -
1256 getNumberOfSelectedWires();
1264 if (poly.second->isAttributeCarrierSelected()) {
1276 if (walkableArea.second->isAttributeCarrierSelected()) {
1288 if (obstacle.second->isAttributeCarrierSelected()) {
1300 if (
POI.second->isAttributeCarrierSelected()) {
1305 if (POILane.second->isAttributeCarrierSelected()) {
1310 if (
POIGEO.second->isAttributeCarrierSelected()) {
1318std::vector<std::string>
1320 std::set<std::string> keys;
1322 for (
const auto& parameter :
POI.second->getParameters()->getParametersMap()) {
1323 keys.insert(parameter.first);
1327 for (
const auto& parameter : POILane.second->getParameters()->getParametersMap()) {
1328 keys.insert(parameter.first);
1332 for (
const auto& parameter :
POIGEO.second->getParameters()->getParametersMap()) {
1333 keys.insert(parameter.first);
1336 return std::vector<std::string>(keys.begin(), keys.end());
1344 if (
TAZ.second->isAttributeCarrierSelected()) {
1355 for (
const auto& additionalsTags : myAdditionals) {
1356 for (
const auto& additional : additionalsTags.second) {
1357 if (additional.second->isAttributeCarrierSelected() && additional.second->getTagProperty()->isWireElement()) {
1369 for (
const auto& TAZSourceSinkTag : myTAZSourceSinks) {
1370 auto it = TAZSourceSinkTag.second.find(sourceSink);
1371 if (it != TAZSourceSinkTag.second.end()) {
1376 throw ProcessError(
"Attempted to retrieve non-existant sourceSink (glObject)");
1383const std::unordered_map<SumoXMLTag, std::unordered_map<const GNEAttributeCarrier*, GNETAZSourceSink*>, std::hash<int> >&
1385 return myTAZSourceSinks;
1392 for (
const auto& sourceSinksTag : myTAZSourceSinks) {
1393 counter += (int)sourceSinksTag.second.size();
1402 for (
auto& sourceSinksTags : myTAZSourceSinks) {
1403 sourceSinksTags.second.clear();
1410 auto it = myDemandElementIDs.at(type).find(
id);
1411 if (it != myDemandElementIDs.at(type).end()) {
1415 throw ProcessError(
"Attempted to retrieve non-existant demand element (string)");
1424 for (
const auto& type : types) {
1425 auto it = myDemandElementIDs.at(type).find(
id);
1426 if (it != myDemandElementIDs.at(type).end()) {
1431 throw ProcessError(
"Attempted to retrieve non-existant demand element (string)");
1441 for (
const auto& demandElementTag : myDemandElements) {
1442 auto it = demandElementTag.second.find(glObject);
1443 if (it != demandElementTag.second.end()) {
1448 throw ProcessError(
"Attempted to retrieve non-existant demandElement (glObject)");
1455std::vector<GNEDemandElement*>
1457 std::vector<GNEDemandElement*> result;
1459 for (
const auto& demandElementTag : myDemandElements) {
1460 for (
const auto& demandElement : demandElementTag.second) {
1461 if (demandElement.second->isAttributeCarrierSelected()) {
1462 result.push_back(demandElement.second);
1470const std::unordered_map<SumoXMLTag, std::unordered_map<const GUIGlObject*, GNEDemandElement*>, std::hash<int> >&
1472 return myDemandElements;
1481 const auto tagProperty = myNet->getTagPropertiesDatabase()->getTagProperty(tag,
true);
1485 prefix = neteditOptions.getString(
"route-prefix");
1487 prefix = neteditOptions.getString(
"routeDistribution-prefix");
1489 prefix = neteditOptions.getString(
"vType-prefix");
1491 prefix = neteditOptions.getString(
"vTypeDistribution-prefix");
1493 prefix = neteditOptions.getString(
"trip-prefix");
1494 }
else if (tagProperty->isVehicle() && !tagProperty->isFlow()) {
1495 prefix = neteditOptions.getString(
"vehicle-prefix");
1496 }
else if (tagProperty->isPerson()) {
1497 if (tagProperty->isFlow()) {
1498 prefix = neteditOptions.getString(
"personflow-prefix");
1500 prefix = neteditOptions.getString(
"person-prefix");
1502 }
else if (tagProperty->isContainer()) {
1503 if (tagProperty->isFlow()) {
1504 prefix = neteditOptions.getString(
"containerflow-prefix");
1506 prefix = neteditOptions.getString(
"container-prefix");
1508 }
else if (tagProperty->isFlow()) {
1509 prefix = neteditOptions.getString(
"flow-prefix");
1534 while (retrieveDemandElement(tag, prefix +
"_" +
toString(counter),
false) !=
nullptr) {
1539 return (prefix +
"_" +
toString(counter));
1557 for (
const auto& demandElementsTags : myDemandElements) {
1558 for (
const auto& demandElement : demandElementsTags.second) {
1559 myNet->removeGLObjectFromGrid(demandElement.second);
1563 for (
auto& demandElements : myDemandElements) {
1564 demandElements.second.clear();
1566 for (
auto& demandElements : myDemandElementIDs) {
1567 demandElements.second.clear();
1575 const auto it = myDemandElementIDs.at(tag).find(demandElement->
getID());
1576 if (it == myDemandElementIDs.at(tag).end()) {
1577 throw ProcessError(demandElement->
getTagStr() +
" with ID='" + demandElement->
getID() +
"' doesn't exist in AttributeCarriers.demandElements");
1580 myDemandElementIDs.at(tag).erase(it);
1583 myDemandElementIDs.at(tag)[newID] = demandElement;
1591 auto bucket = myNet->getGNEApplicationWindow()->getFileBucketHandler()->getDefaultBucket(
FileBucket::Type::DEMAND);
1595 myDemandElementIDs.at(defaultVehicleType->
getTagProperty()->
getTag()).insert(std::make_pair(defaultVehicleType->
getID(), defaultVehicleType));
1596 defaultVehicleType->
incRef(
"GNENet::DEFAULT_VEHTYPE");
1597 bucket->addDefaultVType();
1602 myDemandElementIDs.at(defaultBikeType->
getTagProperty()->
getTag()).insert(std::make_pair(defaultBikeType->
getID(), defaultBikeType));
1604 defaultBikeType->
incRef(
"GNENet::DEFAULT_BIKETYPE_ID");
1605 bucket->addDefaultVType();
1610 myDemandElementIDs.at(defaultTaxiType->
getTagProperty()->
getTag()).insert(std::make_pair(defaultTaxiType->
getID(), defaultTaxiType));
1612 defaultTaxiType->
incRef(
"GNENet::DEFAULT_TAXITYPE_ID");
1613 bucket->addDefaultVType();
1618 myDemandElementIDs.at(defaultRailType->
getTagProperty()->
getTag()).insert(std::make_pair(defaultRailType->
getID(), defaultRailType));
1620 defaultRailType->
incRef(
"GNENet::DEFAULT_RAILTYPE_ID");
1621 bucket->addDefaultVType();
1626 myDemandElementIDs.at(defaultPersonType->
getTagProperty()->
getTag()).insert(std::make_pair(defaultPersonType->
getID(), defaultPersonType));
1628 defaultPersonType->
incRef(
"GNENet::DEFAULT_PEDTYPE_ID");
1629 bucket->addDefaultVType();
1634 myDemandElementIDs.at(defaultContainerType->
getTagProperty()->
getTag()).insert(std::make_pair(defaultContainerType->
getID(), defaultContainerType));
1636 defaultContainerType->
incRef(
"GNENet::DEFAULT_CONTAINERTYPE_ID");
1637 bucket->addDefaultVType();
1649 for (
const auto& mapValue : myDemandElements) {
1650 const auto tagProperty = myNet->getTagPropertiesDatabase()->getTagProperty(mapValue.first,
true);
1651 if ((tagProperty->planFromJunction() || tagProperty->planToJunction()) && (myDemandElements.at(tagProperty->getTag()).size() > 0)) {
1662 return myStopIndex++;
1669 for (
const auto& demandElementsTags : myDemandElements) {
1670 for (
const auto& demandElement : demandElementsTags.second) {
1671 if (demandElement.second->isAttributeCarrierSelected()) {
1685 if (route.second->isAttributeCarrierSelected()) {
1691 if (vehicle.second->getChildDemandElements().front()->isAttributeCarrierSelected()) {
1696 if (flow.second->getChildDemandElements().front()->isAttributeCarrierSelected()) {
1709 if (vehicle.second->isAttributeCarrierSelected()) {
1713 for (
const auto& trip : myDemandElements.at(
SUMO_TAG_TRIP)) {
1714 if (trip.second->isAttributeCarrierSelected()) {
1719 if (vehicle.second->isAttributeCarrierSelected()) {
1723 for (
const auto& flow : myDemandElements.at(
SUMO_TAG_FLOW)) {
1724 if (flow.second->isAttributeCarrierSelected()) {
1729 if (flow.second->isAttributeCarrierSelected()) {
1734 if (flow.second->isAttributeCarrierSelected()) {
1747 if (person.second->isAttributeCarrierSelected()) {
1752 if (personFlow.second->isAttributeCarrierSelected()) {
1765 for (
const auto& personPlan : person.second->getChildDemandElements()) {
1766 if (personPlan->getTagProperty()->isPlanPersonTrip() && personPlan->isAttributeCarrierSelected()) {
1772 for (
const auto& personPlan : personFlow.second->getChildDemandElements()) {
1773 if (personPlan->getTagProperty()->isPlanPersonTrip() && personPlan->isAttributeCarrierSelected()) {
1787 for (
const auto& personPlan : person.second->getChildDemandElements()) {
1788 if (personPlan->getTagProperty()->isPlanWalk() && personPlan->isAttributeCarrierSelected()) {
1794 for (
const auto& personPlan : personFlow.second->getChildDemandElements()) {
1795 if (personPlan->getTagProperty()->isPlanWalk() && personPlan->isAttributeCarrierSelected()) {
1809 for (
const auto& personPlan : person.second->getChildDemandElements()) {
1810 if (personPlan->getTagProperty()->isPlanRide() && personPlan->isAttributeCarrierSelected()) {
1816 for (
const auto& personPlan : personFlow.second->getChildDemandElements()) {
1817 if (personPlan->getTagProperty()->isPlanRide() && personPlan->isAttributeCarrierSelected()) {
1831 if (container.second->isAttributeCarrierSelected()) {
1836 if (containerFlow.second->isAttributeCarrierSelected()) {
1849 for (
const auto& containerPlan : container.second->getChildDemandElements()) {
1850 if (containerPlan->getTagProperty()->isPlanTransport() && containerPlan->isAttributeCarrierSelected()) {
1856 for (
const auto& containerPlan : containerFlow.second->getChildDemandElements()) {
1857 if (containerPlan->getTagProperty()->isPlanTransport() && containerPlan->isAttributeCarrierSelected()) {
1871 for (
const auto& containerPlan : container.second->getChildDemandElements()) {
1872 if (containerPlan->getTagProperty()->isPlanTranship() && containerPlan->isAttributeCarrierSelected()) {
1878 for (
const auto& containerPlan : containerFlow.second->getChildDemandElements()) {
1879 if (containerPlan->getTagProperty()->isPlanTranship() && containerPlan->isAttributeCarrierSelected()) {
1893 if (route.second->isAttributeCarrierSelected()) {
1898 for (
const auto& trip : myDemandElements.at(
SUMO_TAG_TRIP)) {
1899 for (
const auto& stop : trip.second->getChildDemandElements()) {
1900 if (stop->getTagProperty()->isVehicleStop() && stop->isAttributeCarrierSelected()) {
1906 for (
const auto& stop : vehicle.second->getChildDemandElements().front()->getChildDemandElements()) {
1907 if (stop->getTagProperty()->isVehicleStop() && stop->isAttributeCarrierSelected()) {
1912 for (
const auto& flow : myDemandElements.at(
SUMO_TAG_FLOW)) {
1913 for (
const auto& stop : flow.second->getChildDemandElements()) {
1914 if (stop->getTagProperty()->isVehicleStop() && stop->isAttributeCarrierSelected()) {
1920 for (
const auto& stop : flow.second->getChildDemandElements().front()->getChildDemandElements()) {
1921 if (stop->getTagProperty()->isVehicleStop() && stop->isAttributeCarrierSelected()) {
1928 for (
const auto& personPlan : person.second->getChildDemandElements()) {
1929 if (personPlan->getTagProperty()->isPlanStopPerson() && personPlan->isAttributeCarrierSelected()) {
1935 for (
const auto& personPlan : personFlow.second->getChildDemandElements()) {
1936 if (personPlan->getTagProperty()->isPlanStopPerson() && personPlan->isAttributeCarrierSelected()) {
1943 for (
const auto& containerPlan : container.second->getChildDemandElements()) {
1944 if (containerPlan->getTagProperty()->isPlanStopContainer() && containerPlan->isAttributeCarrierSelected()) {
1950 for (
const auto& containerPlan : containerFlow.second->getChildDemandElements()) {
1951 if (containerPlan->getTagProperty()->isPlanStopContainer() && containerPlan->isAttributeCarrierSelected()) {
1962 for (
const auto& dataSet : myDataSets) {
1963 if (dataSet.second->getID() == id) {
1964 return dataSet.second;
1968 throw ProcessError(
"Attempted to retrieve non-existant data set");
1975const std::map<const std::string, GNEDataSet*>&
1986 while (retrieveDataSet(prefix +
"_" +
toString(counter),
false) !=
nullptr) {
1989 return (prefix +
"_" +
toString(counter));
1995 if (myDataIntervals.count(AC)) {
1996 return myDataIntervals.at(AC);
1997 }
else if (hardFail) {
1998 throw ProcessError(
"Attempted to retrieve non-existant data interval");
2005const std::unordered_map<const GNEAttributeCarrier*, GNEDataInterval*>&
2007 return myDataIntervals;
2013 if (myDataIntervals.count(AC) > 0) {
2016 myDataIntervals[AC] = dataInterval;
2019 myNet->getViewNet()->getIntervalBar().markForUpdate();
2025 const auto finder = myDataIntervals.find(dataInterval);
2026 if (finder == myDataIntervals.end()) {
2029 myDataIntervals.erase(finder);
2032 myNet->getViewNet()->getInspectedElements().uninspectAC(dataInterval);
2034 myNet->getViewParent()->getInspectorFrame()->getHierarchicalElementTree()->removeCurrentEditedAttributeCarrier(dataInterval);
2036 myNet->getViewNet()->getIntervalBar().markForUpdate();
2043 for (
const auto& genericDataTag : myGenericDatas) {
2044 auto it = genericDataTag.second.find(glObject);
2045 if (it != genericDataTag.second.end()) {
2050 throw ProcessError(
"Attempted to retrieve non-existant generic (glObject)");
2057std::vector<GNEGenericData*>
2059 std::vector<GNEGenericData*> result;
2061 for (
const auto& genericDataTag : myGenericDatas) {
2062 for (
const auto& genericData : genericDataTag.second) {
2063 if (genericData.second->isAttributeCarrierSelected()) {
2064 result.push_back(genericData.second);
2072const std::unordered_map<SumoXMLTag, std::unordered_map<const GUIGlObject*, GNEGenericData*>, std::hash<int> >&
2074 return myGenericDatas;
2078std::vector<GNEGenericData*>
2081 std::vector<GNEGenericData*> genericDatas;
2083 for (
const auto& genericData : myGenericDatas.at(genericDataTag)) {
2085 if ((genericData.second->getDataIntervalParent()->getAttributeDouble(
SUMO_ATTR_BEGIN) >= begin) &&
2086 (genericData.second->getDataIntervalParent()->getAttributeDouble(
SUMO_ATTR_END) <= end)) {
2087 genericDatas.push_back(genericData.second);
2090 return genericDatas;
2098 for (
const auto& genericDataTag : myGenericDatas) {
2099 counter += (int)genericDataTag.second.size();
2110 if (genericData.second->isAttributeCarrierSelected()) {
2123 if (genericData.second->isAttributeCarrierSelected()) {
2136 if (genericData.second->isAttributeCarrierSelected()) {
2152 myNet->getViewNet()->getIntervalBar().markForUpdate();
2158 const auto finder = myGenericDatas.at(genericData->
getTagProperty()->
getTag()).find(genericData);
2165 myNet->getViewNet()->getInspectedElements().uninspectAC(genericData);
2167 myNet->getViewParent()->getInspectorFrame()->getHierarchicalElementTree()->removeCurrentEditedAttributeCarrier(genericData);
2169 myNet->getDataPathManager()->removePath(genericData);
2171 myNet->getViewNet()->getIntervalBar().markForUpdate();
2175std::set<std::string>
2178 std::set<std::string> attributesSolution;
2180 std::vector<GNEGenericData*> genericDatas;
2182 for (
const auto& interval : myDataIntervals) {
2186 for (
const auto& genericData : interval.second->getGenericDataChildren()) {
2187 if (genericDataTag.empty() || (genericData->getTagProperty()->getTagStr() == genericDataTag)) {
2188 genericDatas.push_back(genericData);
2194 for (
const auto& genericData : genericDatas) {
2195 for (
const auto& attribute : genericData->getParametersMap()) {
2196 attributesSolution.insert(attribute.first);
2199 return attributesSolution;
2203std::set<std::string>
2205 const std::string& beginStr,
const std::string& endStr)
const {
2207 std::set<std::string> attributesSolution;
2209 std::vector<GNEDataSet*> dataSets;
2210 std::vector<GNEDataInterval*> dataIntervals;
2212 GNEDataSet* retrievedDataSet = retrieveDataSet(dataSetID,
false);
2214 if (dataSetID.empty()) {
2216 dataSets.reserve(myDataSets.size());
2217 for (
const auto& dataSet : myDataSets) {
2218 dataSets.push_back(dataSet.second);
2220 }
else if (retrievedDataSet) {
2221 dataSets.push_back(retrievedDataSet);
2223 return attributesSolution;
2226 int numberOfIntervals = 0;
2227 for (
const auto& dataSet : dataSets) {
2228 numberOfIntervals += (int)dataSet->getDataIntervalChildren().size();
2231 dataIntervals.reserve(numberOfIntervals);
2233 for (
const auto& dataSet : dataSets) {
2234 for (
const auto& dataInterval : dataSet->getDataIntervalChildren()) {
2236 if (beginStr.empty() && endStr.empty()) {
2237 dataIntervals.push_back(dataInterval.second);
2238 }
else if (endStr.empty()) {
2240 const double begin = GNEAttributeCarrier::parse<double>(beginStr);
2241 if (dataInterval.second->getAttributeDouble(
SUMO_ATTR_BEGIN) >= begin) {
2242 dataIntervals.push_back(dataInterval.second);
2244 }
else if (beginStr.empty()) {
2246 const double end = GNEAttributeCarrier::parse<double>(endStr);
2247 if (dataInterval.second->getAttributeDouble(
SUMO_ATTR_END) <= end) {
2248 dataIntervals.push_back(dataInterval.second);
2252 const double begin = GNEAttributeCarrier::parse<double>(beginStr);
2253 const double end = GNEAttributeCarrier::parse<double>(endStr);
2254 if ((dataInterval.second->getAttributeDouble(
SUMO_ATTR_BEGIN) >= begin) &&
2255 (dataInterval.second->getAttributeDouble(
SUMO_ATTR_END) <= end)) {
2256 dataIntervals.push_back(dataInterval.second);
2262 for (
const auto& dataInterval : dataIntervals) {
2263 for (
const auto& genericData : dataInterval->getGenericDataChildren()) {
2265 if (genericDataTag.empty() || (genericData->getTagProperty()->getTagStr() == genericDataTag)) {
2266 for (
const auto& attribute : genericData->getParametersMap()) {
2267 attributesSolution.insert(attribute.first);
2272 return attributesSolution;
2278 for (
const auto& meanData : myMeanDatas.at(type)) {
2279 if (meanData.second->getID() == id) {
2280 return meanData.second;
2284 throw ProcessError(
"Attempted to retrieve non-existant meanData (string)");
2291const std::unordered_map<SumoXMLTag, std::map<const std::string, GNEMeanData*>, std::hash<int> >&
2299 return myNumberOfMeanDataElements;
2306 for (
auto& meanDatas : myMeanDatas) {
2307 meanDatas.second.clear();
2315 const auto it = myMeanDatas.at(tag).find(meanData->
getID());
2316 if (it == myMeanDatas.at(tag).end()) {
2317 throw ProcessError(meanData->
getTagStr() +
" with ID='" + meanData->
getID() +
"' doesn't exist in AttributeCarriers.meanDatas");
2320 myMeanDatas.at(tag).erase(it);
2321 myMeanDatas.at(tag)[newID] = meanData;
2333 prefix = neteditOptions.getString(
"meanDataEdge-prefix");
2335 prefix = neteditOptions.getString(
"meanDataLane-prefix");
2338 while (retrieveMeanData(tag, prefix +
"_" +
toString(counter),
false) !=
nullptr) {
2341 return (prefix +
"_" +
toString(counter));
2347 myNet->getNetBuilder()->getNodeCont().insert(junction->
getNBNode());
2348 registerJunction(junction);
2355 myNet->getViewNet()->getInspectedElements().uninspectAC(junction);
2357 myNet->getViewParent()->getInspectorFrame()->getHierarchicalElementTree()->removeCurrentEditedAttributeCarrier(junction);
2359 myNet->removeGLObjectFromGrid(junction);
2361 myNumberOfNetworkElements--;
2362 myNet->getNetBuilder()->getNodeCont().extract(junction->
getNBNode());
2363 junction->
decRef(
"GNENet::deleteSingleJunction");
2371 const auto& createEdgeFrame = myNet->getViewParent()->getCreateEdgeFrame();
2374 myNumberOfNetworkElements++;
2376 if (myNet->getViewParent()->getCreateEdgeFrame()->shown()) {
2377 myNet->getViewParent()->getCreateEdgeFrame()->getEdgeTypeSelector()->refreshEdgeTypeSelector();
2380 createEdgeFrame->getEdgeTypeSelector()->setCurrentEdgeType(edgeType);
2387 const auto& createEdgeFrame = myNet->getViewParent()->getCreateEdgeFrame();
2389 myNet->getViewNet()->getInspectedElements().uninspectAC(edgeType);
2391 myNet->getViewParent()->getInspectorFrame()->getHierarchicalElementTree()->removeCurrentEditedAttributeCarrier(edgeType);
2394 myNumberOfNetworkElements--;
2396 if (createEdgeFrame->getEdgeTypeSelector()->getEdgeTypeSelected() == edgeType) {
2397 createEdgeFrame->getEdgeTypeSelector()->clearEdgeTypeSelected();
2400 createEdgeFrame->getEdgeTypeSelector()->refreshEdgeTypeSelector();
2407 myNet->getNetBuilder()->getEdgeCont().insert(nbe);
2419 myNet->getViewNet()->getInspectedElements().uninspectAC(edge);
2421 myNet->getViewParent()->getInspectorFrame()->getHierarchicalElementTree()->removeCurrentEditedAttributeCarrier(edge);
2423 myNet->removeGLObjectFromGrid(edge);
2425 myNumberOfNetworkElements--;
2431 myNet->getNetBuilder()->getEdgeCont().extract(myNet->getNetBuilder()->getDistrictCont(), edge->
getNBEdge());
2432 edge->
decRef(
"GNENet::deleteSingleEdge");
2455 myNumberOfNetworkElements++;
2463 if (finder == myLanes.end()) {
2466 myLanes.erase(finder);
2467 myNumberOfNetworkElements--;
2469 myNet->getViewNet()->getInspectedElements().uninspectAC(lane);
2471 myNet->getViewParent()->getInspectorFrame()->getHierarchicalElementTree()->removeCurrentEditedAttributeCarrier(lane);
2482 myNumberOfNetworkElements++;
2489 const auto finder = myCrossings.find(crossing->
getGUIGlObject());
2490 if (finder == myCrossings.end()) {
2493 myCrossings.erase(finder);
2494 myNumberOfNetworkElements--;
2496 if (myNet->getViewNet()) {
2497 myNet->getViewNet()->getInspectedElements().uninspectAC(crossing);
2499 myNet->getViewParent()->getInspectorFrame()->getHierarchicalElementTree()->removeCurrentEditedAttributeCarrier(crossing);
2511 myNumberOfNetworkElements++;
2518 const auto finder = myWalkingAreas.find(walkingArea->
getGUIGlObject());
2519 if (finder == myWalkingAreas.end()) {
2522 myWalkingAreas.erase(finder);
2523 myNumberOfNetworkElements--;
2525 myNet->getViewNet()->getInspectedElements().uninspectAC(walkingArea);
2527 myNet->getViewParent()->getInspectorFrame()->getHierarchicalElementTree()->removeCurrentEditedAttributeCarrier(walkingArea);
2538 myNumberOfNetworkElements++;
2545 const auto finder = myConnections.find(connection->
getGUIGlObject());
2546 if (finder == myConnections.end()) {
2549 myConnections.erase(finder);
2550 myNumberOfNetworkElements--;
2552 myNet->getViewNet()->getInspectedElements().uninspectAC(connection);
2554 myNet->getViewParent()->getInspectorFrame()->getHierarchicalElementTree()->removeCurrentEditedAttributeCarrier(connection);
2565 myNumberOfNetworkElements++;
2572 const auto finder = myInternalLanes.find(internalLane->
getGUIGlObject());
2573 if (finder == myInternalLanes.end()) {
2576 myInternalLanes.erase(finder);
2577 myNumberOfNetworkElements--;
2585 if (myAdditionals.at(tag).count(additional) > 0) {
2589 myAdditionals.at(tag)[additional->
getGUIGlObject()] = additional;
2591 myAdditionalIDs.at(tag)[additional->
getID()] = additional;
2593 myNumberOfNetworkElements++;
2595 myNet->getGNEApplicationWindow()->getFileBucketHandler()->registerAC(additional);
2597 myNet->addGLObjectIntoGrid(additional);
2599 if (myNet->isUpdateGeometryEnabled()) {
2603 myNet->getSavingStatus()->requireSaveAdditionals();
2612 auto itFind = myAdditionals.at(tag).find(additional->
getGUIGlObject());
2614 if (itFind == myAdditionals.at(tag).end()) {
2618 myAdditionals.at(tag).erase(itFind);
2620 myAdditionalIDs.at(tag).erase(myAdditionalIDs.at(tag).find(additional->
getID()));
2622 myNumberOfNetworkElements--;
2624 myNet->getGNEApplicationWindow()->getFileBucketHandler()->unregisterAC(additional);
2626 myNet->getViewNet()->getInspectedElements().uninspectAC(additional);
2628 myNet->getViewParent()->getInspectorFrame()->getHierarchicalElementTree()->removeCurrentEditedAttributeCarrier(additional);
2630 myNet->removeGLObjectFromGrid(additional);
2632 myNet->getNetworkPathManager()->removePath(additional);
2634 myNet->getSavingStatus()->requireSaveAdditionals();
2644 if (myTAZSourceSinks.at(sourceSinkTag).count(sourceSink) > 0) {
2647 myTAZSourceSinks.at(sourceSinkTag)[sourceSink] = sourceSink;
2648 myNumberOfNetworkElements++;
2650 myNet->getGNEApplicationWindow()->getFileBucketHandler()->registerAC(sourceSink);
2652 myNet->getSavingStatus()->requireSaveAdditionals();
2661 auto itFind = myTAZSourceSinks.at(tag).find(sourceSink);
2663 if (itFind == myTAZSourceSinks.at(tag).end()) {
2667 myTAZSourceSinks.at(tag).erase(itFind);
2668 myNumberOfNetworkElements--;
2670 myNet->getGNEApplicationWindow()->getFileBucketHandler()->unregisterAC(sourceSink);
2672 myNet->getViewNet()->getInspectedElements().uninspectAC(sourceSink);
2674 myNet->getViewParent()->getInspectorFrame()->getHierarchicalElementTree()->removeCurrentEditedAttributeCarrier(sourceSink);
2676 myNet->getSavingStatus()->requireSaveAdditionals();
2684 if (myDemandElements.at(tag).count(demandElement) > 0) {
2687 myDemandElements.at(tag)[demandElement->
getGUIGlObject()] = demandElement;
2689 myDemandElementIDs.at(tag)[demandElement->
getID()] = demandElement;
2691 myNumberOfDemandElements++;
2693 myNet->getGNEApplicationWindow()->getFileBucketHandler()->registerAC(demandElement);
2695 myNet->addGLObjectIntoGrid(demandElement);
2697 if (myNet->isUpdateGeometryEnabled()) {
2701 if (myNet->getViewNet()->getEditModes().isCurrentSupermodeDemand()) {
2707 myNet->getSavingStatus()->requireSaveDemandElements();
2715 auto viewParent = myNet->getViewParent();
2717 auto itFind = myDemandElements.at(tag).find(demandElement->
getGUIGlObject());
2719 if (itFind == myDemandElements.at(tag).end()) {
2723 myDemandElements.at(tag).erase(itFind);
2725 myDemandElementIDs.at(tag).erase(myDemandElementIDs.at(tag).find(demandElement->
getID()));
2727 myNumberOfDemandElements--;
2729 myNet->getGNEApplicationWindow()->getFileBucketHandler()->unregisterAC(demandElement);
2731 myNet->removeGLObjectFromGrid(demandElement);
2733 myNet->getViewNet()->getInspectedElements().uninspectAC(demandElement);
2736 if (myNet->getViewNet()->getLastCreatedRoute() == demandElement) {
2737 myNet->getViewNet()->setLastCreatedRoute(
nullptr);
2740 myNet->getDemandPathManager()->removePath(demandElement);
2744 viewParent->getInspectorFrame()->getHierarchicalElementTree()->removeCurrentEditedAttributeCarrier(demandElement);
2745 viewParent->getPersonPlanFrame()->getPersonHierarchy()->removeCurrentEditedAttributeCarrier(demandElement);
2746 viewParent->getContainerPlanFrame()->getContainerHierarchy()->removeCurrentEditedAttributeCarrier(demandElement);
2748 if (viewParent->getRouteDistributionFrame()->getDistributionSelector()->getCurrentDistribution() == demandElement) {
2749 viewParent->getRouteDistributionFrame()->getDistributionSelector()->setDistribution(
nullptr);
2751 if (viewParent->getTypeDistributionFrame()->getDistributionSelector()->getCurrentDistribution() == demandElement) {
2752 viewParent->getTypeDistributionFrame()->getDistributionSelector()->setDistribution(
nullptr);
2756 viewParent->getTypeDistributionFrame()->getDistributionValuesEditor()->refreshRows();
2759 viewParent->getRouteDistributionFrame()->getDistributionValuesEditor()->refreshRows();
2763 myNet->getSavingStatus()->requireSaveDemandElements();
2770 if (myDataSets.count(dataSet->
getID()) > 0) {
2773 myDataSets[dataSet->
getID()] = dataSet;
2774 myNumberOfDataElements++;
2776 myNet->getGNEApplicationWindow()->getFileBucketHandler()->registerAC(dataSet);
2778 myNet->getSavingStatus()->requireSaveDataElements();
2780 myNet->getViewNet()->getIntervalBar().markForUpdate();
2787 const auto finder = myDataSets.find(dataSet->
getID());
2788 if (finder == myDataSets.end()) {
2791 myDataSets.erase(finder);
2792 myNumberOfDataElements--;
2794 myNet->getGNEApplicationWindow()->getFileBucketHandler()->unregisterAC(dataSet);
2796 myNet->getViewNet()->getInspectedElements().uninspectAC(dataSet);
2798 myNet->getViewParent()->getInspectorFrame()->getHierarchicalElementTree()->removeCurrentEditedAttributeCarrier(dataSet);
2800 myNet->getSavingStatus()->requireSaveDataElements();
2802 myNet->getViewNet()->getIntervalBar().markForUpdate();
2813 myNumberOfMeanDataElements++;
2815 myNet->getGNEApplicationWindow()->getFileBucketHandler()->registerAC(meanData);
2817 myNet->getSavingStatus()->requireSaveMeanDatas();
2832 myNumberOfMeanDataElements--;
2834 myNet->getGNEApplicationWindow()->getFileBucketHandler()->unregisterAC(meanData);
2836 myNet->getViewNet()->getInspectedElements().uninspectAC(meanData);
2838 myNet->getViewParent()->getInspectorFrame()->getHierarchicalElementTree()->removeCurrentEditedAttributeCarrier(meanData);
2840 myNet->removeGLObjectFromGrid(meanData);
2842 myNet->getSavingStatus()->requireSaveMeanDatas();
2849 if (myNet->getViewNet()->getEditModes().isCurrentSupermodeDemand()) {
2851 switch (myNet->getViewNet()->getEditModes().demandEditMode) {
2853 if (tagProperty->
isType()) {
2854 myNet->getViewParent()->getVehicleFrame()->getTypeSelector()->refreshDemandElementSelector();
2858 if (tagProperty->
isType()) {
2859 myNet->getViewParent()->getTypeFrame()->getTypeSelector()->refreshTypeSelector(
true);
2863 if (tagProperty->
isType()) {
2864 myNet->getViewParent()->getTypeDistributionFrame()->getDistributionSelector()->refreshDistributionSelector();
2869 myNet->getViewParent()->getRouteDistributionFrame()->getDistributionSelector()->refreshDistributionSelector();
2873 if (tagProperty->
isType()) {
2874 myNet->getViewParent()->getPersonFrame()->getTypeSelector()->refreshDemandElementSelector();
2879 myNet->getViewParent()->getPersonPlanFrame()->getPersonSelector()->refreshDemandElementSelector();
2883 if (tagProperty->
isType()) {
2884 myNet->getViewParent()->getContainerFrame()->getTypeSelector()->refreshDemandElementSelector();
2889 myNet->getViewParent()->getContainerPlanFrame()->getContainerSelector()->refreshDemandElementSelector();
2893 myNet->getViewParent()->getStopFrame()->getStopParentSelector()->refreshDemandElementSelector();
2907 for (
const auto& junction : myJunctions) {
2908 ACs.push_back(junction.second);
2912 for (
const auto& edge : myEdges) {
2913 ACs.push_back(edge.second);
2917 for (
const auto& lane : myLanes) {
2918 ACs.push_back(lane.second);
2922 for (
const auto& connection : myConnections) {
2923 ACs.push_back(connection.second);
2927 for (
const auto& crossing : myCrossings) {
2928 ACs.push_back(crossing.second);
2932 for (
const auto& walkingArea : myWalkingAreas) {
2933 ACs.push_back(walkingArea.second);
2938 for (
const auto& additionalTag : myAdditionals) {
2939 if (additionalTag.first == tag->
getTag()) {
2940 for (
const auto& additional : additionalTag.second) {
2941 ACs.push_back(additional.second);
2948 for (
const auto& demandElementTag : myDemandElements) {
2949 if (demandElementTag.first == tag->
getTag()) {
2950 for (
const auto& demandElemet : demandElementTag.second) {
2951 ACs.push_back(demandElemet.second);
2959 for (
const auto& dataSet : myDataSets) {
2960 ACs.push_back(dataSet.second);
2964 for (
const auto& dataInterval : myDataIntervals) {
2965 ACs.push_back(dataInterval.second);
2968 for (
const auto& genericDataTag : myGenericDatas) {
2969 if (genericDataTag.first == tag->
getTag()) {
2970 for (
const auto& genericData : genericDataTag.second) {
2971 ACs.push_back(genericData.second);
2975 for (
const auto& meanDataTag : myMeanDatas) {
2976 if (meanDataTag.first == tag->
getTag()) {
2977 for (
const auto& meanData : meanDataTag.second) {
2978 ACs.push_back(meanData.second);
2985 retrieveAttributeCarriersRecursively(child, ACs);
3066 for (
const auto vehicle : vehicles) {
3067 myTemplates[vehicle->getTag()] =
new GNEVehicle(vehicle->getTag(), myNet);
3071 for (
const auto person : persons) {
3072 myTemplates[person->getTag()] =
new GNEPerson(person->getTag(), myNet);
3076 for (
const auto container : containers) {
3077 myTemplates[container->getTag()] =
new GNEContainer(container->getTag(), myNet);
3081 for (
const auto stopAndWaypoint : stopAndWaypoints) {
3082 myTemplates[stopAndWaypoint->getTag()] =
new GNEStop(stopAndWaypoint->getTag(), myNet);
3086 for (
const auto personTrip : personTrips) {
3087 myTemplates[personTrip->getTag()] =
new GNEPersonTrip(personTrip->getTag(), myNet);
3091 for (
const auto walk : walks) {
3092 myTemplates[walk->getTag()] =
new GNEWalk(walk->getTag(), myNet);
3096 for (
const auto ride : rides) {
3097 myTemplates[ride->getTag()] =
new GNERide(ride->getTag(), myNet);
3101 for (
const auto stopPerson : stopPersons) {
3102 myTemplates[stopPerson->getTag()] =
new GNEStopPlan(stopPerson->getTag(), myNet);
3106 for (
const auto transport : transports) {
3107 myTemplates[transport->getTag()] =
new GNETransport(transport->getTag(), myNet);
3111 for (
const auto tranship : tranships) {
3112 myTemplates[tranship->getTag()] =
new GNETranship(tranship->getTag(), myNet);
3116 for (
const auto stopContainer : stopContainers) {
3117 myTemplates[stopContainer->getTag()] =
new GNEStopPlan(stopContainer->getTag(), myNet);
3126 for (
const auto& AC : myTemplates) {
3127 AC.second->resetDefaultValues(
false);
3130 fillPlanTemplates();
3135 for (
auto& AC : myTemplates) {
3141std::map<SumoXMLTag, GNEAttributeCarrier*>
3149 if (myTemplates.count(tag) > 0) {
3150 return myTemplates.at(tag);
3159 for (
const auto& templateAC : myTemplates) {
3160 if (templateAC.second->getTagProperty()->getSelectorText() == selectorText) {
3161 return templateAC.second;
3174const std::vector<std::pair<GNETagProperties*, GNEDemandElement*>>&
3176 return myPlanTemplates.at(tag);
3325 mySumoConfigSaved =
false;
3331 mySumoConfigSaved =
true;
3337 return mySumoConfigSaved;
3343 myNeteditConfigSaved =
false;
3349 myNeteditConfigSaved =
true;
3355 return myNeteditConfigSaved;
3361 myNetworkSaved =
false;
3363 myNeteditConfigSaved =
false;
3364 mySumoConfigSaved =
false;
3370 myNetworkSaved =
true;
3376 return myNetworkSaved;
3400 myEdgeTypeSaved =
false;
3406 myEdgeTypeSaved =
true;
3412 return myEdgeTypeSaved;
3418 myAdditionalSaved =
false;
3420 myNeteditConfigSaved =
false;
3421 mySumoConfigSaved =
false;
3427 myAdditionalSaved =
true;
3433 return myAdditionalSaved;
3439 myDemandElementSaved =
false;
3441 myNeteditConfigSaved =
false;
3442 mySumoConfigSaved =
false;
3448 myDemandElementSaved =
true;
3454 return myDemandElementSaved;
3460 myDataElementSaved =
false;
3462 myNeteditConfigSaved =
false;
3463 mySumoConfigSaved =
false;
3469 myDataElementSaved =
true;
3475 return myDataElementSaved;
3481 myMeanDataElementSaved =
false;
3483 myNeteditConfigSaved =
false;
3484 mySumoConfigSaved =
false;
3490 myMeanDataElementSaved =
true;
3496 return myMeanDataElementSaved;
3502 auto GNEApp = myNet->getGNEApplicationWindow();
3510 }
else if (myNetworkSaved) {
3534 auto GNEApp = myNet->getGNEApplicationWindow();
3542 }
else if (myAdditionalSaved) {
3566 auto GNEApp = myNet->getGNEApplicationWindow();
3574 }
else if (myDemandElementSaved) {
3598 auto GNEApp = myNet->getGNEApplicationWindow();
3606 }
else if (myDataElementSaved) {
3630 auto GNEApp = myNet->getGNEApplicationWindow();
3638 }
else if (myMeanDataElementSaved) {
3666 myReplaced(replaced),
3677 myTllcont.replaceRemoved(myBy, -1, myReplaced, -1,
true);
3684 myTllcont.replaceRemoved(myReplaced, -1, myBy, -1,
true);
3690 return TL(
"Redo replace in TLS");
3696 return TL(
"Undo replace in TLS");
3702 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_ROUTEDISTRIBUTION
Mode for editing route distributions.
@ 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.
@ GLO_TRANSHIP
a container tranship
@ GLO_CONTAINER_STOP
a containerStop
@ GLO_PERSONTRIP
a person trip
@ GLO_TRANSPORT
a container transport
GUISelectedStorage gSelected
A global holder of selected objects.
std::string time2string(SUMOTime t, bool humanReadable)
convert SUMOTime to string (independently of global format setting)
const long long int VTYPEPARS_VEHICLECLASS_SET
const std::string DEFAULT_TAXITYPE_ID
const std::string DEFAULT_RAILTYPE_ID
const std::string DEFAULT_PEDTYPE_ID
const std::string DEFAULT_VTYPE_ID
const std::string DEFAULT_CONTAINERTYPE_ID
@ 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_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
@ GNE_TAG_PERSONTRIP_EDGE_EDGE
@ GNE_TAG_VTYPEREF
reference to a vType (used in VType distributions)
@ SUMO_TAG_INTERVAL
an aggreagated-output interval
@ SUMO_TAG_CLOSING_REROUTE
reroute of type closing
@ 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_ACCESS
An access point for a train stop.
@ SUMO_TAG_NOTHING
invalid tag, must be the last one
@ GNE_TAG_TRANSHIP_EDGE_EDGE
@ SUMO_TAG_CONTAINER_STOP
A container stop.
@ SUMO_TAG_PARKING_AREA_REROUTE
entry for an alternative parking zone
@ SUMO_TAG_ROOTFILE
root file
@ SUMO_TAG_TAZSINK
a sink within a district (connection road)
@ GNE_TAG_STOPCONTAINER_EDGE
@ SUMO_TAG_BUS_STOP
A bus stop.
@ SUMO_TAG_POI
begin/end of the description of a Point of interest
@ SUMO_TAG_STOP
stop for vehicles
@ SUMO_TAG_MEANDATA_LANE
a lane based mean data detector
@ SUMO_TAG_STEP
trigger: a step description
@ 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_VSS_SYMBOL
VSS Symbol.
@ 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_TRANSPORT_EDGE_EDGE
@ SUMO_TAG_ROUTE_PROB_REROUTE
probability of route of a reroute
@ GNE_TAG_CALIBRATOR_LANE
A calibrator placed over lane.
@ SUMO_TAG_DET_ENTRY
an e3 entry point
@ SUMO_TAG_PARKING_SPACE
A parking space for a single vehicle within a parking area.
@ SUMO_TAG_JUNCTION
begin/end of the description of a junction
@ SUMO_TAG_CROSSING
crossing between edges for pedestrians
@ SUMO_TAG_ROUTE
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_CALIBRATOR_FLOW
a flow definition within in Calibrator
@ SUMO_TAG_DEST_PROB_REROUTE
probability of destination of a reroute
@ GNE_TAG_POILANE
Point of interest over Lane.
@ GNE_TAG_JPS_OBSTACLE
polygon used for draw juPedSim obstacles
@ SUMO_TAG_DET_EXIT
an e3 exit point
@ SUMO_TAG_TYPE
type (edge)
@ SUMO_TAG_VAPORIZER
vaporizer of vehicles
@ SUMO_TAG_LANE_AREA_DETECTOR
alternative tag for e2 detector
@ GNE_TAG_REROUTER_SYMBOL
Rerouter Symbol.
@ SUMO_TAG_TAZREL
a relation between two TAZs
@ SUMO_TAG_TAZSOURCE
a source within a district (connection road)
@ SUMO_TAG_CLOSING_LANE_REROUTE
lane of a reroute of type closing
@ GNE_TAG_ROUTEREF
virtual element used to reference routes with distributions
@ GNE_TAG_ROUTE_EMBEDDED
embedded route
@ SUMO_TAG_INDUCTION_LOOP
alternative tag for e1 detector
@ GNE_TAG_JPS_WALKABLEAREA
polygon used for draw juPedSim walkable areas
@ SUMO_TAG_CALIBRATOR
A calibrator placed over edge.
@ SUMO_TAG_ENTRY_EXIT_DETECTOR
alternative tag for e3 detector
@ SUMO_TAG_VSS
A variable speed sign.
@ GNE_TAG_STOPPERSON_EDGE
@ 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
@ SUMO_ATTR_END
weights: time range end
std::string toString(const T &t, std::streamsize accuracy=gPrecision)
const GUIGeometry & getAdditionalGeometry() const
obtain additional geometry
GUIGlObject * getGUIGlObject() override
get GUIGlObject associated with this additional
virtual Position getPositionInView() const =0
Returns position of additional in view.
bool isAttributeCarrierSelected() const
check if attribute carrier is selected
const std::string getID() const override
get ID (all Attribute Carriers have one)
const std::string & getTagStr() const
get tag assigned to this object in string format
const GNETagProperties * getTagProperty() const
get tagProperty associated with this Attribute Carrier
void unmarkForDrawingFront()
unmark for drawing front
virtual void updateGeometry()=0
update pre-computed geometry information
virtual GUIGlObject * getGUIGlObject()=0
get GUIGlObject associated with this AttributeCarrier
static GNEBusStop * buildTrainStop(GNENet *net)
default constructor
static GNEBusStop * buildBusStop(GNENet *net)
default constructor
the function-object for an editing operation (abstract base)
GUIGlObject * getGUIGlObject() override
get GUIGlObject associated with this GNEDemandElement
Result getResult() const
get result to indicate if this dialog was closed accepting or rejecting changes
Result
list of possible results when closing the dialog
An Element which don't belong to GNENet but has influence in the simulation.
void updateCenteringBoundary(const bool updateGrid)
update centering boundary (implies change in RTREE)
void setResponsible(bool newVal)
set responsibility for deleting internal structures
NBEdge * getNBEdge() const
returns the internal NBEdge
void setEdgeID(const std::string &newID)
set edge ID
GNEJunction * getFromJunction() const
get from Junction (only used to increase readability)
Boundary getCenteringBoundary() const override
Returns the boundary to which the view shall be centered in order to show the object.
GNEJunction * getToJunction() const
get from Junction (only used to increase readability)
An Element which don't belong to GNENet but has influence in the simulation.
GUIGlObject * getGUIGlObject() override
get GUIGlObject associated with this genericData
const GNEHierarchicalContainerChildren< GNELane * > & getChildLanes() const
get child lanes
const GNEHierarchicalContainerChildren< 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() override
update pre-computed geometry information (including crossings)
Boundary getCenteringBoundary() const override
Returns the boundary to which the view shall be centered in order to show the object.
void removeOutgoingGNEEdge(GNEEdge *edge)
remove outgoing GNEEdge
void removeIncomingGNEEdge(GNEEdge *edge)
remove incoming GNEEdge
void addIncomingGNEEdge(GNEEdge *edge)
add incoming GNEEdge
void updateCenteringBoundary(const bool updateGrid)
update centering boundary (implies change in RTREE)
const std::vector< GNEEdge * > & getGNEOutgoingEdges() const
Returns incoming GNEEdges.
NBNode * getNBNode() const
Return net build node.
void addOutgoingGNEEdge(GNEEdge *edge)
add outgoing GNEEdge
int getIndex() const
returns the index of the lane
std::map< SumoXMLTag, GNEAttributeCarrier * > getACTemplates() const
get all AC templates
void buildTemplates()
build templates
ACTemplate()=delete
Invalidated default constructor.
GNEAttributeCarrier * getTemplateAC(const SumoXMLTag tag) const
get template AC by tag
const std::vector< std::pair< GNETagProperties *, GNEDemandElement * > > & getPlanTemplates(SumoXMLTag tag) const
get plan templates
void fillPlanTemplates()
fill plan templates
GNEEdgeType * getDefaultEdgeType() const
get default edge type
std::vector< GNEEdge * > retrieveEdges(GNEJunction *from, GNEJunction *to) const
get all edges by from and to GNEJunction
const std::unordered_map< SumoXMLTag, std::unordered_map< const GUIGlObject *, GNEDemandElement * >, std::hash< int > > & getDemandElements() const
get demand elements
GNETAZSourceSink * retrieveTAZSourceSink(const GNEAttributeCarrier *sourceSink, bool hardFail=true) const
Returns the named sourceSink.
void insertWalkingArea(GNEWalkingArea *walkingArea)
insert walkingArea in container
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::unordered_map< const GUIGlObject *, GNEConnection * > & getConnections() const
get connections
int getNumberOfSelectedJpsObstacles() const
get number of selected obstacles
int getNumberOfSelectedConnections() const
get number of selected connections
void deleteDataSet(GNEDataSet *dataSet)
delete data set of container
std::unordered_map< SumoXMLTag, std::unordered_map< const GUIGlObject *, GNEGenericData * >, std::hash< int > > myGenericDatas
map with the tag and pointer to all generic datas
void addPrefixToJunctions(const std::string &prefix)
add prefix to all junctions
void insertLane(GNELane *lane)
insert lane in container
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 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
void insertDataSet(GNEDataSet *dataSet)
Insert a data set in container.
int getNumberOfSelectedRides() const
get number of selected rides
void clearDemandElements()
clear demand elements
void clearTAZSourceSinks()
clear sourceSinks
const std::unordered_map< const GUIGlObject *, GNECrossing * > & getCrossings() const
get crossings
void insertGenericData(GNEGenericData *genericData)
insert generic data in container
GNEEdge * registerEdge(GNEEdge *edge)
registers an edge with containers
void deleteDemandElement(GNEDemandElement *demandElement, const bool updateFrames)
delete demand element of container
void insertDataInterval(const GNEAttributeCarrier *AC, GNEDataInterval *dataInterval)
insert data interval in container
const std::unordered_map< SumoXMLTag, std::unordered_map< const GUIGlObject *, GNEGenericData * >, std::hash< int > > & getGenericDatas() const
get all generic datas
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
GNECrossing * retrieveCrossing(const GUIGlObject *glObject, bool hardFail=true) const
get Crossing by AC
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
AttributeCarriers()=delete
Invalidated default constructor.
void clearEdgeTypes()
clear edgeTypes
std::string generateEdgeID() const
generate edge ID
int getNumberOfSelectedTranships() const
get number of selected tranships
const std::unordered_map< SumoXMLTag, std::unordered_map< const GNEAttributeCarrier *, GNETAZSourceSink * >, std::hash< int > > & getTAZSourceSinks() const
get sourceSinks
int getNumberOfSelectedVehicles() const
get number of selected vehicles
int getNumberOfSelectedWalks() const
get number of selected walks
void deleteEdgeType(GNEEdgeType *edgeType)
delete edge type from container
int getNumberOfSelectedJpsWalkableAreas() const
get number of selected walkable areas
void deleteInternalLane(GNEInternalLane *internalLane)
delete internalLane from container
void deleteConnection(GNEConnection *connection)
delete connection from container
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
void insertInternalLane(GNEInternalLane *internalLane)
insert internalLane in container
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
GNENet * myNet
pointer to net
void deleteSingleJunction(GNEJunction *junction)
delete junction from container
GNEMeanData * retrieveMeanData(SumoXMLTag type, const std::string &id, bool hardFail=true) const
Returns the named meanData.
GNEJunction * registerJunction(GNEJunction *junction)
registers a junction in containers
const std::unordered_map< SumoXMLTag, std::map< const std::string, GNEMeanData * >, std::hash< int > > & getMeanDatas() const
get meanDatas
int getNumberOfSelectedWalkingAreas() const
get number of selected walkingAreas
GNEWalkingArea * retrieveWalkingArea(const GUIGlObject *glObject, bool hardFail=true) const
get WalkingArea by GlObject
GNEJunction * retrieveJunction(const std::string &id, bool hardFail=true) const
get junction by id
const std::map< const std::string, GNEDataSet * > & getDataSets() const
get demand elements
std::vector< GNEDemandElement * > getSelectedDemandElements() const
get selected demand elements
void updateJunctionID(GNEJunction *junction, const std::string &newID)
update junction ID in container
void deleteGenericData(GNEGenericData *genericData)
delete generic data of container
~AttributeCarriers()
destructor
void insertCrossing(GNECrossing *crossing)
insert crossing in container
int getNumberOfSelectedWires() const
get number of selected Wires
std::string generateMeanDataID(SumoXMLTag type) const
generate meanData id
std::unordered_map< SumoXMLTag, std::map< const std::string, GNEMeanData * >, std::hash< int > > myMeanDatas
map with the tag and pointer to meanData elements of net
void insertMeanData(GNEMeanData *meanData)
Insert a meanData element in 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 from container
int getNumberOfSelectedTransport() const
get number of selected transports
void updateMeanDataID(GNEMeanData *meanData, const std::string &newID)
update meanData ID in container
std::vector< GNELane * > getSelectedLanes() const
get selected lanes
void insertConnection(GNEConnection *connection)
insert connection in container
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
std::unordered_map< SumoXMLTag, std::map< const std::string, GNEAdditional * >, std::hash< int > > myAdditionalIDs
map with the tag and pointer to additional elements of net, sorted by IDs
int getNumberOfDataElements() const
get number of current data elements saved in AttributeCarriers
int getNumberOfGenericDatas() const
Return the number of generic datas.
void updateAdditionalID(GNEAdditional *additional, const std::string &newID)
update additional ID in container
int getNumberOfSelectedDemandElements() const
get number of selected demand elements
std::unordered_map< SumoXMLTag, std::unordered_map< const GNEAttributeCarrier *, GNETAZSourceSink * >, std::hash< int > > myTAZSourceSinks
map with the tag and pointer to TAZSourceSinks elements of net
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 container
GNEAdditional * retrieveAdditionals(const std::vector< SumoXMLTag > types, const std::string &id, bool hardFail=true) const
Returns the named additional.
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)
delete edge from container
GNEDemandElement * retrieveDemandElements(const std::vector< SumoXMLTag > types, const std::string &id, bool hardFail=true) const
Returns the named demand element.
std::string generateAdditionalID(SumoXMLTag type) const
generate additional id
void deleteAdditional(GNEAdditional *additional)
delete additional element of container
int getNumberOfDemandElements() const
get number of current demand elements saved in AttributeCarriers (default vTypes are NOT included)
int getNumberOfSelectedPolygons() const
get number of selected polygons
std::vector< GNEJunction * > getSelectedJunctions() const
return selected junctions
std::unordered_map< SumoXMLTag, std::unordered_map< const GUIGlObject *, GNEAdditional * >, std::hash< int > > myAdditionals
map with the tag and pointer to additional elements of net
int getNumberOfAdditionals() const
get number of additionals
std::unordered_map< SumoXMLTag, std::map< const std::string, GNEDemandElement * >, std::hash< int > > myDemandElementIDs
map with the tag and pointer to demand elements of net, sorted by IDs
void updateDemandElementID(GNEDemandElement *demandElement, const std::string &newID)
update demand element ID in container
bool isNetworkElementAroundTriangle(GNEAttributeCarrier *AC, const Triangle &triangle) const
check if shape of given AC (network element) is around the given triangle
void insertEdge(GNEEdge *edge)
void insertDemandElement(GNEDemandElement *demandElement)
Insert a demand element in container.
void insertTAZSourceSink(GNETAZSourceSink *sourceSink)
Insert a sourceSink element in container.
void updateEdgeID(GNEEdge *edge, const std::string &newID)
update edge ID in container
GNEDataInterval * retrieveDataInterval(const GNEAttributeCarrier *AC, bool hardFail=true) const
Returns the data interval.
std::vector< GNECrossing * > getSelectedCrossings() const
return all selected crossings
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
GNEInternalLane * retrieveInternalLane(const GUIGlObject *glObject, bool hardFail=true) const
get InternalLane by GUIGlObject
void updateDemandElementFrames(const GNETagProperties *tagProperty)
update demand element frames (called after insert/delete demand element)
void insertAdditional(GNEAdditional *additional)
Insert a additional element in container.
void retrieveAttributeCarriersRecursively(const GNETagProperties *tag, std::vector< GNEAttributeCarrier * > &ACs)
retrieve attribute carriers recursively
bool requireJunctionTazOption() const
check if we have elements that requires the option junction-taz
void insertEdgeType(GNEEdgeType *edgeType)
insert edge type in container
GNEEdge * retrieveEdge(const std::string &id, bool hardFail=true) const
get edge by id
const std::unordered_map< const GUIGlObject *, GNELane * > & getLanes() const
get lanes
const std::unordered_map< const GNEAttributeCarrier *, GNEDataInterval * > & getDataIntervals() const
get all data intervals of network
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 from container
void clearEdges()
clear edges
void insertJunction(GNEJunction *junction)
insert junction in container
std::vector< GNEEdge * > getSelectedEdges() const
return all edges
int getNumberOfNetworkElements() const
functions related with number of elements sorted by categories
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
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
std::unordered_map< SumoXMLTag, std::unordered_map< const GUIGlObject *, GNEDemandElement * >, std::hash< int > > myDemandElements
map with the tag and pointer to demand elements elements of net
void clearJunctions()
clear junctions
const std::unordered_map< const GUIGlObject *, GNEWalkingArea * > & getWalkingAreas() const
get walkingAreas
void deleteCrossing(GNECrossing *crossing)
delete crossing from container
GNEDemandElement * getDefaultType() const
get default type
const std::unordered_map< SumoXMLTag, std::unordered_map< const GUIGlObject *, GNEAdditional * >, std::hash< int > > & getAdditionals() const
get additionals
std::vector< std::string > getPOIParamKeys() const
return list of available POI parameters
GNEGenericData * retrieveGenericData(const GUIGlObject *glObject, bool hardFail=true) const
Returns the generic data.
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
std::string generateEdgeTypeID() const
generate edgeType id
void deleteDataInterval(GNEDataInterval *dataInterval)
delete data interval of container
GNEConnection * retrieveConnection(const std::string &id, bool hardFail=true) const
get Connection by id
void deleteTAZSourceSink(GNETAZSourceSink *sourceSink)
delete sourceSink element of container
int getNumberOfSelectedContainers() const
get number of selected containers
std::string generateDataSetID() const
generate data set id
int getNumberOfTAZSourceSinks() const
get number of TAZSourceSinks
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
GNEDialog::Result askSaveMeanDataElements(GNEDialog::Result &commonResult) const
warns about unsaved changes in meanData elements and gives the user the option to abort
void dataElementsSaved()
mark demand elements as saved
bool isEdgeTypeSaved() const
check if edgeType are saved
GNEDialog::Result askSaveDemandElements(GNEDialog::Result &commonResult) const
warns about unsaved changes in demand elements and gives the user the option to abort
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
GNEDialog::Result askSaveAdditionalElements(GNEDialog::Result &commonResult) const
warns about unsaved changes in additionals and gives the user the option to abort
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
GNEDialog::Result askSaveNetwork(GNEDialog::Result &commonResult) const
warns about unsaved changes in network and gives the user the option to abort
bool isAdditionalsSaved() const
check if additionals are saved
SavingStatus()=delete
invalidate default constructor
void requireSaveDemandElements()
inform that demand elements has to be saved
void edgeTypeSaved()
mark edgeType as saved
GNEDialog::Result askSaveDataElements(GNEDialog::Result &commonResult) const
warns about unsaved changes in data elements and gives the user the option to abort
const GNETagPropertiesDatabase * getTagPropertiesDatabase() const
get tag properties database (used for simplify code)
GUIGlObject * getGUIGlObject() override
get GUIGlObject associated with this AttributeCarrier
void setNetworkElementID(const std::string &newID)
set network element id
virtual void computePathElement()=0
implement in children+
void decRef(const std::string &debugMsg="")
Decrease reference.
void incRef(const std::string &debugMsg="")
Increase reference.
An Element which don't belong to GNENet but has influence in the simulation.
const std::vector< const GNETagProperties * > getTagPropertiesByType(const GNETagProperties::Type type) const
get tagProperties associated to the given GNETagProperties::Type (NETWORKELEMENT, ADDITIONALELEMENT,...
bool isContainer() const
return true if tag correspond to a container element
bool isNetworkElement() const
network elements
bool isDataElement() const
return true if tag correspond to a data element
bool isType() const
demand elements
bool isRoute() const
return true if tag correspond to a route element
const std::vector< const GNETagProperties * > & getHierarchicalChildren() const
get children of this tag property
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 hasAttribute(SumoXMLAttr attr) const
check if current TagProperties owns the attribute "attr"
bool isPerson() const
return true if tag correspond to a person element
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::unordered_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 const std::vector< SumoXMLTag > types
type namespace
static const std::vector< SumoXMLTag > busStops
busStops namespace
static const std::vector< SumoXMLTag > vehicles
vehicles namespace
static const std::vector< SumoXMLTag > laneAreaDetectors
lane area detectors namespace
static const std::vector< SumoXMLTag > POIs
POIs namespace.
static const std::vector< SumoXMLTag > routes
route namespace
static const std::vector< SumoXMLTag > persons
persons namespace
static const std::vector< SumoXMLTag > calibrators
calibrators namespace
static const std::vector< SumoXMLTag > polygons
polygon namespace
static const std::vector< SumoXMLTag > containers
containers namespace
std::string getString(const std::string &name) const
Returns the string-value of the named option (only for Option_String)
static OptionsCont & getOptions()
Retrieves the options.
C++ TraCI client API implementation.
double z() const
Returns the z-position.
long long int parametersSet
Information for the router which parameter were set.
static std::string getEdgeIDFromLane(const std::string laneID)
return edge id when given the lane ID
A simple triangle defined in 3D.
bool isPositionWithin(const Position &pos) const
check if the given position is within this triangle
bool intersectWithShape(const PositionVector &shape) const
check if the given shape is within or intersect with this triangle