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);
496 auto junctionCopy = myJunctions;
500 for (
const auto& junction : junctionCopy) {
504 myJunctions[prefix + junction.first] = junction.second;
511 if (myJunctions.count(junction->
getID()) == 0) {
512 throw ProcessError(junction->
getTagStr() +
" with ID='" + junction->
getID() +
"' doesn't exist in AttributeCarriers.junction");
513 }
else if (myJunctions.count(newID) != 0) {
514 throw ProcessError(
"There is another " + junction->
getTagStr() +
" with new ID='" + newID +
"' in myJunctions");
519 myNet->getNetBuilder()->getNodeCont().rename(junction->
getNBNode(), newID);
523 myJunctions[junction->
getID()] = junction;
527 myNet->requireRecompute();
535 for (
const auto& junction : myJunctions) {
536 if (junction.second->isAttributeCarrierSelected()) {
546 auto it = myCrossings.find(glObject);
547 if (it != myCrossings.end()) {
559const std::unordered_map<const GUIGlObject*, GNECrossing*>&
565std::vector<GNECrossing*>
567 std::vector<GNECrossing*> result;
569 for (
const auto& crossing : myCrossings) {
570 if (crossing.second->isAttributeCarrierSelected()) {
571 result.push_back(crossing.second);
581 for (
const auto& crossing : myCrossings) {
582 if (crossing.second->isAttributeCarrierSelected()) {
592 auto it = myWalkingAreas.find(glObject);
593 if (it != myWalkingAreas.end()) {
605const std::unordered_map<const GUIGlObject*, GNEWalkingArea*>&
607 return myWalkingAreas;
611std::vector<GNEWalkingArea*>
613 std::vector<GNEWalkingArea*> result;
615 for (
const auto& walkingArea : myWalkingAreas) {
616 if (walkingArea.second->isAttributeCarrierSelected()) {
617 result.push_back(walkingArea.second);
627 for (
const auto& walkingArea : myWalkingAreas) {
628 if (walkingArea.second->isAttributeCarrierSelected()) {
638 if (myEdgeTypes.count(
id) > 0) {
639 return myEdgeTypes.at(
id);
640 }
else if (hardFail) {
642 throw UnknownElement(
"Attempted to retrieve non-existant EdgeType " +
id);
652 edgeType->
incRef(
"GNENet::registerEdgeType");
659const std::map<std::string, GNEEdgeType*>&
672 if (myEdgeTypes.count(edgeType->
getID()) == 0) {
673 throw ProcessError(edgeType->
getTagStr() +
" with ID='" + edgeType->
getID() +
"' doesn't exist in AttributeCarriers.edgeType");
674 }
else if (myEdgeTypes.count(newID) != 0) {
675 throw ProcessError(
"There is another " + edgeType->
getTagStr() +
" with new ID='" + newID +
"' in myEdgeTypes");
678 myEdgeTypes.erase(edgeType->
getID());
680 myNet->getNetBuilder()->getTypeCont().updateEdgeTypeID(edgeType->
getID(), newID);
684 myEdgeTypes[edgeType->
getID()] = edgeType;
686 myNet->requireRecompute();
694 while (myEdgeTypes.count(
"edgeType_" +
toString(counter)) != 0) {
697 return (
"edgeType_" +
toString(counter));
703 auto it = myEdges.find(
id);
704 if (it != myEdges.end()) {
709 throw UnknownElement(
"Attempted to retrieve non-existant edge " +
id);
718 if ((from ==
nullptr) || (to ==
nullptr)) {
721 std::vector<GNEEdge*> edges;
724 if (edgeTo->getToJunction() == to) {
725 edges.push_back(edgeTo);
732const std::map<std::string, GNEEdge*>&
740 std::vector<GNEEdge*> result;
742 for (
const auto& edge : myEdges) {
743 if (edge.second->isAttributeCarrierSelected()) {
744 result.push_back(edge.second);
753 edge->
incRef(
"GNENet::registerEdge");
757 myNumberOfNetworkElements++;
773 myNet->addGLObjectIntoGrid(edge);
787 auto edgeCopy = myEdges;
791 for (
const auto& edge : edgeCopy) {
795 myEdges[prefix + edge.first] = edge.second;
805 while (myEdges.count(edgePrefix +
toString(myNet->getEdgeIDCounter())) != 0) {
806 myNet->getEdgeIDCounter()++;
808 return edgePrefix +
toString(myNet->getEdgeIDCounter());
814 if (myEdges.count(edge->
getID()) == 0) {
816 }
else if (myEdges.count(newID) != 0) {
817 throw ProcessError(
"There is another " + edge->
getTagStr() +
" with new ID='" + newID +
"' in myEdges");
822 myNet->getNetBuilder()->getEdgeCont().rename(edge->
getNBEdge(), newID);
826 myEdges[edge->
getID()] = edge;
829 lane->updateConnectionIDs();
832 myNet->requireRecompute();
840 for (
const auto& edge : myEdges) {
841 if (edge.second->isAttributeCarrierSelected()) {
852 const GNEEdge* edge = retrieveEdge(edge_id,
false);
853 if (edge !=
nullptr) {
857 if (laneIt->getID() == id) {
862 if (lane ==
nullptr) {
869 if (checkVolatileChange && (myNet->getEdgesAndNumberOfLanes().count(edge_id) == 1) &&
870 myNet->getEdgesAndNumberOfLanes().at(edge_id) != (
int)edge->
getChildLanes().size()) {
875 }
else if (hardFail) {
885 auto it = myLanes.find(glObject);
886 if (it != myLanes.end()) {
898const std::unordered_map<const GUIGlObject*, GNELane*>&
906 std::vector<GNELane*> result;
908 for (
const auto& lane : myLanes) {
909 if (lane.second->isAttributeCarrierSelected()) {
910 result.push_back(lane.second);
920 for (
const auto& lane : myLanes) {
921 if (lane.second->isAttributeCarrierSelected()) {
932 for (
const auto& connection : myConnections) {
933 if (connection.second->getID() == id) {
934 return connection.second;
939 throw UnknownElement(
"Attempted to retrieve non-existant connection " +
id);
948 auto it = myConnections.find(glObject);
949 if (it != myConnections.end()) {
961const std::unordered_map<const GUIGlObject*, GNEConnection*>&
963 return myConnections;
967std::vector<GNEConnection*>
969 std::vector<GNEConnection*> result;
971 for (
const auto& connection : myConnections) {
972 if (connection.second->isAttributeCarrierSelected()) {
973 result.push_back(connection.second);
983 for (
const auto& connection : myConnections) {
984 if (connection.second->isAttributeCarrierSelected()) {
994 auto it = myInternalLanes.find(glObject);
995 if (it != myInternalLanes.end()) {
1009 auto it = myAdditionalIDs.at(type).find(
id);
1010 if (it != myAdditionalIDs.at(type).end()) {
1014 throw ProcessError(
"Attempted to retrieve non-existant additional (string)");
1023 for (
const auto& type : types) {
1024 auto it = myAdditionalIDs.at(type).find(
id);
1025 if (it != myAdditionalIDs.at(type).end()) {
1030 throw ProcessError(
"Attempted to retrieve non-existant additional (string)");
1040 for (
const auto& additionalTag : myAdditionals) {
1041 auto it = additionalTag.second.find(glObject);
1042 if (it != additionalTag.second.end()) {
1047 throw ProcessError(
"Attempted to retrieve non-existant additional (glObject)");
1073 throw ProcessError(
"Attempted to retrieve non-existant rerouter interval");
1077const std::unordered_map<SumoXMLTag, std::unordered_map<const GUIGlObject*, GNEAdditional*>, std::hash<int> >&
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.second->isAttributeCarrierSelected()) {
1090 result.push_back(additional.second);
1098std::vector<GNEAdditional*>
1100 std::vector<GNEAdditional*> result;
1102 for (
const auto& additionalsTags : myAdditionals) {
1103 for (
const auto& additional : additionalsTags.second) {
1104 if (additional.second->getTagProperty()->isShapeElement() && additional.second->isAttributeCarrierSelected()) {
1105 result.push_back(additional.second);
1112std::vector<GNEAdditional*>
1114 std::vector<GNEAdditional*> result;
1116 for (
const auto& additionalsTags : myAdditionals) {
1117 for (
const auto& additional : additionalsTags.second) {
1118 if (additional.second->getTagProperty()->isShapeElement() && !additional.second->isAttributeCarrierSelected()) {
1119 result.push_back(additional.second);
1130 for (
const auto& additionalsTag : myAdditionals) {
1131 counter += (int)additionalsTag.second.size();
1140 for (
const auto& additionalsTags : myAdditionals) {
1141 for (
const auto& additional : additionalsTags.second) {
1142 myNet->removeGLObjectFromGrid(additional.second);
1146 for (
auto& additionals : myAdditionals) {
1147 additionals.second.clear();
1149 for (
auto& additionals : myAdditionalIDs) {
1150 additionals.second.clear();
1158 const auto it = myAdditionalIDs.at(tag).find(additional->
getID());
1159 if (it == myAdditionalIDs.at(tag).end()) {
1160 throw ProcessError(additional->
getTagStr() +
" with ID='" + additional->
getID() +
"' doesn't exist in AttributeCarriers.additionals");
1163 myAdditionalIDs.at(tag).erase(it);
1166 myAdditionalIDs.at(tag)[newID] = additional;
1178 prefix = neteditOptions.getString(
"busStop-prefix");
1180 prefix = neteditOptions.getString(
"trainStop-prefix");
1182 prefix = neteditOptions.getString(
"containerStop-prefix");
1184 prefix = neteditOptions.getString(
"chargingStation-prefix");
1186 prefix = neteditOptions.getString(
"parkingArea-prefix");
1188 prefix = neteditOptions.getString(
"e1Detector-prefix");
1190 prefix = neteditOptions.getString(
"e2Detector-prefix");
1192 prefix = neteditOptions.getString(
"e3Detector-prefix");
1194 prefix = neteditOptions.getString(
"e1InstantDetector-prefix");
1196 prefix = neteditOptions.getString(
"rerouter-prefix");
1198 prefix = neteditOptions.getString(
"calibrator-prefix");
1200 prefix = neteditOptions.getString(
"routeProbe-prefix");
1202 prefix = neteditOptions.getString(
"vss-prefix");
1204 prefix = neteditOptions.getString(
"tractionSubstation-prefix");
1206 prefix = neteditOptions.getString(
"overheadWire-prefix");
1208 prefix = neteditOptions.getString(
"polygon-prefix");
1210 prefix = neteditOptions.getString(
"poi-prefix");
1214 prefix = neteditOptions.getString(
"jps.walkableArea-prefix");
1216 prefix = neteditOptions.getString(
"jps.obstacle-prefix");
1241 while (retrieveAdditional(tag, prefix +
"_" +
toString(counter),
false) !=
nullptr) {
1246 return (prefix +
"_" +
toString(counter));
1253 for (
const auto& additionalsTags : myAdditionals) {
1254 for (
const auto& additional : additionalsTags.second) {
1255 if (additional.second->isAttributeCarrierSelected()) {
1266 return getNumberOfSelectedAdditionals() -
1268 getNumberOfSelectedPolygons() - getNumberOfSelectedPOIs() -
1270 getNumberOfSelectedJpsWalkableAreas() - getNumberOfSelectedJpsObstacles() -
1272 getNumberOfSelectedTAZs() -
1274 getNumberOfSelectedWires();
1282 if (poly.second->isAttributeCarrierSelected()) {
1294 if (walkableArea.second->isAttributeCarrierSelected()) {
1306 if (obstacle.second->isAttributeCarrierSelected()) {
1318 if (
POI.second->isAttributeCarrierSelected()) {
1323 if (POILane.second->isAttributeCarrierSelected()) {
1328 if (
POIGEO.second->isAttributeCarrierSelected()) {
1336std::vector<std::string>
1338 std::set<std::string> keys;
1340 for (
const auto& parameter :
POI.second->getParameters()->getParametersMap()) {
1341 keys.insert(parameter.first);
1345 for (
const auto& parameter : POILane.second->getParameters()->getParametersMap()) {
1346 keys.insert(parameter.first);
1350 for (
const auto& parameter :
POIGEO.second->getParameters()->getParametersMap()) {
1351 keys.insert(parameter.first);
1354 return std::vector<std::string>(keys.begin(), keys.end());
1362 if (
TAZ.second->isAttributeCarrierSelected()) {
1373 for (
const auto& additionalsTags : myAdditionals) {
1374 for (
const auto& additional : additionalsTags.second) {
1375 if (additional.second->isAttributeCarrierSelected() && additional.second->getTagProperty()->isWireElement()) {
1387 for (
const auto& TAZSourceSinkTag : myTAZSourceSinks) {
1388 auto it = TAZSourceSinkTag.second.find(sourceSink);
1389 if (it != TAZSourceSinkTag.second.end()) {
1394 throw ProcessError(
"Attempted to retrieve non-existant sourceSink (glObject)");
1401const std::unordered_map<SumoXMLTag, std::unordered_map<const GNEAttributeCarrier*, GNETAZSourceSink*>, std::hash<int> >&
1403 return myTAZSourceSinks;
1410 for (
const auto& sourceSinksTag : myTAZSourceSinks) {
1411 counter += (int)sourceSinksTag.second.size();
1420 for (
auto& sourceSinksTags : myTAZSourceSinks) {
1421 sourceSinksTags.second.clear();
1428 auto it = myDemandElementIDs.at(type).find(
id);
1429 if (it != myDemandElementIDs.at(type).end()) {
1433 throw ProcessError(
"Attempted to retrieve non-existant demand element (string)");
1442 for (
const auto& type : types) {
1443 auto it = myDemandElementIDs.at(type).find(
id);
1444 if (it != myDemandElementIDs.at(type).end()) {
1449 throw ProcessError(
"Attempted to retrieve non-existant demand element (string)");
1459 for (
const auto& demandElementTag : myDemandElements) {
1460 auto it = demandElementTag.second.find(glObject);
1461 if (it != demandElementTag.second.end()) {
1466 throw ProcessError(
"Attempted to retrieve non-existant demandElement (glObject)");
1473std::vector<GNEDemandElement*>
1475 std::vector<GNEDemandElement*> result;
1477 for (
const auto& demandElementTag : myDemandElements) {
1478 for (
const auto& demandElement : demandElementTag.second) {
1479 if (demandElement.second->isAttributeCarrierSelected()) {
1480 result.push_back(demandElement.second);
1488const std::unordered_map<SumoXMLTag, std::unordered_map<const GUIGlObject*, GNEDemandElement*>, std::hash<int> >&
1490 return myDemandElements;
1499 const auto tagProperty = myNet->getTagPropertiesDatabase()->getTagProperty(tag,
true);
1503 prefix = neteditOptions.getString(
"route-prefix");
1505 prefix = neteditOptions.getString(
"routeDistribution-prefix");
1507 prefix = neteditOptions.getString(
"vType-prefix");
1509 prefix = neteditOptions.getString(
"vTypeDistribution-prefix");
1511 prefix = neteditOptions.getString(
"trip-prefix");
1512 }
else if (tagProperty->isVehicle() && !tagProperty->isFlow()) {
1513 prefix = neteditOptions.getString(
"vehicle-prefix");
1514 }
else if (tagProperty->isPerson()) {
1515 if (tagProperty->isFlow()) {
1516 prefix = neteditOptions.getString(
"personflow-prefix");
1518 prefix = neteditOptions.getString(
"person-prefix");
1520 }
else if (tagProperty->isContainer()) {
1521 if (tagProperty->isFlow()) {
1522 prefix = neteditOptions.getString(
"containerflow-prefix");
1524 prefix = neteditOptions.getString(
"container-prefix");
1526 }
else if (tagProperty->isFlow()) {
1527 prefix = neteditOptions.getString(
"flow-prefix");
1552 while (retrieveDemandElement(tag, prefix +
"_" +
toString(counter),
false) !=
nullptr) {
1557 return (prefix +
"_" +
toString(counter));
1575 for (
const auto& demandElementsTags : myDemandElements) {
1576 for (
const auto& demandElement : demandElementsTags.second) {
1577 myNet->removeGLObjectFromGrid(demandElement.second);
1581 for (
auto& demandElements : myDemandElements) {
1582 demandElements.second.clear();
1584 for (
auto& demandElements : myDemandElementIDs) {
1585 demandElements.second.clear();
1593 const auto it = myDemandElementIDs.at(tag).find(demandElement->
getID());
1594 if (it == myDemandElementIDs.at(tag).end()) {
1595 throw ProcessError(demandElement->
getTagStr() +
" with ID='" + demandElement->
getID() +
"' doesn't exist in AttributeCarriers.demandElements");
1598 myDemandElementIDs.at(tag).erase(it);
1601 myDemandElementIDs.at(tag)[newID] = demandElement;
1609 auto bucket = myNet->getGNEApplicationWindow()->getFileBucketHandler()->getDefaultBucket(
FileBucket::Type::DEMAND);
1613 myDemandElementIDs.at(defaultVehicleType->
getTagProperty()->
getTag()).insert(std::make_pair(defaultVehicleType->
getID(), defaultVehicleType));
1614 defaultVehicleType->
incRef(
"GNENet::DEFAULT_VEHTYPE");
1615 bucket->addDefaultVType();
1620 myDemandElementIDs.at(defaultBikeType->
getTagProperty()->
getTag()).insert(std::make_pair(defaultBikeType->
getID(), defaultBikeType));
1622 defaultBikeType->
incRef(
"GNENet::DEFAULT_BIKETYPE_ID");
1623 bucket->addDefaultVType();
1628 myDemandElementIDs.at(defaultTaxiType->
getTagProperty()->
getTag()).insert(std::make_pair(defaultTaxiType->
getID(), defaultTaxiType));
1630 defaultTaxiType->
incRef(
"GNENet::DEFAULT_TAXITYPE_ID");
1631 bucket->addDefaultVType();
1636 myDemandElementIDs.at(defaultRailType->
getTagProperty()->
getTag()).insert(std::make_pair(defaultRailType->
getID(), defaultRailType));
1638 defaultRailType->
incRef(
"GNENet::DEFAULT_RAILTYPE_ID");
1639 bucket->addDefaultVType();
1644 myDemandElementIDs.at(defaultPersonType->
getTagProperty()->
getTag()).insert(std::make_pair(defaultPersonType->
getID(), defaultPersonType));
1646 defaultPersonType->
incRef(
"GNENet::DEFAULT_PEDTYPE_ID");
1647 bucket->addDefaultVType();
1652 myDemandElementIDs.at(defaultContainerType->
getTagProperty()->
getTag()).insert(std::make_pair(defaultContainerType->
getID(), defaultContainerType));
1654 defaultContainerType->
incRef(
"GNENet::DEFAULT_CONTAINERTYPE_ID");
1655 bucket->addDefaultVType();
1667 for (
const auto& mapValue : myDemandElements) {
1668 const auto tagProperty = myNet->getTagPropertiesDatabase()->getTagProperty(mapValue.first,
true);
1669 if ((tagProperty->planFromJunction() || tagProperty->planToJunction()) && (myDemandElements.at(tagProperty->getTag()).size() > 0)) {
1680 return myStopIndex++;
1687 for (
const auto& demandElementsTags : myDemandElements) {
1688 for (
const auto& demandElement : demandElementsTags.second) {
1689 if (demandElement.second->isAttributeCarrierSelected()) {
1703 if (route.second->isAttributeCarrierSelected()) {
1709 if (vehicle.second->getChildDemandElements().front()->isAttributeCarrierSelected()) {
1714 if (flow.second->getChildDemandElements().front()->isAttributeCarrierSelected()) {
1727 if (vehicle.second->isAttributeCarrierSelected()) {
1731 for (
const auto& trip : myDemandElements.at(
SUMO_TAG_TRIP)) {
1732 if (trip.second->isAttributeCarrierSelected()) {
1737 if (vehicle.second->isAttributeCarrierSelected()) {
1741 for (
const auto& flow : myDemandElements.at(
SUMO_TAG_FLOW)) {
1742 if (flow.second->isAttributeCarrierSelected()) {
1747 if (flow.second->isAttributeCarrierSelected()) {
1752 if (flow.second->isAttributeCarrierSelected()) {
1765 if (person.second->isAttributeCarrierSelected()) {
1770 if (personFlow.second->isAttributeCarrierSelected()) {
1783 for (
const auto& personPlan : person.second->getChildDemandElements()) {
1784 if (personPlan->getTagProperty()->isPlanPersonTrip() && personPlan->isAttributeCarrierSelected()) {
1790 for (
const auto& personPlan : personFlow.second->getChildDemandElements()) {
1791 if (personPlan->getTagProperty()->isPlanPersonTrip() && personPlan->isAttributeCarrierSelected()) {
1805 for (
const auto& personPlan : person.second->getChildDemandElements()) {
1806 if (personPlan->getTagProperty()->isPlanWalk() && personPlan->isAttributeCarrierSelected()) {
1812 for (
const auto& personPlan : personFlow.second->getChildDemandElements()) {
1813 if (personPlan->getTagProperty()->isPlanWalk() && personPlan->isAttributeCarrierSelected()) {
1827 for (
const auto& personPlan : person.second->getChildDemandElements()) {
1828 if (personPlan->getTagProperty()->isPlanRide() && personPlan->isAttributeCarrierSelected()) {
1834 for (
const auto& personPlan : personFlow.second->getChildDemandElements()) {
1835 if (personPlan->getTagProperty()->isPlanRide() && personPlan->isAttributeCarrierSelected()) {
1849 if (container.second->isAttributeCarrierSelected()) {
1854 if (containerFlow.second->isAttributeCarrierSelected()) {
1867 for (
const auto& containerPlan : container.second->getChildDemandElements()) {
1868 if (containerPlan->getTagProperty()->isPlanTransport() && containerPlan->isAttributeCarrierSelected()) {
1874 for (
const auto& containerPlan : containerFlow.second->getChildDemandElements()) {
1875 if (containerPlan->getTagProperty()->isPlanTransport() && containerPlan->isAttributeCarrierSelected()) {
1889 for (
const auto& containerPlan : container.second->getChildDemandElements()) {
1890 if (containerPlan->getTagProperty()->isPlanTranship() && containerPlan->isAttributeCarrierSelected()) {
1896 for (
const auto& containerPlan : containerFlow.second->getChildDemandElements()) {
1897 if (containerPlan->getTagProperty()->isPlanTranship() && containerPlan->isAttributeCarrierSelected()) {
1911 for (
const auto& stop : route.second->getChildDemandElements()) {
1912 if (stop->getTagProperty()->isVehicleStop() && stop->isAttributeCarrierSelected()) {
1918 for (
const auto& trip : myDemandElements.at(
SUMO_TAG_TRIP)) {
1919 for (
const auto& stop : trip.second->getChildDemandElements()) {
1920 if (stop->getTagProperty()->isVehicleStop() && stop->isAttributeCarrierSelected()) {
1926 for (
const auto& stop : vehicle.second->getChildDemandElements().front()->getChildDemandElements()) {
1927 if (stop->getTagProperty()->isVehicleStop() && stop->isAttributeCarrierSelected()) {
1931 for (
const auto& stop : vehicle.second->getChildDemandElements()) {
1932 if (stop->getTagProperty()->isVehicleStop() && stop->isAttributeCarrierSelected()) {
1937 for (
const auto& flow : myDemandElements.at(
SUMO_TAG_FLOW)) {
1938 for (
const auto& stop : flow.second->getChildDemandElements()) {
1939 if (stop->getTagProperty()->isVehicleStop() && stop->isAttributeCarrierSelected()) {
1945 for (
const auto& stop : flow.second->getChildDemandElements().front()->getChildDemandElements()) {
1946 if (stop->getTagProperty()->isVehicleStop() && stop->isAttributeCarrierSelected()) {
1950 for (
const auto& stop : flow.second->getChildDemandElements()) {
1951 if (stop->getTagProperty()->isVehicleStop() && stop->isAttributeCarrierSelected()) {
1958 for (
const auto& personPlan : person.second->getChildDemandElements()) {
1959 if (personPlan->getTagProperty()->isPlanStopPerson() && personPlan->isAttributeCarrierSelected()) {
1965 for (
const auto& personPlan : personFlow.second->getChildDemandElements()) {
1966 if (personPlan->getTagProperty()->isPlanStopPerson() && personPlan->isAttributeCarrierSelected()) {
1973 for (
const auto& containerPlan : container.second->getChildDemandElements()) {
1974 if (containerPlan->getTagProperty()->isPlanStopContainer() && containerPlan->isAttributeCarrierSelected()) {
1980 for (
const auto& containerPlan : containerFlow.second->getChildDemandElements()) {
1981 if (containerPlan->getTagProperty()->isPlanStopContainer() && containerPlan->isAttributeCarrierSelected()) {
1992 for (
const auto& dataSet : myDataSets) {
1993 if (dataSet.second->getID() == id) {
1994 return dataSet.second;
1998 throw ProcessError(
"Attempted to retrieve non-existant data set");
2005const std::map<const std::string, GNEDataSet*>&
2016 while (retrieveDataSet(prefix +
"_" +
toString(counter),
false) !=
nullptr) {
2019 return (prefix +
"_" +
toString(counter));
2025 if (myDataIntervals.count(AC)) {
2026 return myDataIntervals.at(AC);
2027 }
else if (hardFail) {
2028 throw ProcessError(
"Attempted to retrieve non-existant data interval");
2035const std::unordered_map<const GNEAttributeCarrier*, GNEDataInterval*>&
2037 return myDataIntervals;
2043 if (myDataIntervals.count(AC) > 0) {
2046 myDataIntervals[AC] = dataInterval;
2049 myNet->getViewNet()->getIntervalBar().markForUpdate();
2055 const auto finder = myDataIntervals.find(dataInterval);
2056 if (finder == myDataIntervals.end()) {
2059 myDataIntervals.erase(finder);
2062 myNet->getViewNet()->getInspectedElements().uninspectAC(dataInterval);
2064 myNet->getViewParent()->getInspectorFrame()->getHierarchicalElementTree()->removeCurrentEditedAttributeCarrier(dataInterval);
2066 myNet->getViewNet()->getIntervalBar().markForUpdate();
2073 for (
const auto& genericDataTag : myGenericDatas) {
2074 auto it = genericDataTag.second.find(glObject);
2075 if (it != genericDataTag.second.end()) {
2080 throw ProcessError(
"Attempted to retrieve non-existant generic (glObject)");
2087std::vector<GNEGenericData*>
2089 std::vector<GNEGenericData*> result;
2091 for (
const auto& genericDataTag : myGenericDatas) {
2092 for (
const auto& genericData : genericDataTag.second) {
2093 if (genericData.second->isAttributeCarrierSelected()) {
2094 result.push_back(genericData.second);
2102const std::unordered_map<SumoXMLTag, std::unordered_map<const GUIGlObject*, GNEGenericData*>, std::hash<int> >&
2104 return myGenericDatas;
2108std::vector<GNEGenericData*>
2111 std::vector<GNEGenericData*> genericDatas;
2113 for (
const auto& genericData : myGenericDatas.at(genericDataTag)) {
2115 if ((genericData.second->getDataIntervalParent()->getAttributeDouble(
SUMO_ATTR_BEGIN) >= begin) &&
2116 (genericData.second->getDataIntervalParent()->getAttributeDouble(
SUMO_ATTR_END) <= end)) {
2117 genericDatas.push_back(genericData.second);
2120 return genericDatas;
2128 for (
const auto& genericDataTag : myGenericDatas) {
2129 counter += (int)genericDataTag.second.size();
2140 if (genericData.second->isAttributeCarrierSelected()) {
2153 if (genericData.second->isAttributeCarrierSelected()) {
2166 if (genericData.second->isAttributeCarrierSelected()) {
2182 myNet->getViewNet()->getIntervalBar().markForUpdate();
2188 const auto finder = myGenericDatas.at(genericData->
getTagProperty()->
getTag()).find(genericData);
2195 myNet->getViewNet()->getInspectedElements().uninspectAC(genericData);
2197 myNet->getViewParent()->getInspectorFrame()->getHierarchicalElementTree()->removeCurrentEditedAttributeCarrier(genericData);
2199 myNet->getDataPathManager()->removePath(genericData);
2201 myNet->getViewNet()->getIntervalBar().markForUpdate();
2205std::set<std::string>
2208 std::set<std::string> attributesSolution;
2210 std::vector<GNEGenericData*> genericDatas;
2212 for (
const auto& interval : myDataIntervals) {
2216 for (
const auto& genericData : interval.second->getGenericDataChildren()) {
2217 if (genericDataTag.empty() || (genericData->getTagProperty()->getTagStr() == genericDataTag)) {
2218 genericDatas.push_back(genericData);
2224 for (
const auto& genericData : genericDatas) {
2225 for (
const auto& attribute : genericData->getParametersMap()) {
2226 attributesSolution.insert(attribute.first);
2229 return attributesSolution;
2233std::set<std::string>
2235 const std::string& beginStr,
const std::string& endStr)
const {
2237 std::set<std::string> attributesSolution;
2239 std::vector<GNEDataSet*> dataSets;
2240 std::vector<GNEDataInterval*> dataIntervals;
2242 GNEDataSet* retrievedDataSet = retrieveDataSet(dataSetID,
false);
2244 if (dataSetID.empty()) {
2246 dataSets.reserve(myDataSets.size());
2247 for (
const auto& dataSet : myDataSets) {
2248 dataSets.push_back(dataSet.second);
2250 }
else if (retrievedDataSet) {
2251 dataSets.push_back(retrievedDataSet);
2253 return attributesSolution;
2256 int numberOfIntervals = 0;
2257 for (
const auto& dataSet : dataSets) {
2258 numberOfIntervals += (int)dataSet->getDataIntervalChildren().size();
2261 dataIntervals.reserve(numberOfIntervals);
2263 for (
const auto& dataSet : dataSets) {
2264 for (
const auto& dataInterval : dataSet->getDataIntervalChildren()) {
2266 if (beginStr.empty() && endStr.empty()) {
2267 dataIntervals.push_back(dataInterval.second);
2268 }
else if (endStr.empty()) {
2270 const double begin = GNEAttributeCarrier::parse<double>(beginStr);
2271 if (dataInterval.second->getAttributeDouble(
SUMO_ATTR_BEGIN) >= begin) {
2272 dataIntervals.push_back(dataInterval.second);
2274 }
else if (beginStr.empty()) {
2276 const double end = GNEAttributeCarrier::parse<double>(endStr);
2277 if (dataInterval.second->getAttributeDouble(
SUMO_ATTR_END) <= end) {
2278 dataIntervals.push_back(dataInterval.second);
2282 const double begin = GNEAttributeCarrier::parse<double>(beginStr);
2283 const double end = GNEAttributeCarrier::parse<double>(endStr);
2284 if ((dataInterval.second->getAttributeDouble(
SUMO_ATTR_BEGIN) >= begin) &&
2285 (dataInterval.second->getAttributeDouble(
SUMO_ATTR_END) <= end)) {
2286 dataIntervals.push_back(dataInterval.second);
2292 for (
const auto& dataInterval : dataIntervals) {
2293 for (
const auto& genericData : dataInterval->getGenericDataChildren()) {
2295 if (genericDataTag.empty() || (genericData->getTagProperty()->getTagStr() == genericDataTag)) {
2296 for (
const auto& attribute : genericData->getParametersMap()) {
2297 attributesSolution.insert(attribute.first);
2302 return attributesSolution;
2308 for (
const auto& meanData : myMeanDatas.at(type)) {
2309 if (meanData.second->getID() == id) {
2310 return meanData.second;
2314 throw ProcessError(
"Attempted to retrieve non-existant meanData (string)");
2321const std::unordered_map<SumoXMLTag, std::map<const std::string, GNEMeanData*>, std::hash<int> >&
2329 return myNumberOfMeanDataElements;
2336 for (
auto& meanDatas : myMeanDatas) {
2337 meanDatas.second.clear();
2345 const auto it = myMeanDatas.at(tag).find(meanData->
getID());
2346 if (it == myMeanDatas.at(tag).end()) {
2347 throw ProcessError(meanData->
getTagStr() +
" with ID='" + meanData->
getID() +
"' doesn't exist in AttributeCarriers.meanDatas");
2350 myMeanDatas.at(tag).erase(it);
2351 myMeanDatas.at(tag)[newID] = meanData;
2363 prefix = neteditOptions.getString(
"meanDataEdge-prefix");
2365 prefix = neteditOptions.getString(
"meanDataLane-prefix");
2368 while (retrieveMeanData(tag, prefix +
"_" +
toString(counter),
false) !=
nullptr) {
2371 return (prefix +
"_" +
toString(counter));
2377 myNet->getNetBuilder()->getNodeCont().insert(junction->
getNBNode());
2378 registerJunction(junction,
false);
2385 myNet->getViewNet()->getInspectedElements().uninspectAC(junction);
2387 myNet->getViewParent()->getInspectorFrame()->getHierarchicalElementTree()->removeCurrentEditedAttributeCarrier(junction);
2389 myNet->removeGLObjectFromGrid(junction);
2391 myNumberOfNetworkElements--;
2392 myNet->getNetBuilder()->getNodeCont().extract(junction->
getNBNode());
2393 junction->
decRef(
"GNENet::deleteSingleJunction");
2401 const auto& createEdgeFrame = myNet->getViewParent()->getCreateEdgeFrame();
2404 myNumberOfNetworkElements++;
2406 if (myNet->getViewParent()->getCreateEdgeFrame()->shown()) {
2407 myNet->getViewParent()->getCreateEdgeFrame()->getEdgeTypeSelector()->refreshEdgeTypeSelector();
2410 createEdgeFrame->getEdgeTypeSelector()->setCurrentEdgeType(edgeType);
2417 const auto& createEdgeFrame = myNet->getViewParent()->getCreateEdgeFrame();
2419 myNet->getViewNet()->getInspectedElements().uninspectAC(edgeType);
2421 myNet->getViewParent()->getInspectorFrame()->getHierarchicalElementTree()->removeCurrentEditedAttributeCarrier(edgeType);
2424 myNumberOfNetworkElements--;
2426 if (createEdgeFrame->getEdgeTypeSelector()->getEdgeTypeSelected() == edgeType) {
2427 createEdgeFrame->getEdgeTypeSelector()->clearEdgeTypeSelected();
2430 createEdgeFrame->getEdgeTypeSelector()->refreshEdgeTypeSelector();
2437 myNet->getNetBuilder()->getEdgeCont().insert(nbe);
2449 myNet->getViewNet()->getInspectedElements().uninspectAC(edge);
2451 myNet->getViewParent()->getInspectorFrame()->getHierarchicalElementTree()->removeCurrentEditedAttributeCarrier(edge);
2453 myNet->removeGLObjectFromGrid(edge);
2455 myNumberOfNetworkElements--;
2461 myNet->getNetBuilder()->getEdgeCont().extract(myNet->getNetBuilder()->getDistrictCont(), edge->
getNBEdge());
2462 edge->
decRef(
"GNENet::deleteSingleEdge");
2485 myNumberOfNetworkElements++;
2493 if (finder == myLanes.end()) {
2496 myLanes.erase(finder);
2497 myNumberOfNetworkElements--;
2499 myNet->getViewNet()->getInspectedElements().uninspectAC(lane);
2501 myNet->getViewParent()->getInspectorFrame()->getHierarchicalElementTree()->removeCurrentEditedAttributeCarrier(lane);
2512 myNumberOfNetworkElements++;
2519 const auto finder = myCrossings.find(crossing->
getGUIGlObject());
2520 if (finder == myCrossings.end()) {
2523 myCrossings.erase(finder);
2524 myNumberOfNetworkElements--;
2526 if (myNet->getViewNet()) {
2527 myNet->getViewNet()->getInspectedElements().uninspectAC(crossing);
2529 myNet->getViewParent()->getInspectorFrame()->getHierarchicalElementTree()->removeCurrentEditedAttributeCarrier(crossing);
2541 myNumberOfNetworkElements++;
2548 const auto finder = myWalkingAreas.find(walkingArea->
getGUIGlObject());
2549 if (finder == myWalkingAreas.end()) {
2552 myWalkingAreas.erase(finder);
2553 myNumberOfNetworkElements--;
2555 myNet->getViewNet()->getInspectedElements().uninspectAC(walkingArea);
2557 myNet->getViewParent()->getInspectorFrame()->getHierarchicalElementTree()->removeCurrentEditedAttributeCarrier(walkingArea);
2568 myNumberOfNetworkElements++;
2575 const auto finder = myConnections.find(connection->
getGUIGlObject());
2576 if (finder == myConnections.end()) {
2579 myConnections.erase(finder);
2580 myNumberOfNetworkElements--;
2582 myNet->getViewNet()->getInspectedElements().uninspectAC(connection);
2584 myNet->getViewParent()->getInspectorFrame()->getHierarchicalElementTree()->removeCurrentEditedAttributeCarrier(connection);
2595 myNumberOfNetworkElements++;
2602 const auto finder = myInternalLanes.find(internalLane->
getGUIGlObject());
2603 if (finder == myInternalLanes.end()) {
2606 myInternalLanes.erase(finder);
2607 myNumberOfNetworkElements--;
2615 if (myAdditionals.at(tag).count(additional) > 0) {
2619 myAdditionals.at(tag)[additional->
getGUIGlObject()] = additional;
2621 myAdditionalIDs.at(tag)[additional->
getID()] = additional;
2623 myNumberOfNetworkElements++;
2625 myNet->getGNEApplicationWindow()->getFileBucketHandler()->registerAC(additional);
2627 myNet->addGLObjectIntoGrid(additional);
2629 if (myNet->isUpdateGeometryEnabled()) {
2633 myNet->getSavingStatus()->requireSaveAdditionals();
2642 auto itFind = myAdditionals.at(tag).find(additional->
getGUIGlObject());
2644 if (itFind == myAdditionals.at(tag).end()) {
2648 myAdditionals.at(tag).erase(itFind);
2650 myAdditionalIDs.at(tag).erase(myAdditionalIDs.at(tag).find(additional->
getID()));
2652 myNumberOfNetworkElements--;
2654 myNet->getGNEApplicationWindow()->getFileBucketHandler()->unregisterAC(additional);
2656 myNet->getViewNet()->getInspectedElements().uninspectAC(additional);
2658 myNet->getViewParent()->getInspectorFrame()->getHierarchicalElementTree()->removeCurrentEditedAttributeCarrier(additional);
2660 myNet->removeGLObjectFromGrid(additional);
2662 myNet->getNetworkPathManager()->removePath(additional);
2664 myNet->getSavingStatus()->requireSaveAdditionals();
2674 if (myTAZSourceSinks.at(sourceSinkTag).count(sourceSink) > 0) {
2677 myTAZSourceSinks.at(sourceSinkTag)[sourceSink] = sourceSink;
2678 myNumberOfNetworkElements++;
2680 myNet->getGNEApplicationWindow()->getFileBucketHandler()->registerAC(sourceSink);
2682 myNet->getSavingStatus()->requireSaveAdditionals();
2691 auto itFind = myTAZSourceSinks.at(tag).find(sourceSink);
2693 if (itFind == myTAZSourceSinks.at(tag).end()) {
2697 myTAZSourceSinks.at(tag).erase(itFind);
2698 myNumberOfNetworkElements--;
2700 myNet->getGNEApplicationWindow()->getFileBucketHandler()->unregisterAC(sourceSink);
2702 myNet->getViewNet()->getInspectedElements().uninspectAC(sourceSink);
2704 myNet->getViewParent()->getInspectorFrame()->getHierarchicalElementTree()->removeCurrentEditedAttributeCarrier(sourceSink);
2706 myNet->getSavingStatus()->requireSaveAdditionals();
2714 if (myDemandElements.at(tag).count(demandElement) > 0) {
2717 myDemandElements.at(tag)[demandElement->
getGUIGlObject()] = demandElement;
2719 myDemandElementIDs.at(tag)[demandElement->
getID()] = demandElement;
2721 myNumberOfDemandElements++;
2723 myNet->getGNEApplicationWindow()->getFileBucketHandler()->registerAC(demandElement);
2725 myNet->addGLObjectIntoGrid(demandElement);
2727 if (myNet->isUpdateGeometryEnabled()) {
2731 if (myNet->getViewNet()->getEditModes().isCurrentSupermodeDemand()) {
2737 myNet->getSavingStatus()->requireSaveDemandElements();
2745 auto viewParent = myNet->getViewParent();
2747 auto itFind = myDemandElements.at(tag).find(demandElement->
getGUIGlObject());
2749 if (itFind == myDemandElements.at(tag).end()) {
2753 myDemandElements.at(tag).erase(itFind);
2755 myDemandElementIDs.at(tag).erase(myDemandElementIDs.at(tag).find(demandElement->
getID()));
2757 myNumberOfDemandElements--;
2759 myNet->getGNEApplicationWindow()->getFileBucketHandler()->unregisterAC(demandElement);
2761 myNet->removeGLObjectFromGrid(demandElement);
2763 myNet->getViewNet()->getInspectedElements().uninspectAC(demandElement);
2766 if (myNet->getViewNet()->getLastCreatedRoute() == demandElement) {
2767 myNet->getViewNet()->setLastCreatedRoute(
nullptr);
2770 myNet->getDemandPathManager()->removePath(demandElement);
2774 viewParent->getInspectorFrame()->getHierarchicalElementTree()->removeCurrentEditedAttributeCarrier(demandElement);
2775 viewParent->getPersonPlanFrame()->getPersonHierarchy()->removeCurrentEditedAttributeCarrier(demandElement);
2776 viewParent->getContainerPlanFrame()->getContainerHierarchy()->removeCurrentEditedAttributeCarrier(demandElement);
2778 if (viewParent->getRouteDistributionFrame()->getDistributionSelector()->getCurrentDistribution() == demandElement) {
2779 viewParent->getRouteDistributionFrame()->getDistributionSelector()->setDistribution(
nullptr);
2781 if (viewParent->getTypeDistributionFrame()->getDistributionSelector()->getCurrentDistribution() == demandElement) {
2782 viewParent->getTypeDistributionFrame()->getDistributionSelector()->setDistribution(
nullptr);
2786 viewParent->getTypeDistributionFrame()->getDistributionValuesEditor()->refreshRows();
2789 viewParent->getRouteDistributionFrame()->getDistributionValuesEditor()->refreshRows();
2793 myNet->getSavingStatus()->requireSaveDemandElements();
2800 if (myDataSets.count(dataSet->
getID()) > 0) {
2803 myDataSets[dataSet->
getID()] = dataSet;
2804 myNumberOfDataElements++;
2806 myNet->getGNEApplicationWindow()->getFileBucketHandler()->registerAC(dataSet);
2808 myNet->getSavingStatus()->requireSaveDataElements();
2810 myNet->getViewNet()->getIntervalBar().markForUpdate();
2817 const auto finder = myDataSets.find(dataSet->
getID());
2818 if (finder == myDataSets.end()) {
2821 myDataSets.erase(finder);
2822 myNumberOfDataElements--;
2824 myNet->getGNEApplicationWindow()->getFileBucketHandler()->unregisterAC(dataSet);
2826 myNet->getViewNet()->getInspectedElements().uninspectAC(dataSet);
2828 myNet->getViewParent()->getInspectorFrame()->getHierarchicalElementTree()->removeCurrentEditedAttributeCarrier(dataSet);
2830 myNet->getSavingStatus()->requireSaveDataElements();
2832 myNet->getViewNet()->getIntervalBar().markForUpdate();
2843 myNumberOfMeanDataElements++;
2845 myNet->getGNEApplicationWindow()->getFileBucketHandler()->registerAC(meanData);
2847 myNet->getSavingStatus()->requireSaveMeanDatas();
2862 myNumberOfMeanDataElements--;
2864 myNet->getGNEApplicationWindow()->getFileBucketHandler()->unregisterAC(meanData);
2866 myNet->getViewNet()->getInspectedElements().uninspectAC(meanData);
2868 myNet->getViewParent()->getInspectorFrame()->getHierarchicalElementTree()->removeCurrentEditedAttributeCarrier(meanData);
2870 myNet->removeGLObjectFromGrid(meanData);
2872 myNet->getSavingStatus()->requireSaveMeanDatas();
2879 if (myNet->getViewNet()->getEditModes().isCurrentSupermodeDemand()) {
2881 switch (myNet->getViewNet()->getEditModes().demandEditMode) {
2883 if (tagProperty->
isType()) {
2884 myNet->getViewParent()->getVehicleFrame()->getTypeSelector()->refreshDemandElementSelector();
2888 if (tagProperty->
isType()) {
2889 myNet->getViewParent()->getTypeFrame()->getTypeSelector()->refreshTypeSelector(
true);
2893 if (tagProperty->
isType()) {
2894 myNet->getViewParent()->getTypeDistributionFrame()->getDistributionSelector()->refreshDistributionSelector();
2899 myNet->getViewParent()->getRouteDistributionFrame()->getDistributionSelector()->refreshDistributionSelector();
2903 if (tagProperty->
isType()) {
2904 myNet->getViewParent()->getPersonFrame()->getTypeSelector()->refreshDemandElementSelector();
2909 myNet->getViewParent()->getPersonPlanFrame()->getPersonSelector()->refreshDemandElementSelector();
2913 if (tagProperty->
isType()) {
2914 myNet->getViewParent()->getContainerFrame()->getTypeSelector()->refreshDemandElementSelector();
2919 myNet->getViewParent()->getContainerPlanFrame()->getContainerSelector()->refreshDemandElementSelector();
2923 myNet->getViewParent()->getStopFrame()->getStopParentSelector()->refreshDemandElementSelector();
2937 for (
const auto& junction : myJunctions) {
2938 ACs.push_back(junction.second);
2942 for (
const auto& edge : myEdges) {
2943 ACs.push_back(edge.second);
2947 for (
const auto& lane : myLanes) {
2948 ACs.push_back(lane.second);
2952 for (
const auto& connection : myConnections) {
2953 ACs.push_back(connection.second);
2957 for (
const auto& crossing : myCrossings) {
2958 ACs.push_back(crossing.second);
2962 for (
const auto& walkingArea : myWalkingAreas) {
2963 ACs.push_back(walkingArea.second);
2968 for (
const auto& additionalTag : myAdditionals) {
2969 if (additionalTag.first == tag->
getTag()) {
2970 for (
const auto& additional : additionalTag.second) {
2971 ACs.push_back(additional.second);
2978 for (
const auto& demandElementTag : myDemandElements) {
2979 if (demandElementTag.first == tag->
getTag()) {
2980 for (
const auto& demandElemet : demandElementTag.second) {
2981 ACs.push_back(demandElemet.second);
2989 for (
const auto& dataSet : myDataSets) {
2990 ACs.push_back(dataSet.second);
2994 for (
const auto& dataInterval : myDataIntervals) {
2995 ACs.push_back(dataInterval.second);
2998 for (
const auto& genericDataTag : myGenericDatas) {
2999 if (genericDataTag.first == tag->
getTag()) {
3000 for (
const auto& genericData : genericDataTag.second) {
3001 ACs.push_back(genericData.second);
3005 for (
const auto& meanDataTag : myMeanDatas) {
3006 if (meanDataTag.first == tag->
getTag()) {
3007 for (
const auto& meanData : meanDataTag.second) {
3008 ACs.push_back(meanData.second);
3015 retrieveAttributeCarriersRecursively(child, ACs);
3096 for (
const auto vehicle : vehicles) {
3097 myTemplates[vehicle->getTag()] =
new GNEVehicle(vehicle->getTag(), myNet);
3101 for (
const auto person : persons) {
3102 myTemplates[person->getTag()] =
new GNEPerson(person->getTag(), myNet);
3106 for (
const auto container : containers) {
3107 myTemplates[container->getTag()] =
new GNEContainer(container->getTag(), myNet);
3111 for (
const auto stopAndWaypoint : stopAndWaypoints) {
3112 myTemplates[stopAndWaypoint->getTag()] =
new GNEStop(stopAndWaypoint->getTag(), myNet);
3116 for (
const auto personTrip : personTrips) {
3117 myTemplates[personTrip->getTag()] =
new GNEPersonTrip(personTrip->getTag(), myNet);
3121 for (
const auto walk : walks) {
3122 myTemplates[walk->getTag()] =
new GNEWalk(walk->getTag(), myNet);
3126 for (
const auto ride : rides) {
3127 myTemplates[ride->getTag()] =
new GNERide(ride->getTag(), myNet);
3131 for (
const auto stopPerson : stopPersons) {
3132 myTemplates[stopPerson->getTag()] =
new GNEStopPlan(stopPerson->getTag(), myNet);
3136 for (
const auto transport : transports) {
3137 myTemplates[transport->getTag()] =
new GNETransport(transport->getTag(), myNet);
3141 for (
const auto tranship : tranships) {
3142 myTemplates[tranship->getTag()] =
new GNETranship(tranship->getTag(), myNet);
3146 for (
const auto stopContainer : stopContainers) {
3147 myTemplates[stopContainer->getTag()] =
new GNEStopPlan(stopContainer->getTag(), myNet);
3156 for (
const auto& AC : myTemplates) {
3157 AC.second->resetDefaultValues(
false);
3160 fillPlanTemplates();
3165 for (
auto& AC : myTemplates) {
3171std::map<SumoXMLTag, GNEAttributeCarrier*>
3179 if (myTemplates.count(tag) > 0) {
3180 return myTemplates.at(tag);
3189 for (
const auto& templateAC : myTemplates) {
3190 if (templateAC.second->getTagProperty()->getSelectorText() == selectorText) {
3191 return templateAC.second;
3204const std::vector<std::pair<GNETagProperties*, GNEDemandElement*>>&
3206 return myPlanTemplates.at(tag);
3355 mySumoConfigSaved =
false;
3361 mySumoConfigSaved =
true;
3367 return mySumoConfigSaved;
3373 myNeteditConfigSaved =
false;
3379 myNeteditConfigSaved =
true;
3385 return myNeteditConfigSaved;
3391 myNetworkSaved =
false;
3393 myNeteditConfigSaved =
false;
3394 mySumoConfigSaved =
false;
3400 myNetworkSaved =
true;
3406 return myNetworkSaved;
3430 myEdgeTypeSaved =
false;
3436 myEdgeTypeSaved =
true;
3442 return myEdgeTypeSaved;
3448 myAdditionalSaved =
false;
3450 myNeteditConfigSaved =
false;
3451 mySumoConfigSaved =
false;
3457 myAdditionalSaved =
true;
3463 return myAdditionalSaved;
3469 myDemandElementSaved =
false;
3471 myNeteditConfigSaved =
false;
3472 mySumoConfigSaved =
false;
3478 myDemandElementSaved =
true;
3484 return myDemandElementSaved;
3490 myDataElementSaved =
false;
3492 myNeteditConfigSaved =
false;
3493 mySumoConfigSaved =
false;
3499 myDataElementSaved =
true;
3505 return myDataElementSaved;
3511 myMeanDataElementSaved =
false;
3513 myNeteditConfigSaved =
false;
3514 mySumoConfigSaved =
false;
3520 myMeanDataElementSaved =
true;
3526 return myMeanDataElementSaved;
3532 auto GNEApp = myNet->getGNEApplicationWindow();
3540 }
else if (myNetworkSaved) {
3564 auto GNEApp = myNet->getGNEApplicationWindow();
3572 }
else if (myAdditionalSaved) {
3596 auto GNEApp = myNet->getGNEApplicationWindow();
3604 }
else if (myDemandElementSaved) {
3628 auto GNEApp = myNet->getGNEApplicationWindow();
3636 }
else if (myDataElementSaved) {
3660 auto GNEApp = myNet->getGNEApplicationWindow();
3668 }
else if (myMeanDataElementSaved) {
3696 myReplaced(replaced),
3707 myTllcont.replaceRemoved(myBy, -1, myReplaced, -1,
true);
3714 myTllcont.replaceRemoved(myReplaced, -1, myBy, -1,
true);
3720 return TL(
"Redo replace in TLS");
3726 return TL(
"Undo replace in TLS");
3732 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 updateGeometryAfterNetbuild(bool rebuildNBNodeCrossings=false)
update pre-computed geometry information without modifying netbuild structures
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::vector< GNEAdditional * > getUnselectedShapes() const
get unselected shapes
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.
const std::unordered_map< SumoXMLTag, std::map< const std::string, GNEMeanData * >, std::hash< int > > & getMeanDatas() const
get meanDatas
GNEJunction * registerJunction(GNEJunction *junction, bool afterVolatile)
registers a junction in containers
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