115 for (
const auto& additionalTagProperty : additionalTagProperties) {
116 myAdditionals.insert(std::make_pair(additionalTagProperty->getTag(), std::unordered_map<const GUIGlObject*, GNEAdditional*>()));
118 myAdditionalIDs.insert(std::make_pair(additionalTagProperty->getTag(), std::map<const std::string, GNEAdditional*>()));
125 for (
const auto& demandElementTagProperty : demandElementTagProperties) {
126 myDemandElements.insert(std::make_pair(demandElementTagProperty->getTag(), std::unordered_map<const GUIGlObject*, GNEDemandElement*>()));
127 if (demandElementTagProperty->hasAttribute(
SUMO_ATTR_ID)) {
128 myDemandElementIDs.insert(std::make_pair(demandElementTagProperty->getTag(), std::map<const std::string, GNEDemandElement*>()));
132 for (
const auto& stopTagProperty : stopTagProperties) {
133 myDemandElements.insert(std::make_pair(stopTagProperty->getTag(), std::unordered_map<const GUIGlObject*, GNEDemandElement*>()));
137 for (
const auto& genericDataElementTagProperty : genericDataElementTagProperties) {
138 myGenericDatas.insert(std::make_pair(genericDataElementTagProperty->getTag(), std::unordered_map<const GUIGlObject*, GNEGenericData*>()));
142 for (
const auto& meanDataTagProperty : meanDataTagProperties) {
143 myMeanDatas.insert(std::make_pair(meanDataTagProperty->getTag(), std::map<const std::string, GNEMeanData*>()));
150 for (
const auto& edgeType : myEdgeTypes) {
151 edgeType.second->decRef(
"GNENetHelper::~GNENet");
152 delete edgeType.second;
155 for (
const auto& edge : myEdges) {
156 edge.second->decRef(
"GNENetHelper::~GNENet");
160 for (
const auto& junction : myJunctions) {
161 junction.second->decRef(
"GNENetHelper::~GNENet");
162 delete junction.second;
165 for (
const auto& additionalTag : myAdditionals) {
166 for (
const auto& additional : additionalTag.second) {
168 additional.second->decRef();
169 delete additional.second;
173 for (
const auto& demandElementTag : myDemandElements) {
174 for (
const auto& demandElement : demandElementTag.second) {
176 demandElement.second->decRef();
177 delete demandElement.second;
181 for (
const auto& dataSet : myDataSets) {
183 dataSet.second->decRef();
184 delete dataSet.second;
187 for (
const auto& meanDataTag : myMeanDatas) {
188 for (
const auto& meanData : meanDataTag.second) {
190 meanData.second->decRef();
191 delete meanData.second;
199 std::map<std::string, GNEEdge*> newEdgeMap;
200 std::map<std::string, GNEJunction*> newJunctionMap;
202 for (
const auto& edge : myEdges) {
203 edge.second->setEdgeID(edge.second->getNBEdge()->getID());
204 newEdgeMap[edge.second->getNBEdge()->getID()] = edge.second;
206 for (
const auto& junction : myJunctions) {
207 newJunctionMap[junction.second->getNBNode()->getID()] = junction.second;
208 junction.second->setNetworkElementID(junction.second->getNBNode()->getID());
210 myEdges = newEdgeMap;
211 myJunctions = newJunctionMap;
228 for (
const auto& lane : myEdges.at(AC->
getID())->getChildLanes()) {
259 return myNumberOfNetworkElements;
265 return myNumberOfDemandElements;
271 return myNumberOfDataElements;
280 if (
object !=
nullptr) {
286 throw ProcessError(
"GUIGlObject does not match the declared type");
290 }
else if (hardFail) {
291 throw ProcessError(
"Attempted to retrieve non-existant GUIGlObject");
298std::vector<GNEAttributeCarrier*>
300 std::vector<GNEAttributeCarrier*> ACs;
303 const auto rootTagProperty = myNet->getTagPropertiesDatabase()->getTagProperty(
SUMO_TAG_ROOTFILE,
true);
304 ACs.reserve(myNumberOfNetworkElements + myNumberOfDemandElements + myNumberOfDataElements);
305 retrieveAttributeCarriersRecursively(rootTagProperty, ACs);
307 const auto tagProperty = myNet->getTagPropertiesDatabase()->getTagProperty(tag,
true);
310 ACs.reserve(myNumberOfNetworkElements);
312 ACs.reserve(myNumberOfDemandElements);
314 ACs.reserve(myNumberOfDataElements + myNumberOfMeanDataElements);
316 retrieveAttributeCarriersRecursively(tagProperty, ACs);
322std::vector<GNEAttributeCarrier*>
324 std::vector<GNEAttributeCarrier*> result;
328 for (
const auto& junction : myJunctions) {
329 if (!onlySelected || junction.second->isAttributeCarrierSelected()) {
330 result.push_back(junction.second);
333 for (
const auto& crossing : myCrossings) {
334 if (!onlySelected || crossing.second->isAttributeCarrierSelected()) {
335 result.push_back(crossing.second);
338 for (
const auto& edge : myEdges) {
339 if (!onlySelected || edge.second->isAttributeCarrierSelected()) {
340 result.push_back(edge.second);
343 for (
const auto& lane : myLanes) {
344 if (!onlySelected || lane.second->isAttributeCarrierSelected()) {
345 result.push_back(lane.second);
348 for (
const auto& connection : myConnections) {
349 if (!onlySelected || connection.second->isAttributeCarrierSelected()) {
350 result.push_back(connection.second);
353 for (
const auto& additionalSet : myAdditionals) {
354 for (
const auto& additional : additionalSet.second) {
355 if (!onlySelected || additional.second->isAttributeCarrierSelected()) {
356 result.push_back(additional.second);
361 for (
const auto& demandElementSet : myDemandElements) {
362 for (
const auto& demandElement : demandElementSet.second) {
363 if (!onlySelected || demandElement.second->isAttributeCarrierSelected()) {
364 result.push_back(demandElement.second);
369 for (
const auto& dataSet : myDataSets) {
370 if (!onlySelected || dataSet.second->isAttributeCarrierSelected()) {
371 result.push_back(dataSet.second);
374 for (
const auto& dataInterval : myDataIntervals) {
375 if (!onlySelected || dataInterval.second->isAttributeCarrierSelected()) {
376 result.push_back(dataInterval.second);
379 for (
const auto& genericDataSet : myGenericDatas) {
380 for (
const auto& genericData : genericDataSet.second) {
381 if (!onlySelected || genericData.second->isAttributeCarrierSelected()) {
382 result.push_back(genericData.second);
386 for (
const auto& meanDataSet : myMeanDatas) {
387 for (
const auto& meanData : meanDataSet.second) {
388 if (!onlySelected || meanData.second->isAttributeCarrierSelected()) {
389 result.push_back(meanData.second);
398std::vector<GNEAttributeCarrier*>
401 const auto& editModes = myNet->getViewNet()->getEditModes();
403 std::vector<GNEAttributeCarrier*> result;
411 if (ignoreCurrentSupermode) {
412 result.push_back(AC);
415 result.push_back(AC);
417 result.push_back(AC);
419 result.push_back(AC);
429 auto it = myJunctions.find(
id);
430 if (it != myJunctions.end()) {
435 throw UnknownElement(
"Attempted to retrieve non-existant junction " +
id);
442const std::map<std::string, GNEJunction*>&
448std::vector<GNEJunction*>
450 std::vector<GNEJunction*> result;
452 for (
const auto& junction : myJunctions) {
453 if (junction.second->isAttributeCarrierSelected()) {
454 result.push_back(junction.second);
464 junction->
incRef(
"GNENet::registerJunction");
467 myNumberOfNetworkElements++;
471 myNet->addGLObjectIntoGrid(junction);
489 auto junctionCopy = myJunctions;
493 for (
const auto& junction : junctionCopy) {
497 myJunctions[prefix + junction.first] = junction.second;
504 if (myJunctions.count(junction->
getID()) == 0) {
505 throw ProcessError(junction->
getTagStr() +
" with ID='" + junction->
getID() +
"' doesn't exist in AttributeCarriers.junction");
506 }
else if (myJunctions.count(newID) != 0) {
507 throw ProcessError(
"There is another " + junction->
getTagStr() +
" with new ID='" + newID +
"' in myJunctions");
512 myNet->getNetBuilder()->getNodeCont().rename(junction->
getNBNode(), newID);
516 myJunctions[junction->
getID()] = junction;
520 myNet->getSavingStatus()->requireSaveNetwork();
528 for (
const auto& junction : myJunctions) {
529 if (junction.second->isAttributeCarrierSelected()) {
539 auto it = myCrossings.find(glObject);
540 if (it != myCrossings.end()) {
552const std::unordered_map<const GUIGlObject*, GNECrossing*>&
558std::vector<GNECrossing*>
560 std::vector<GNECrossing*> result;
562 for (
const auto& crossing : myCrossings) {
563 if (crossing.second->isAttributeCarrierSelected()) {
564 result.push_back(crossing.second);
574 for (
const auto& crossing : myCrossings) {
575 if (crossing.second->isAttributeCarrierSelected()) {
585 auto it = myWalkingAreas.find(glObject);
586 if (it != myWalkingAreas.end()) {
598const std::unordered_map<const GUIGlObject*, GNEWalkingArea*>&
600 return myWalkingAreas;
604std::vector<GNEWalkingArea*>
606 std::vector<GNEWalkingArea*> result;
608 for (
const auto& walkingArea : myWalkingAreas) {
609 if (walkingArea.second->isAttributeCarrierSelected()) {
610 result.push_back(walkingArea.second);
620 for (
const auto& walkingArea : myWalkingAreas) {
621 if (walkingArea.second->isAttributeCarrierSelected()) {
631 if (myEdgeTypes.count(
id) > 0) {
632 return myEdgeTypes.at(
id);
633 }
else if (hardFail) {
635 throw UnknownElement(
"Attempted to retrieve non-existant EdgeType " +
id);
645 edgeType->
incRef(
"GNENet::registerEdgeType");
652const std::map<std::string, GNEEdgeType*>&
665 if (myEdgeTypes.count(edgeType->
getID()) == 0) {
666 throw ProcessError(edgeType->
getTagStr() +
" with ID='" + edgeType->
getID() +
"' doesn't exist in AttributeCarriers.edgeType");
667 }
else if (myEdgeTypes.count(newID) != 0) {
668 throw ProcessError(
"There is another " + edgeType->
getTagStr() +
" with new ID='" + newID +
"' in myEdgeTypes");
671 myEdgeTypes.erase(edgeType->
getID());
673 myNet->getNetBuilder()->getTypeCont().updateEdgeTypeID(edgeType->
getID(), newID);
677 myEdgeTypes[edgeType->
getID()] = edgeType;
679 myNet->getSavingStatus()->requireSaveNetwork();
687 while (myEdgeTypes.count(
"edgeType_" +
toString(counter)) != 0) {
690 return (
"edgeType_" +
toString(counter));
696 auto it = myEdges.find(
id);
697 if (it != myEdges.end()) {
702 throw UnknownElement(
"Attempted to retrieve non-existant edge " +
id);
711 if ((from ==
nullptr) || (to ==
nullptr)) {
714 std::vector<GNEEdge*> edges;
717 if (edgeTo->getToJunction() == to) {
718 edges.push_back(edgeTo);
725const std::map<std::string, GNEEdge*>&
733 std::vector<GNEEdge*> result;
735 for (
const auto& edge : myEdges) {
736 if (edge.second->isAttributeCarrierSelected()) {
737 result.push_back(edge.second);
746 edge->
incRef(
"GNENet::registerEdge");
750 myNumberOfNetworkElements++;
766 myNet->addGLObjectIntoGrid(edge);
780 auto edgeCopy = myEdges;
784 for (
const auto& edge : edgeCopy) {
788 myEdges[prefix + edge.first] = edge.second;
798 while (myEdges.count(edgePrefix +
toString(myNet->getEdgeIDCounter())) != 0) {
799 myNet->getEdgeIDCounter()++;
801 return edgePrefix +
toString(myNet->getEdgeIDCounter());
807 if (myEdges.count(edge->
getID()) == 0) {
809 }
else if (myEdges.count(newID) != 0) {
810 throw ProcessError(
"There is another " + edge->
getTagStr() +
" with new ID='" + newID +
"' in myEdges");
815 myNet->getNetBuilder()->getEdgeCont().rename(edge->
getNBEdge(), newID);
819 myEdges[edge->
getID()] = edge;
822 lane->updateConnectionIDs();
825 myNet->getSavingStatus()->requireSaveNetwork();
833 for (
const auto& edge : myEdges) {
834 if (edge.second->isAttributeCarrierSelected()) {
845 const GNEEdge* edge = retrieveEdge(edge_id,
false);
846 if (edge !=
nullptr) {
850 if (laneIt->getID() == id) {
855 if (lane ==
nullptr) {
862 if (checkVolatileChange && (myNet->getEdgesAndNumberOfLanes().count(edge_id) == 1) &&
863 myNet->getEdgesAndNumberOfLanes().at(edge_id) != (
int)edge->
getChildLanes().size()) {
868 }
else if (hardFail) {
878 auto it = myLanes.find(glObject);
879 if (it != myLanes.end()) {
891const std::unordered_map<const GUIGlObject*, GNELane*>&
899 std::vector<GNELane*> result;
901 for (
const auto& lane : myLanes) {
902 if (lane.second->isAttributeCarrierSelected()) {
903 result.push_back(lane.second);
913 for (
const auto& lane : myLanes) {
914 if (lane.second->isAttributeCarrierSelected()) {
925 for (
const auto& connection : myConnections) {
926 if (connection.second->getID() == id) {
927 return connection.second;
932 throw UnknownElement(
"Attempted to retrieve non-existant connection " +
id);
941 auto it = myConnections.find(glObject);
942 if (it != myConnections.end()) {
954const std::unordered_map<const GUIGlObject*, GNEConnection*>&
956 return myConnections;
960std::vector<GNEConnection*>
962 std::vector<GNEConnection*> result;
964 for (
const auto& connection : myConnections) {
965 if (connection.second->isAttributeCarrierSelected()) {
966 result.push_back(connection.second);
976 for (
const auto& connection : myConnections) {
977 if (connection.second->isAttributeCarrierSelected()) {
987 auto it = myInternalLanes.find(glObject);
988 if (it != myInternalLanes.end()) {
1002 auto it = myAdditionalIDs.at(type).find(
id);
1003 if (it != myAdditionalIDs.at(type).end()) {
1007 throw ProcessError(
"Attempted to retrieve non-existant additional (string)");
1016 for (
const auto& type : types) {
1017 auto it = myAdditionalIDs.at(type).find(
id);
1018 if (it != myAdditionalIDs.at(type).end()) {
1023 throw ProcessError(
"Attempted to retrieve non-existant additional (string)");
1033 for (
const auto& additionalTag : myAdditionals) {
1034 auto it = additionalTag.second.find(glObject);
1035 if (it != additionalTag.second.end()) {
1040 throw ProcessError(
"Attempted to retrieve non-existant additional (glObject)");
1066 throw ProcessError(
"Attempted to retrieve non-existant rerouter interval");
1070const std::unordered_map<SumoXMLTag, std::unordered_map<const GUIGlObject*, GNEAdditional*>, std::hash<int> >&
1072 return myAdditionals;
1076std::vector<GNEAdditional*>
1078 std::vector<GNEAdditional*> result;
1080 for (
const auto& additionalsTags : myAdditionals) {
1081 for (
const auto& additional : additionalsTags.second) {
1082 if (additional.second->isAttributeCarrierSelected()) {
1083 result.push_back(additional.second);
1091std::vector<GNEAdditional*>
1093 std::vector<GNEAdditional*> result;
1095 for (
const auto& additionalsTags : myAdditionals) {
1096 for (
const auto& additional : additionalsTags.second) {
1097 if (additional.second->getTagProperty()->isShapeElement() && additional.second->isAttributeCarrierSelected()) {
1098 result.push_back(additional.second);
1109 for (
const auto& additionalsTag : myAdditionals) {
1110 counter += (int)additionalsTag.second.size();
1119 for (
const auto& additionalsTags : myAdditionals) {
1120 for (
const auto& additional : additionalsTags.second) {
1121 myNet->removeGLObjectFromGrid(additional.second);
1125 for (
auto& additionals : myAdditionals) {
1126 additionals.second.clear();
1128 for (
auto& additionals : myAdditionalIDs) {
1129 additionals.second.clear();
1137 const auto it = myAdditionalIDs.at(tag).find(additional->
getID());
1138 if (it == myAdditionalIDs.at(tag).end()) {
1139 throw ProcessError(additional->
getTagStr() +
" with ID='" + additional->
getID() +
"' doesn't exist in AttributeCarriers.additionals");
1142 myAdditionalIDs.at(tag).erase(it);
1145 myAdditionalIDs.at(tag)[newID] = additional;
1157 prefix = neteditOptions.getString(
"busStop-prefix");
1159 prefix = neteditOptions.getString(
"trainStop-prefix");
1161 prefix = neteditOptions.getString(
"containerStop-prefix");
1163 prefix = neteditOptions.getString(
"chargingStation-prefix");
1165 prefix = neteditOptions.getString(
"parkingArea-prefix");
1167 prefix = neteditOptions.getString(
"e1Detector-prefix");
1169 prefix = neteditOptions.getString(
"e2Detector-prefix");
1171 prefix = neteditOptions.getString(
"e3Detector-prefix");
1173 prefix = neteditOptions.getString(
"e1InstantDetector-prefix");
1175 prefix = neteditOptions.getString(
"rerouter-prefix");
1177 prefix = neteditOptions.getString(
"calibrator-prefix");
1179 prefix = neteditOptions.getString(
"routeProbe-prefix");
1181 prefix = neteditOptions.getString(
"vss-prefix");
1183 prefix = neteditOptions.getString(
"tractionSubstation-prefix");
1185 prefix = neteditOptions.getString(
"overheadWire-prefix");
1187 prefix = neteditOptions.getString(
"polygon-prefix");
1189 prefix = neteditOptions.getString(
"poi-prefix");
1193 prefix = neteditOptions.getString(
"jps.walkableArea-prefix");
1195 prefix = neteditOptions.getString(
"jps.obstacle-prefix");
1220 while (retrieveAdditional(tag, prefix +
"_" +
toString(counter),
false) !=
nullptr) {
1225 return (prefix +
"_" +
toString(counter));
1232 for (
const auto& additionalsTags : myAdditionals) {
1233 for (
const auto& additional : additionalsTags.second) {
1234 if (additional.second->isAttributeCarrierSelected()) {
1245 return getNumberOfSelectedAdditionals() -
1247 getNumberOfSelectedPolygons() - getNumberOfSelectedPOIs() -
1249 getNumberOfSelectedJpsWalkableAreas() - getNumberOfSelectedJpsObstacles() -
1251 getNumberOfSelectedTAZs() -
1253 getNumberOfSelectedWires();
1261 if (poly.second->isAttributeCarrierSelected()) {
1273 if (walkableArea.second->isAttributeCarrierSelected()) {
1285 if (obstacle.second->isAttributeCarrierSelected()) {
1297 if (
POI.second->isAttributeCarrierSelected()) {
1302 if (POILane.second->isAttributeCarrierSelected()) {
1307 if (
POIGEO.second->isAttributeCarrierSelected()) {
1319 if (
TAZ.second->isAttributeCarrierSelected()) {
1330 for (
const auto& additionalsTags : myAdditionals) {
1331 for (
const auto& additional : additionalsTags.second) {
1332 if (additional.second->isAttributeCarrierSelected() && additional.second->getTagProperty()->isWireElement()) {
1344 for (
const auto& TAZSourceSinkTag : myTAZSourceSinks) {
1345 auto it = TAZSourceSinkTag.second.find(sourceSink);
1346 if (it != TAZSourceSinkTag.second.end()) {
1351 throw ProcessError(
"Attempted to retrieve non-existant sourceSink (glObject)");
1358const std::unordered_map<SumoXMLTag, std::unordered_map<const GNEAttributeCarrier*, GNETAZSourceSink*>, std::hash<int> >&
1360 return myTAZSourceSinks;
1367 for (
const auto& sourceSinksTag : myTAZSourceSinks) {
1368 counter += (int)sourceSinksTag.second.size();
1377 for (
auto& sourceSinksTags : myTAZSourceSinks) {
1378 sourceSinksTags.second.clear();
1385 auto it = myDemandElementIDs.at(type).find(
id);
1386 if (it != myDemandElementIDs.at(type).end()) {
1390 throw ProcessError(
"Attempted to retrieve non-existant demand element (string)");
1399 for (
const auto& type : types) {
1400 auto it = myDemandElementIDs.at(type).find(
id);
1401 if (it != myDemandElementIDs.at(type).end()) {
1406 throw ProcessError(
"Attempted to retrieve non-existant demand element (string)");
1416 for (
const auto& demandElementTag : myDemandElements) {
1417 auto it = demandElementTag.second.find(glObject);
1418 if (it != demandElementTag.second.end()) {
1423 throw ProcessError(
"Attempted to retrieve non-existant demandElement (glObject)");
1430std::vector<GNEDemandElement*>
1432 std::vector<GNEDemandElement*> result;
1434 for (
const auto& demandElementTag : myDemandElements) {
1435 for (
const auto& demandElement : demandElementTag.second) {
1436 if (demandElement.second->isAttributeCarrierSelected()) {
1437 result.push_back(demandElement.second);
1445const std::unordered_map<SumoXMLTag, std::unordered_map<const GUIGlObject*, GNEDemandElement*>, std::hash<int> >&
1447 return myDemandElements;
1456 const auto tagProperty = myNet->getTagPropertiesDatabase()->getTagProperty(tag,
true);
1460 prefix = neteditOptions.getString(
"route-prefix");
1462 prefix = neteditOptions.getString(
"routeDistribution-prefix");
1464 prefix = neteditOptions.getString(
"vType-prefix");
1466 prefix = neteditOptions.getString(
"vTypeDistribution-prefix");
1468 prefix = neteditOptions.getString(
"trip-prefix");
1469 }
else if (tagProperty->isVehicle() && !tagProperty->isFlow()) {
1470 prefix = neteditOptions.getString(
"vehicle-prefix");
1471 }
else if (tagProperty->isPerson()) {
1472 if (tagProperty->isFlow()) {
1473 prefix = neteditOptions.getString(
"personflow-prefix");
1475 prefix = neteditOptions.getString(
"person-prefix");
1477 }
else if (tagProperty->isContainer()) {
1478 if (tagProperty->isFlow()) {
1479 prefix = neteditOptions.getString(
"containerflow-prefix");
1481 prefix = neteditOptions.getString(
"container-prefix");
1483 }
else if (tagProperty->isFlow()) {
1484 prefix = neteditOptions.getString(
"flow-prefix");
1509 while (retrieveDemandElement(tag, prefix +
"_" +
toString(counter),
false) !=
nullptr) {
1514 return (prefix +
"_" +
toString(counter));
1532 for (
const auto& demandElementsTags : myDemandElements) {
1533 for (
const auto& demandElement : demandElementsTags.second) {
1534 myNet->removeGLObjectFromGrid(demandElement.second);
1538 for (
auto& demandElements : myDemandElements) {
1539 demandElements.second.clear();
1541 for (
auto& demandElements : myDemandElementIDs) {
1542 demandElements.second.clear();
1550 const auto it = myDemandElementIDs.at(tag).find(demandElement->
getID());
1551 if (it == myDemandElementIDs.at(tag).end()) {
1552 throw ProcessError(demandElement->
getTagStr() +
" with ID='" + demandElement->
getID() +
"' doesn't exist in AttributeCarriers.demandElements");
1555 myDemandElementIDs.at(tag).erase(it);
1558 myDemandElementIDs.at(tag)[newID] = demandElement;
1568 myDemandElementIDs.at(defaultVehicleType->
getTagProperty()->
getTag()).insert(std::make_pair(defaultVehicleType->
getID(), defaultVehicleType));
1569 defaultVehicleType->
incRef(
"GNENet::DEFAULT_VEHTYPE");
1574 myDemandElementIDs.at(defaultBikeType->
getTagProperty()->
getTag()).insert(std::make_pair(defaultBikeType->
getID(), defaultBikeType));
1576 defaultBikeType->
incRef(
"GNENet::DEFAULT_BIKETYPE_ID");
1581 myDemandElementIDs.at(defaultTaxiType->
getTagProperty()->
getTag()).insert(std::make_pair(defaultTaxiType->
getID(), defaultTaxiType));
1583 defaultTaxiType->
incRef(
"GNENet::DEFAULT_TAXITYPE_ID");
1588 myDemandElementIDs.at(defaultRailType->
getTagProperty()->
getTag()).insert(std::make_pair(defaultRailType->
getID(), defaultRailType));
1590 defaultRailType->
incRef(
"GNENet::DEFAULT_RAILTYPE_ID");
1595 myDemandElementIDs.at(defaultPersonType->
getTagProperty()->
getTag()).insert(std::make_pair(defaultPersonType->
getID(), defaultPersonType));
1597 defaultPersonType->
incRef(
"GNENet::DEFAULT_PEDTYPE_ID");
1602 myDemandElementIDs.at(defaultContainerType->
getTagProperty()->
getTag()).insert(std::make_pair(defaultContainerType->
getID(), defaultContainerType));
1604 defaultContainerType->
incRef(
"GNENet::DEFAULT_CONTAINERTYPE_ID");
1610 return myStopIndex++;
1617 for (
const auto& demandElementsTags : myDemandElements) {
1618 for (
const auto& demandElement : demandElementsTags.second) {
1619 if (demandElement.second->isAttributeCarrierSelected()) {
1633 if (route.second->isAttributeCarrierSelected()) {
1639 if (vehicle.second->getChildDemandElements().front()->isAttributeCarrierSelected()) {
1644 if (flow.second->getChildDemandElements().front()->isAttributeCarrierSelected()) {
1657 if (vehicle.second->isAttributeCarrierSelected()) {
1661 for (
const auto& trip : myDemandElements.at(
SUMO_TAG_TRIP)) {
1662 if (trip.second->isAttributeCarrierSelected()) {
1667 if (vehicle.second->isAttributeCarrierSelected()) {
1671 for (
const auto& flow : myDemandElements.at(
SUMO_TAG_FLOW)) {
1672 if (flow.second->isAttributeCarrierSelected()) {
1677 if (flow.second->isAttributeCarrierSelected()) {
1682 if (flow.second->isAttributeCarrierSelected()) {
1695 if (person.second->isAttributeCarrierSelected()) {
1700 if (personFlow.second->isAttributeCarrierSelected()) {
1713 for (
const auto& personPlan : person.second->getChildDemandElements()) {
1714 if (personPlan->getTagProperty()->isPlanPersonTrip() && personPlan->isAttributeCarrierSelected()) {
1720 for (
const auto& personPlan : personFlow.second->getChildDemandElements()) {
1721 if (personPlan->getTagProperty()->isPlanPersonTrip() && personPlan->isAttributeCarrierSelected()) {
1735 for (
const auto& personPlan : person.second->getChildDemandElements()) {
1736 if (personPlan->getTagProperty()->isPlanWalk() && personPlan->isAttributeCarrierSelected()) {
1742 for (
const auto& personPlan : personFlow.second->getChildDemandElements()) {
1743 if (personPlan->getTagProperty()->isPlanWalk() && personPlan->isAttributeCarrierSelected()) {
1757 for (
const auto& personPlan : person.second->getChildDemandElements()) {
1758 if (personPlan->getTagProperty()->isPlanRide() && personPlan->isAttributeCarrierSelected()) {
1764 for (
const auto& personPlan : personFlow.second->getChildDemandElements()) {
1765 if (personPlan->getTagProperty()->isPlanRide() && personPlan->isAttributeCarrierSelected()) {
1779 if (container.second->isAttributeCarrierSelected()) {
1784 if (containerFlow.second->isAttributeCarrierSelected()) {
1797 for (
const auto& containerPlan : container.second->getChildDemandElements()) {
1798 if (containerPlan->getTagProperty()->isPlanTransport() && containerPlan->isAttributeCarrierSelected()) {
1804 for (
const auto& containerPlan : containerFlow.second->getChildDemandElements()) {
1805 if (containerPlan->getTagProperty()->isPlanTransport() && containerPlan->isAttributeCarrierSelected()) {
1819 for (
const auto& containerPlan : container.second->getChildDemandElements()) {
1820 if (containerPlan->getTagProperty()->isPlanTranship() && containerPlan->isAttributeCarrierSelected()) {
1826 for (
const auto& containerPlan : containerFlow.second->getChildDemandElements()) {
1827 if (containerPlan->getTagProperty()->isPlanTranship() && containerPlan->isAttributeCarrierSelected()) {
1841 if (route.second->isAttributeCarrierSelected()) {
1846 for (
const auto& trip : myDemandElements.at(
SUMO_TAG_TRIP)) {
1847 for (
const auto& stop : trip.second->getChildDemandElements()) {
1848 if (stop->getTagProperty()->isVehicleStop() && stop->isAttributeCarrierSelected()) {
1854 for (
const auto& stop : vehicle.second->getChildDemandElements().front()->getChildDemandElements()) {
1855 if (stop->getTagProperty()->isVehicleStop() && stop->isAttributeCarrierSelected()) {
1860 for (
const auto& flow : myDemandElements.at(
SUMO_TAG_FLOW)) {
1861 for (
const auto& stop : flow.second->getChildDemandElements()) {
1862 if (stop->getTagProperty()->isVehicleStop() && stop->isAttributeCarrierSelected()) {
1868 for (
const auto& stop : flow.second->getChildDemandElements().front()->getChildDemandElements()) {
1869 if (stop->getTagProperty()->isVehicleStop() && stop->isAttributeCarrierSelected()) {
1876 for (
const auto& personPlan : person.second->getChildDemandElements()) {
1877 if (personPlan->getTagProperty()->isPlanStopPerson() && personPlan->isAttributeCarrierSelected()) {
1883 for (
const auto& personPlan : personFlow.second->getChildDemandElements()) {
1884 if (personPlan->getTagProperty()->isPlanStopPerson() && personPlan->isAttributeCarrierSelected()) {
1891 for (
const auto& containerPlan : container.second->getChildDemandElements()) {
1892 if (containerPlan->getTagProperty()->isPlanStopContainer() && containerPlan->isAttributeCarrierSelected()) {
1898 for (
const auto& containerPlan : containerFlow.second->getChildDemandElements()) {
1899 if (containerPlan->getTagProperty()->isPlanStopContainer() && containerPlan->isAttributeCarrierSelected()) {
1910 for (
const auto& dataSet : myDataSets) {
1911 if (dataSet.second->getID() == id) {
1912 return dataSet.second;
1916 throw ProcessError(
"Attempted to retrieve non-existant data set");
1923const std::map<const std::string, GNEDataSet*>&
1934 while (retrieveDataSet(prefix +
"_" +
toString(counter),
false) !=
nullptr) {
1937 return (prefix +
"_" +
toString(counter));
1943 if (myDataIntervals.count(AC)) {
1944 return myDataIntervals.at(AC);
1945 }
else if (hardFail) {
1946 throw ProcessError(
"Attempted to retrieve non-existant data interval");
1953const std::unordered_map<const GNEAttributeCarrier*, GNEDataInterval*>&
1955 return myDataIntervals;
1961 if (myDataIntervals.count(AC) > 0) {
1964 myDataIntervals[AC] = dataInterval;
1967 myNet->getViewNet()->getIntervalBar().markForUpdate();
1973 const auto finder = myDataIntervals.find(dataInterval);
1974 if (finder == myDataIntervals.end()) {
1977 myDataIntervals.erase(finder);
1980 myNet->getViewNet()->getInspectedElements().uninspectAC(dataInterval);
1982 myNet->getViewNet()->getViewParent()->getInspectorFrame()->getHierarchicalElementTree()->removeCurrentEditedAttributeCarrier(dataInterval);
1984 myNet->getViewNet()->getIntervalBar().markForUpdate();
1991 for (
const auto& genericDataTag : myGenericDatas) {
1992 auto it = genericDataTag.second.find(glObject);
1993 if (it != genericDataTag.second.end()) {
1998 throw ProcessError(
"Attempted to retrieve non-existant generic (glObject)");
2005std::vector<GNEGenericData*>
2007 std::vector<GNEGenericData*> result;
2009 for (
const auto& genericDataTag : myGenericDatas) {
2010 for (
const auto& genericData : genericDataTag.second) {
2011 if (genericData.second->isAttributeCarrierSelected()) {
2012 result.push_back(genericData.second);
2020const std::unordered_map<SumoXMLTag, std::unordered_map<const GUIGlObject*, GNEGenericData*>, std::hash<int> >&
2022 return myGenericDatas;
2026std::vector<GNEGenericData*>
2029 std::vector<GNEGenericData*> genericDatas;
2031 for (
const auto& genericData : myGenericDatas.at(genericDataTag)) {
2033 if ((genericData.second->getDataIntervalParent()->getAttributeDouble(
SUMO_ATTR_BEGIN) >= begin) &&
2034 (genericData.second->getDataIntervalParent()->getAttributeDouble(
SUMO_ATTR_END) <= end)) {
2035 genericDatas.push_back(genericData.second);
2038 return genericDatas;
2046 for (
const auto& genericDataTag : myGenericDatas) {
2047 counter += (int)genericDataTag.second.size();
2058 if (genericData.second->isAttributeCarrierSelected()) {
2071 if (genericData.second->isAttributeCarrierSelected()) {
2084 if (genericData.second->isAttributeCarrierSelected()) {
2100 myNet->getViewNet()->getIntervalBar().markForUpdate();
2106 const auto finder = myGenericDatas.at(genericData->
getTagProperty()->
getTag()).find(genericData);
2113 myNet->getViewNet()->getInspectedElements().uninspectAC(genericData);
2115 myNet->getViewNet()->getViewParent()->getInspectorFrame()->getHierarchicalElementTree()->removeCurrentEditedAttributeCarrier(genericData);
2117 myNet->getDataPathManager()->removePath(genericData);
2119 myNet->getViewNet()->getIntervalBar().markForUpdate();
2123std::set<std::string>
2126 std::set<std::string> attributesSolution;
2128 std::vector<GNEGenericData*> genericDatas;
2130 for (
const auto& interval : myDataIntervals) {
2134 for (
const auto& genericData : interval.second->getGenericDataChildren()) {
2135 if (genericDataTag.empty() || (genericData->getTagProperty()->getTagStr() == genericDataTag)) {
2136 genericDatas.push_back(genericData);
2142 for (
const auto& genericData : genericDatas) {
2143 for (
const auto& attribute : genericData->getParametersMap()) {
2144 attributesSolution.insert(attribute.first);
2147 return attributesSolution;
2151std::set<std::string>
2153 const std::string& beginStr,
const std::string& endStr)
const {
2155 std::set<std::string> attributesSolution;
2157 std::vector<GNEDataSet*> dataSets;
2158 std::vector<GNEDataInterval*> dataIntervals;
2160 GNEDataSet* retrievedDataSet = retrieveDataSet(dataSetID,
false);
2162 if (dataSetID.empty()) {
2164 dataSets.reserve(myDataSets.size());
2165 for (
const auto& dataSet : myDataSets) {
2166 dataSets.push_back(dataSet.second);
2168 }
else if (retrievedDataSet) {
2169 dataSets.push_back(retrievedDataSet);
2171 return attributesSolution;
2174 int numberOfIntervals = 0;
2175 for (
const auto& dataSet : dataSets) {
2176 numberOfIntervals += (int)dataSet->getDataIntervalChildren().size();
2179 dataIntervals.reserve(numberOfIntervals);
2181 for (
const auto& dataSet : dataSets) {
2182 for (
const auto& dataInterval : dataSet->getDataIntervalChildren()) {
2184 if (beginStr.empty() && endStr.empty()) {
2185 dataIntervals.push_back(dataInterval.second);
2186 }
else if (endStr.empty()) {
2188 const double begin = GNEAttributeCarrier::parse<double>(beginStr);
2189 if (dataInterval.second->getAttributeDouble(
SUMO_ATTR_BEGIN) >= begin) {
2190 dataIntervals.push_back(dataInterval.second);
2192 }
else if (beginStr.empty()) {
2194 const double end = GNEAttributeCarrier::parse<double>(endStr);
2195 if (dataInterval.second->getAttributeDouble(
SUMO_ATTR_END) <= end) {
2196 dataIntervals.push_back(dataInterval.second);
2200 const double begin = GNEAttributeCarrier::parse<double>(beginStr);
2201 const double end = GNEAttributeCarrier::parse<double>(endStr);
2202 if ((dataInterval.second->getAttributeDouble(
SUMO_ATTR_BEGIN) >= begin) &&
2203 (dataInterval.second->getAttributeDouble(
SUMO_ATTR_END) <= end)) {
2204 dataIntervals.push_back(dataInterval.second);
2210 for (
const auto& dataInterval : dataIntervals) {
2211 for (
const auto& genericData : dataInterval->getGenericDataChildren()) {
2213 if (genericDataTag.empty() || (genericData->getTagProperty()->getTagStr() == genericDataTag)) {
2214 for (
const auto& attribute : genericData->getParametersMap()) {
2215 attributesSolution.insert(attribute.first);
2220 return attributesSolution;
2226 for (
const auto& meanData : myMeanDatas.at(type)) {
2227 if (meanData.second->getID() == id) {
2228 return meanData.second;
2232 throw ProcessError(
"Attempted to retrieve non-existant meanData (string)");
2239const std::unordered_map<SumoXMLTag, std::map<const std::string, GNEMeanData*>, std::hash<int> >&
2247 return myNumberOfMeanDataElements;
2254 for (
auto& meanDatas : myMeanDatas) {
2255 meanDatas.second.clear();
2263 const auto it = myMeanDatas.at(tag).find(meanData->
getID());
2264 if (it == myMeanDatas.at(tag).end()) {
2265 throw ProcessError(meanData->
getTagStr() +
" with ID='" + meanData->
getID() +
"' doesn't exist in AttributeCarriers.meanDatas");
2268 myMeanDatas.at(tag).erase(it);
2269 myMeanDatas.at(tag)[newID] = meanData;
2281 prefix = neteditOptions.getString(
"meanDataEdge-prefix");
2283 prefix = neteditOptions.getString(
"meanDataLane-prefix");
2286 while (retrieveMeanData(tag, prefix +
"_" +
toString(counter),
false) !=
nullptr) {
2289 return (prefix +
"_" +
toString(counter));
2295 myNet->getNetBuilder()->getNodeCont().insert(junction->
getNBNode());
2296 registerJunction(junction);
2303 myNet->getViewNet()->getInspectedElements().uninspectAC(junction);
2305 myNet->getViewNet()->getViewParent()->getInspectorFrame()->getHierarchicalElementTree()->removeCurrentEditedAttributeCarrier(junction);
2307 myNet->removeGLObjectFromGrid(junction);
2309 myNumberOfNetworkElements--;
2310 myNet->getNetBuilder()->getNodeCont().extract(junction->
getNBNode());
2311 junction->
decRef(
"GNENet::deleteSingleJunction");
2319 const auto& createEdgeFrame = myNet->getViewNet()->getViewParent()->getCreateEdgeFrame();
2322 myNumberOfNetworkElements++;
2324 if (myNet->getViewNet()->getViewParent()->getCreateEdgeFrame()->shown()) {
2325 myNet->getViewNet()->getViewParent()->getCreateEdgeFrame()->getEdgeTypeSelector()->refreshEdgeTypeSelector();
2328 createEdgeFrame->getEdgeTypeSelector()->setCurrentEdgeType(edgeType);
2335 const auto& createEdgeFrame = myNet->getViewNet()->getViewParent()->getCreateEdgeFrame();
2337 myNet->getViewNet()->getInspectedElements().uninspectAC(edgeType);
2339 myNet->getViewNet()->getViewParent()->getInspectorFrame()->getHierarchicalElementTree()->removeCurrentEditedAttributeCarrier(edgeType);
2342 myNumberOfNetworkElements--;
2344 if (createEdgeFrame->getEdgeTypeSelector()->getEdgeTypeSelected() == edgeType) {
2345 createEdgeFrame->getEdgeTypeSelector()->clearEdgeTypeSelected();
2348 createEdgeFrame->getEdgeTypeSelector()->refreshEdgeTypeSelector();
2355 myNet->getNetBuilder()->getEdgeCont().insert(nbe);
2367 myNet->getViewNet()->getInspectedElements().uninspectAC(edge);
2369 myNet->getViewNet()->getViewParent()->getInspectorFrame()->getHierarchicalElementTree()->removeCurrentEditedAttributeCarrier(edge);
2371 myNet->removeGLObjectFromGrid(edge);
2373 myNumberOfNetworkElements--;
2379 myNet->getNetBuilder()->getEdgeCont().extract(myNet->getNetBuilder()->getDistrictCont(), edge->
getNBEdge());
2380 edge->
decRef(
"GNENet::deleteSingleEdge");
2403 myNumberOfNetworkElements++;
2411 if (finder == myLanes.end()) {
2414 myLanes.erase(finder);
2415 myNumberOfNetworkElements--;
2417 myNet->getViewNet()->getInspectedElements().uninspectAC(lane);
2419 myNet->getViewNet()->getViewParent()->getInspectorFrame()->getHierarchicalElementTree()->removeCurrentEditedAttributeCarrier(lane);
2430 myNumberOfNetworkElements++;
2437 const auto finder = myCrossings.find(crossing->
getGUIGlObject());
2438 if (finder == myCrossings.end()) {
2441 myCrossings.erase(finder);
2442 myNumberOfNetworkElements--;
2444 if (myNet->getViewNet()) {
2445 myNet->getViewNet()->getInspectedElements().uninspectAC(crossing);
2447 myNet->getViewNet()->getViewParent()->getInspectorFrame()->getHierarchicalElementTree()->removeCurrentEditedAttributeCarrier(crossing);
2459 myNumberOfNetworkElements++;
2466 const auto finder = myWalkingAreas.find(walkingArea->
getGUIGlObject());
2467 if (finder == myWalkingAreas.end()) {
2470 myWalkingAreas.erase(finder);
2471 myNumberOfNetworkElements--;
2473 myNet->getViewNet()->getInspectedElements().uninspectAC(walkingArea);
2475 myNet->getViewNet()->getViewParent()->getInspectorFrame()->getHierarchicalElementTree()->removeCurrentEditedAttributeCarrier(walkingArea);
2486 myNumberOfNetworkElements++;
2493 const auto finder = myConnections.find(connection->
getGUIGlObject());
2494 if (finder == myConnections.end()) {
2497 myConnections.erase(finder);
2498 myNumberOfNetworkElements--;
2500 myNet->getViewNet()->getInspectedElements().uninspectAC(connection);
2502 myNet->getViewNet()->getViewParent()->getInspectorFrame()->getHierarchicalElementTree()->removeCurrentEditedAttributeCarrier(connection);
2513 myNumberOfNetworkElements++;
2520 const auto finder = myInternalLanes.find(internalLane->
getGUIGlObject());
2521 if (finder == myInternalLanes.end()) {
2524 myInternalLanes.erase(finder);
2525 myNumberOfNetworkElements--;
2533 if (myAdditionals.at(tag).count(additional) > 0) {
2537 myAdditionals.at(tag)[additional->
getGUIGlObject()] = additional;
2539 myAdditionalIDs.at(tag)[additional->
getID()] = additional;
2541 myNumberOfNetworkElements++;
2544 myNet->addGLObjectIntoGrid(additional);
2547 if (myNet->isUpdateGeometryEnabled()) {
2551 myNet->getSavingStatus()->requireSaveAdditionals();
2560 auto itFind = myAdditionals.at(tag).find(additional->
getGUIGlObject());
2562 if (itFind == myAdditionals.at(tag).end()) {
2566 myAdditionals.at(tag).erase(itFind);
2568 myAdditionalIDs.at(tag).erase(myAdditionalIDs.at(tag).find(additional->
getID()));
2570 myNumberOfNetworkElements--;
2572 myNet->getViewNet()->getInspectedElements().uninspectAC(additional);
2574 myNet->getViewNet()->getViewParent()->getInspectorFrame()->getHierarchicalElementTree()->removeCurrentEditedAttributeCarrier(additional);
2577 myNet->removeGLObjectFromGrid(additional);
2580 myNet->getNetworkPathManager()->removePath(additional);
2582 myNet->getSavingStatus()->requireSaveAdditionals();
2592 if (myTAZSourceSinks.at(sourceSinkTag).count(sourceSink) > 0) {
2595 myTAZSourceSinks.at(sourceSinkTag)[sourceSink] = sourceSink;
2596 myNumberOfNetworkElements++;
2598 myNet->getSavingStatus()->requireSaveAdditionals();
2607 auto itFind = myTAZSourceSinks.at(tag).find(sourceSink);
2609 if (itFind == myTAZSourceSinks.at(tag).end()) {
2613 myTAZSourceSinks.at(tag).erase(itFind);
2614 myNumberOfNetworkElements--;
2616 myNet->getViewNet()->getInspectedElements().uninspectAC(sourceSink);
2618 myNet->getViewNet()->getViewParent()->getInspectorFrame()->getHierarchicalElementTree()->removeCurrentEditedAttributeCarrier(sourceSink);
2620 myNet->getSavingStatus()->requireSaveAdditionals();
2628 if (myDemandElements.at(tag).count(demandElement) > 0) {
2631 myDemandElements.at(tag)[demandElement->
getGUIGlObject()] = demandElement;
2632 myNumberOfDemandElements++;
2634 myDemandElementIDs.at(tag)[demandElement->
getID()] = demandElement;
2637 myNet->addGLObjectIntoGrid(demandElement);
2639 if (myNet->isUpdateGeometryEnabled()) {
2643 if (myNet->getViewNet()->getEditModes().isCurrentSupermodeDemand()) {
2649 myNet->getSavingStatus()->requireSaveDemandElements();
2657 auto viewParent = myNet->getViewNet()->getViewParent();
2659 auto itFind = myDemandElements.at(tag).find(demandElement->
getGUIGlObject());
2661 if (itFind == myDemandElements.at(tag).end()) {
2665 myDemandElements.at(tag).erase(itFind);
2667 myDemandElementIDs.at(tag).erase(myDemandElementIDs.at(tag).find(demandElement->
getID()));
2669 myNumberOfDemandElements--;
2671 myNet->removeGLObjectFromGrid(demandElement);
2673 myNet->getViewNet()->getInspectedElements().uninspectAC(demandElement);
2675 viewParent->getInspectorFrame()->getHierarchicalElementTree()->removeCurrentEditedAttributeCarrier(demandElement);
2676 viewParent->getPersonPlanFrame()->getPersonHierarchy()->removeCurrentEditedAttributeCarrier(demandElement);
2677 viewParent->getContainerPlanFrame()->getContainerHierarchy()->removeCurrentEditedAttributeCarrier(demandElement);
2678 if (viewParent->getRouteDistributionFrame()->getDistributionSelector()->getCurrentDistribution() == demandElement) {
2679 viewParent->getRouteDistributionFrame()->getDistributionSelector()->setDistribution(
nullptr);
2681 if (viewParent->getTypeDistributionFrame()->getDistributionSelector()->getCurrentDistribution() == demandElement) {
2682 viewParent->getTypeDistributionFrame()->getDistributionSelector()->setDistribution(
nullptr);
2685 if (myNet->getViewNet()->getLastCreatedRoute() == demandElement) {
2686 myNet->getViewNet()->setLastCreatedRoute(
nullptr);
2689 myNet->getDemandPathManager()->removePath(demandElement);
2695 myNet->getSavingStatus()->requireSaveDemandElements();
2702 if (myDataSets.count(dataSet->
getID()) > 0) {
2705 myDataSets[dataSet->
getID()] = dataSet;
2706 myNumberOfDataElements++;
2708 myNet->getSavingStatus()->requireSaveDataElements();
2710 myNet->getViewNet()->getIntervalBar().markForUpdate();
2717 const auto finder = myDataSets.find(dataSet->
getID());
2718 if (finder == myDataSets.end()) {
2721 myDataSets.erase(finder);
2722 myNumberOfDataElements--;
2724 myNet->getViewNet()->getInspectedElements().uninspectAC(dataSet);
2726 myNet->getViewNet()->getViewParent()->getInspectorFrame()->getHierarchicalElementTree()->removeCurrentEditedAttributeCarrier(dataSet);
2728 myNet->getSavingStatus()->requireSaveDataElements();
2730 myNet->getViewNet()->getIntervalBar().markForUpdate();
2741 myNumberOfMeanDataElements++;
2743 myNet->getSavingStatus()->requireSaveMeanDatas();
2758 myNumberOfMeanDataElements--;
2760 myNet->getViewNet()->getInspectedElements().uninspectAC(meanData);
2762 myNet->getViewNet()->getViewParent()->getInspectorFrame()->getHierarchicalElementTree()->removeCurrentEditedAttributeCarrier(meanData);
2765 myNet->removeGLObjectFromGrid(meanData);
2768 myNet->getSavingStatus()->requireSaveMeanDatas();
2775 if (myNet->getViewNet()->getEditModes().isCurrentSupermodeDemand()) {
2777 switch (myNet->getViewNet()->getEditModes().demandEditMode) {
2779 if (tagProperty->
isType()) {
2780 myNet->getViewNet()->getViewParent()->getVehicleFrame()->getTypeSelector()->refreshDemandElementSelector();
2784 if (tagProperty->
isType()) {
2785 myNet->getViewNet()->getViewParent()->getTypeFrame()->getTypeSelector()->refreshTypeSelector(
true);
2789 if (tagProperty->
isType()) {
2790 myNet->getViewNet()->getViewParent()->getTypeDistributionFrame()->getDistributionSelector()->refreshDistributionSelector();
2795 myNet->getViewNet()->getViewParent()->getRouteDistributionFrame()->getDistributionSelector()->refreshDistributionSelector();
2799 if (tagProperty->
isType()) {
2800 myNet->getViewNet()->getViewParent()->getPersonFrame()->getTypeSelector()->refreshDemandElementSelector();
2805 myNet->getViewNet()->getViewParent()->getPersonPlanFrame()->getPersonSelector()->refreshDemandElementSelector();
2809 if (tagProperty->
isType()) {
2810 myNet->getViewNet()->getViewParent()->getContainerFrame()->getTypeSelector()->refreshDemandElementSelector();
2815 myNet->getViewNet()->getViewParent()->getContainerPlanFrame()->getContainerSelector()->refreshDemandElementSelector();
2819 myNet->getViewNet()->getViewParent()->getStopFrame()->getStopParentSelector()->refreshDemandElementSelector();
2833 for (
const auto& junction : myJunctions) {
2834 ACs.push_back(junction.second);
2838 for (
const auto& edge : myEdges) {
2839 ACs.push_back(edge.second);
2843 for (
const auto& lane : myLanes) {
2844 ACs.push_back(lane.second);
2848 for (
const auto& connection : myConnections) {
2849 ACs.push_back(connection.second);
2853 for (
const auto& crossing : myCrossings) {
2854 ACs.push_back(crossing.second);
2858 for (
const auto& walkingArea : myWalkingAreas) {
2859 ACs.push_back(walkingArea.second);
2864 for (
const auto& additionalTag : myAdditionals) {
2865 if (additionalTag.first == tag->
getTag()) {
2866 for (
const auto& additional : additionalTag.second) {
2867 ACs.push_back(additional.second);
2874 for (
const auto& demandElementTag : myDemandElements) {
2875 if (demandElementTag.first == tag->
getTag()) {
2876 for (
const auto& demandElemet : demandElementTag.second) {
2877 ACs.push_back(demandElemet.second);
2885 for (
const auto& dataSet : myDataSets) {
2886 ACs.push_back(dataSet.second);
2890 for (
const auto& dataInterval : myDataIntervals) {
2891 ACs.push_back(dataInterval.second);
2894 for (
const auto& genericDataTag : myGenericDatas) {
2895 if (genericDataTag.first == tag->
getTag()) {
2896 for (
const auto& genericData : genericDataTag.second) {
2897 ACs.push_back(genericData.second);
2901 for (
const auto& meanDataTag : myMeanDatas) {
2902 if (meanDataTag.first == tag->
getTag()) {
2903 for (
const auto& meanData : meanDataTag.second) {
2904 ACs.push_back(meanData.second);
2911 retrieveAttributeCarriersRecursively(child, ACs);
2978 for (
const auto vType : vTypes) {
2979 myTemplates[vType->getTag()] =
new GNEVType(vType->getTag(), myNet);
2986 for (
const auto route : routes) {
2987 myTemplates[route->getTag()] =
new GNERoute(route->getTag(), myNet);
2994 for (
const auto vehicle : vehicles) {
2995 myTemplates[vehicle->getTag()] =
new GNEVehicle(vehicle->getTag(), myNet);
2999 for (
const auto person : persons) {
3000 myTemplates[person->getTag()] =
new GNEPerson(person->getTag(), myNet);
3004 for (
const auto container : containers) {
3005 myTemplates[container->getTag()] =
new GNEContainer(container->getTag(), myNet);
3009 for (
const auto stopAndWaypoint : stopAndWaypoints) {
3010 myTemplates[stopAndWaypoint->getTag()] =
new GNEStop(stopAndWaypoint->getTag(), myNet);
3014 for (
const auto personTrip : personTrips) {
3015 myTemplates[personTrip->getTag()] =
new GNEPersonTrip(personTrip->getTag(), myNet);
3019 for (
const auto walk : walks) {
3020 myTemplates[walk->getTag()] =
new GNEWalk(walk->getTag(), myNet);
3024 for (
const auto ride : rides) {
3025 myTemplates[ride->getTag()] =
new GNERide(ride->getTag(), myNet);
3029 for (
const auto stopPerson : stopPersons) {
3030 myTemplates[stopPerson->getTag()] =
new GNEStopPlan(stopPerson->getTag(), myNet);
3034 for (
const auto transport : transports) {
3035 myTemplates[transport->getTag()] =
new GNETransport(transport->getTag(), myNet);
3039 for (
const auto tranship : tranships) {
3040 myTemplates[tranship->getTag()] =
new GNETranship(tranship->getTag(), myNet);
3044 for (
const auto stopContainer : stopContainers) {
3045 myTemplates[stopContainer->getTag()] =
new GNEStopPlan(stopContainer->getTag(), myNet);
3048 for (
const auto& AC : myTemplates) {
3049 AC.second->resetDefaultValues(
false);
3055 for (
auto& AC : myTemplates) {
3061std::map<SumoXMLTag, GNEAttributeCarrier*>
3069 if (myTemplates.count(tag) > 0) {
3070 return myTemplates.at(tag);
3079 for (
const auto& templateAC : myTemplates) {
3080 if (templateAC.second->getTagProperty()->getSelectorText() == selectorText) {
3081 return templateAC.second;
3100 const auto additionalFiles = parsingSavingFiles(myAdditionalElementsSavingFiles);
3101 const auto demandElementFiles = parsingSavingFiles(myDemandElementsSavingFiles);
3102 const auto dataElementFiles = parsingSavingFiles(myDataElementsSavingFiles);
3103 const auto meanDataElementFiles = parsingSavingFiles(myMeanDataElementsSavingFiles);
3105 neteditOptions.resetWritable();
3106 if (additionalFiles.size() > 0) {
3107 neteditOptions.set(
"additional-files", additionalFiles);
3109 neteditOptions.resetDefault(
"additional-files");
3112 neteditOptions.resetWritable();
3113 if (demandElementFiles.size() > 0) {
3114 neteditOptions.set(
"route-files", demandElementFiles);
3116 neteditOptions.resetDefault(
"route-files");
3119 neteditOptions.resetWritable();
3120 if (dataElementFiles.size() > 0) {
3121 neteditOptions.set(
"data-files", dataElementFiles);
3123 neteditOptions.resetDefault(
"data-files");
3126 neteditOptions.resetWritable();
3127 if (meanDataElementFiles.size() > 0) {
3128 neteditOptions.set(
"meandata-files", meanDataElementFiles);
3130 neteditOptions.resetDefault(
"meandata-files");
3137 if ((additionalElement->
getFilename().size() > 0) && !existAdditionalFilename(additionalElement->
getFilename())) {
3138 if (myAdditionalElementsSavingFiles.empty()) {
3139 updateAdditionalEmptyFilenames(additionalElement->
getFilename());
3141 myAdditionalElementsSavingFiles.push_back(additionalElement->
getFilename());
3149 for (
const auto& additionalTag : myNet->getAttributeCarriers()->getAdditionals()) {
3150 for (
const auto& additional : additionalTag.second) {
3151 additional.second->changeDefaultFilename(file);
3155 for (
auto& templateAC : myNet->getACTemplates()->getACTemplates()) {
3156 if (templateAC.second->getTagProperty()->isAdditionalElement() && templateAC.second->getFilename().empty()) {
3157 templateAC.second->changeDefaultFilename(file);
3161 if (!existAdditionalFilename(file)) {
3162 myAdditionalElementsSavingFiles.push_back(file);
3167const std::vector<std::string>&
3169 return myAdditionalElementsSavingFiles;
3176 for (
const auto& additionalTag : myNet->getAttributeCarriers()->getAdditionals()) {
3177 for (
const auto& additional : additionalTag.second) {
3178 additionalsbyFilenames[additional.second->getFilename()].insert(additional.second);
3182 for (
const auto& route : myNet->getAttributeCarriers()->getDemandElements().at(
SUMO_TAG_ROUTE)) {
3183 if (std::find(myAdditionalElementsSavingFiles.begin(), myAdditionalElementsSavingFiles.end(), route.second->getFilename()) != myAdditionalElementsSavingFiles.end()) {
3184 additionalsbyFilenames[route.second->getFilename()].insert(route.second);
3188 auto it = myAdditionalElementsSavingFiles.begin();
3189 while (it != myAdditionalElementsSavingFiles.end()) {
3190 if (it->empty() || (additionalsbyFilenames.find(*it) == additionalsbyFilenames.end())) {
3191 it = myAdditionalElementsSavingFiles.erase(it);
3196 return additionalsbyFilenames;
3202 const auto it = std::find(myAdditionalElementsSavingFiles.begin(), myAdditionalElementsSavingFiles.end(), file);
3203 return it != myAdditionalElementsSavingFiles.end();
3210 if (myDemandElementsSavingFiles.empty()) {
3211 updateDemandEmptyFilenames(demandElement->
getFilename());
3213 myDemandElementsSavingFiles.push_back(demandElement->
getFilename());
3221 for (
const auto& demandTag : myNet->getAttributeCarriers()->getDemandElements()) {
3222 for (
const auto& demand : demandTag.second) {
3223 demand.second->changeDefaultFilename(file);
3227 for (
auto& templateAC : myNet->getACTemplates()->getACTemplates()) {
3228 if (templateAC.second->getTagProperty()->isDemandElement() && templateAC.second->getFilename().empty()) {
3229 templateAC.second->changeDefaultFilename(file);
3233 if (!existDemandFilename(file)) {
3234 myDemandElementsSavingFiles.push_back(file);
3239const std::vector<std::string>&
3241 return myDemandElementsSavingFiles;
3248 for (
const auto& demandTag : myNet->getAttributeCarriers()->getDemandElements()) {
3249 for (
const auto& demand : demandTag.second) {
3250 if (std::find(myAdditionalElementsSavingFiles.begin(), myAdditionalElementsSavingFiles.end(), demand.second->getFilename()) == myAdditionalElementsSavingFiles.end()) {
3251 demandsbyFilenames[demand.second->getFilename()].insert(demand.second);
3256 auto it = myDemandElementsSavingFiles.begin();
3257 while (it != myDemandElementsSavingFiles.end()) {
3258 if (it->empty() || (demandsbyFilenames.find(*it) == demandsbyFilenames.end())) {
3259 it = myDemandElementsSavingFiles.erase(it);
3264 return demandsbyFilenames;
3270 const auto it = std::find(myDemandElementsSavingFiles.begin(), myDemandElementsSavingFiles.end(), file);
3271 return it != myDemandElementsSavingFiles.end();
3278 if (myDataElementsSavingFiles.empty()) {
3279 updateDataEmptyFilenames(dataElement->
getFilename());
3281 myDataElementsSavingFiles.push_back(dataElement->
getFilename());
3289 if (file.size() > 0) {
3290 for (
const auto& dataSet : myNet->getAttributeCarriers()->getDataSets()) {
3291 dataSet.second->changeDefaultFilename(file);
3294 if (!existDataFilename(file)) {
3295 myDataElementsSavingFiles.push_back(file);
3301const std::vector<std::string>&
3303 return myDataElementsSavingFiles;
3310 for (
const auto& dataSet : myNet->getAttributeCarriers()->getDataSets()) {
3311 datasbyFilenames[dataSet.second->getFilename()].insert(dataSet.second);
3314 auto it = myDataElementsSavingFiles.begin();
3315 while (it != myDataElementsSavingFiles.end()) {
3316 if (it->empty() || (datasbyFilenames.find(*it) == datasbyFilenames.end())) {
3317 it = myDataElementsSavingFiles.erase(it);
3322 return datasbyFilenames;
3328 const auto it = std::find(myDataElementsSavingFiles.begin(), myDataElementsSavingFiles.end(), file);
3329 return it != myDataElementsSavingFiles.end();
3335 if ((meanDataElement->
getFilename().size() > 0) && !existMeanDataFilename(meanDataElement->
getFilename())) {
3336 if (myMeanDataElementsSavingFiles.empty()) {
3337 updateMeanDataEmptyFilenames(meanDataElement->
getFilename());
3339 myMeanDataElementsSavingFiles.push_back(meanDataElement->
getFilename());
3347 for (
const auto& meanDataTag : myNet->getAttributeCarriers()->getMeanDatas()) {
3348 for (
const auto& meanData : meanDataTag.second) {
3349 meanData.second->changeDefaultFilename(file);
3353 for (
auto& templateAC : myNet->getACTemplates()->getACTemplates()) {
3354 if (templateAC.second->getTagProperty()->isMeanData() && templateAC.second->getFilename().empty()) {
3355 templateAC.second->changeDefaultFilename(file);
3359 if (!existMeanDataFilename(file)) {
3360 myMeanDataElementsSavingFiles.push_back(file);
3365const std::vector<std::string>&
3367 return myMeanDataElementsSavingFiles;
3374 for (
const auto& meanDataTag : myNet->getAttributeCarriers()->getMeanDatas()) {
3375 for (
const auto& meanData : meanDataTag.second) {
3376 meanDatasbyFilenames[meanData.second->getFilename()].insert(meanData.second);
3380 auto it = myMeanDataElementsSavingFiles.begin();
3381 while (it != myMeanDataElementsSavingFiles.end()) {
3382 if (it->empty() || (meanDatasbyFilenames.find(*it) == meanDatasbyFilenames.end())) {
3383 it = myMeanDataElementsSavingFiles.erase(it);
3388 return meanDatasbyFilenames;
3394 const auto it = std::find(myMeanDataElementsSavingFiles.begin(), myMeanDataElementsSavingFiles.end(), file);
3395 return it != myMeanDataElementsSavingFiles.end();
3401 std::string savingFileNames;
3403 for (
const auto& savingFile : savingFiles) {
3404 savingFileNames.append(savingFile +
",");
3407 if (savingFileNames.size() > 0) {
3408 savingFileNames.pop_back();
3410 return savingFileNames;
3424 mySumoConfigSaved =
false;
3430 mySumoConfigSaved =
true;
3436 return mySumoConfigSaved;
3443 myNeteditConfigSaved =
false;
3449 myNeteditConfigSaved =
true;
3455 return myNeteditConfigSaved;
3461 myNetworkSaved =
false;
3463 myNeteditConfigSaved =
false;
3464 mySumoConfigSaved =
false;
3470 myNetworkSaved =
true;
3476 return myNetworkSaved;
3500 myEdgeTypeSaved =
false;
3506 myEdgeTypeSaved =
true;
3512 return myEdgeTypeSaved;
3518 myAdditionalSaved =
false;
3520 myNeteditConfigSaved =
false;
3521 mySumoConfigSaved =
false;
3527 myAdditionalSaved =
true;
3533 return myAdditionalSaved;
3539 myDemandElementSaved =
false;
3541 myNeteditConfigSaved =
false;
3542 mySumoConfigSaved =
false;
3548 myDemandElementSaved =
true;
3554 return myDemandElementSaved;
3560 myDataElementSaved =
false;
3562 myNeteditConfigSaved =
false;
3563 mySumoConfigSaved =
false;
3569 myDataElementSaved =
true;
3575 return myDataElementSaved;
3581 myMeanDataElementSaved =
false;
3583 myNeteditConfigSaved =
false;
3584 mySumoConfigSaved =
false;
3590 myMeanDataElementSaved =
true;
3596 return myMeanDataElementSaved;
3603 if (myNetworkSaved) {
3604 return AskSaving::CONTINUE;
3607 const std::string header =
TL(
"Confirm close Network");
3608 const std::string contentsA =
TL(
"You have unsaved changes in the network.");
3609 const std::string contentsB =
TL(
"Do you wish to close and discard all changes?");
3610 const auto answer =
GUISaveDialog::question(myNet->getApp(), header.c_str(),
"%s", (contentsA +
"\n" + contentsB).c_str());
3613 return AskSaving::DISCARD;
3615 return AskSaving::SAVE;
3617 return AskSaving::ABORT;
3626 if (myAdditionalSaved) {
3627 return AskSaving::CONTINUE;
3630 const std::string header =
TL(
"Save additional elements before close");
3631 const std::string contentsA =
TL(
"You have unsaved additional elements.");
3632 const std::string contentsB =
TL(
"Do you wish to close and discard all changes?");
3633 const auto answer =
GUISaveDialog::question(myNet->getApp(), header.c_str(),
"%s", (contentsA +
"\n" + contentsB).c_str());
3636 return AskSaving::DISCARD;
3638 return AskSaving::SAVE;
3640 return AskSaving::ABORT;
3649 if (myDemandElementSaved) {
3650 return AskSaving::CONTINUE;
3653 const std::string header =
TL(
"Save demand elements before close");
3654 const std::string contentsA =
TL(
"You have unsaved demand elements.");
3655 const std::string contentsB =
TL(
"Do you wish to close and discard all changes?");
3656 const auto answer =
GUISaveDialog::question(myNet->getApp(), header.c_str(),
"%s", (contentsA +
"\n" + contentsB).c_str());
3659 return AskSaving::DISCARD;
3661 return AskSaving::SAVE;
3663 return AskSaving::ABORT;
3672 if (myDataElementSaved) {
3673 return AskSaving::CONTINUE;
3676 const std::string header =
TL(
"Save data elements before close");
3677 const std::string contentsA =
TL(
"You have unsaved data elements.");
3678 const std::string contentsB =
TL(
"Do you wish to close and discard all changes?");
3679 const auto answer =
GUISaveDialog::question(myNet->getApp(), header.c_str(),
"%s", (contentsA +
"\n" + contentsB).c_str());
3682 return AskSaving::DISCARD;
3684 return AskSaving::SAVE;
3686 return AskSaving::ABORT;
3695 if (myMeanDataElementSaved) {
3696 return AskSaving::CONTINUE;
3699 const std::string header =
TL(
"Save meanData elements before close");
3700 const std::string contentsA =
TL(
"You have unsaved meanData elements.");
3701 const std::string contentsB =
TL(
"Do you wish to close and discard all changes?");
3702 const auto answer =
GUISaveDialog::question(myNet->getApp(), header.c_str(),
"%s", (contentsA +
"\n" + contentsB).c_str());
3705 return AskSaving::DISCARD;
3707 return AskSaving::SAVE;
3709 return AskSaving::ABORT;
3721 myReplaced(replaced),
3732 myTllcont.replaceRemoved(myBy, -1, myReplaced, -1,
true);
3739 myTllcont.replaceRemoved(myReplaced, -1, myBy, -1,
true);
3745 return TL(
"Redo replace in TLS");
3751 return TL(
"Undo replace in TLS");
3757 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.
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_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
@ 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)
@ SUMO_TAG_BUS_STOP
A bus stop.
@ SUMO_TAG_POI
begin/end of the description of a Point of interest
@ SUMO_TAG_MEANDATA_LANE
a lane based mean data detector
@ SUMO_TAG_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_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
@ 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_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
@ SUMO_TAG_INDUCTION_LOOP
alternative tag for e1 detector
@ GNE_TAG_JPS_WALKABLEAREA
polygon used for draw juPedSim walkable areas
@ SUMO_TAG_CALIBRATOR
A calibrator placed over edge.
@ SUMO_TAG_ENTRY_EXIT_DETECTOR
alternative tag for e3 detector
@ SUMO_TAG_VSS
A variable speed sign.
@ SUMO_TAG_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)
virtual void updateGeometry()=0
update pre-computed geometry information
GUIGlObject * getGUIGlObject()
get GUIGlObject associated with this AttributeCarrier
const GUIGeometry & getAdditionalGeometry() const
obtain additional geometry
virtual Position getPositionInView() const =0
Returns position of additional in view.
const std::string getID() const
get ID (all Attribute Carriers have one)
bool isAttributeCarrierSelected() const
check if attribute carrier is selected
const std::string & getTagStr() const
get tag assigned to this object in string format
const std::string & getFilename() const
get filename in which save this AC
const GNETagProperties * getTagProperty() const
get tagProperty associated with this Attribute Carrier
void unmarkForDrawingFront()
unmark for drawing front
virtual GUIGlObject * getGUIGlObject()=0
static GNEBusStop * buildTrainStop(GNENet *net)
default constructor
static GNEBusStop * buildBusStop(GNENet *net)
default constructor
the function-object for an editing operation (abstract base)
This object is responsible for drawing a shape and for supplying a a popup menu. Messages are routete...
virtual void updateGeometry()=0
update pre-computed geometry information
GUIGlObject * getGUIGlObject()
get GUIGlObject associated with this AttributeCarrier
virtual void computePathElement()=0
implement in children+
A road/street connecting two junctions (netedit-version)
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)
GNEJunction * getToJunction() const
get from Junction (only used to increase readability)
Boundary getCenteringBoundary() const
Returns the boundary to which the view shall be centered in order to show the object.
GUIGlObject * getGUIGlObject()
get GUIGlObject associated with this AttributeCarrier
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)
This object is responsible for drawing a shape and for supplying a a popup menu. Messages are routete...
void setResponsible(bool newVal)
set responsibility for deleting internal structures
void updateGeometry()
update pre-computed geometry information (including crossings)
void removeOutgoingGNEEdge(GNEEdge *edge)
remove outgoing GNEEdge
void removeIncomingGNEEdge(GNEEdge *edge)
remove incoming GNEEdge
Boundary getCenteringBoundary() const
Returns the boundary to which the view shall be centered in order to show the object.
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
This lane is powered by an underlying GNEEdge and basically knows how to draw itself.
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
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
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
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
bool existMeanDataFilename(const std::string &file) const
check if the given meanData file was already registered
ACsbyFilename getMeanDatasByFilename()
get meanDatas sorted by filenames (and also clear unused filenames)
std::string parsingSavingFiles(const std::vector< std::string > &savingFiles) const
parsing saving files
const std::vector< std::string > & getAdditionalFilenames() const
get vector with additional elements saving files (starting with default)
void addDataFilename(const GNEAttributeCarrier *dataElement)
data elements
void updateMeanDataEmptyFilenames(const std::string &file)
update meanData elements with empty filenames with the given file
void addMeanDataFilename(const GNEAttributeCarrier *meanDataElement)
meanData elements
ACsbyFilename getDatasByFilename()
get datas sorted by filenames (and also clear unused filenames)
void updateAdditionalEmptyFilenames(const std::string &file)
update additional elements with empty filenames with the given file
const std::vector< std::string > & getDemandFilenames() const
get vector with demand elements saving files (starting with default)
bool existAdditionalFilename(const std::string &file) const
check if the given additional file was already registered
void updateDataEmptyFilenames(const std::string &file)
update data elements with empty filenames with the given file
bool existDataFilename(const std::string &file) const
check if the given data file was already registered
void updateNeteditConfig()
update netedit config
ACsbyFilename getAdditionalsByFilename()
get additionals sorted by filenames (and also clear unused filenames)
ACsbyFilename getDemandsByFilename()
get demands sorted by filenames (and also clear unused filenames)
void updateDemandEmptyFilenames(const std::string &file)
update demand elements with empty filenames with the given file
const std::vector< std::string > & getMeanDataFilenames() const
get vector with meanData elements saving files (starting with default)
const std::vector< std::string > & getDataFilenames() const
get vector with data elements saving files (starting with default)
std::map< std::string, std::unordered_set< const GNEAttributeCarrier * > > ACsbyFilename
typedef used for group ACs by filename
void addDemandFilename(const GNEAttributeCarrier *demandElement)
demand elements
SavingFilesHandler()=delete
Invalidated default constructor.
bool existDemandFilename(const std::string &file) const
check if the given demand file was already registered
void addAdditionalFilename(const GNEAttributeCarrier *additionalElement)
additional elements
void requireSaveTLS()
inform that TLS has to be saved
void dataElementsSaved()
mark demand elements as saved
bool isEdgeTypeSaved() const
check if edgeType are saved
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
AskSaving askSaveMeanDataElements() const
warns about unsaved changes in meanData elements and gives the user the option to abort
AskSaving askSaveAdditionalElements() const
warns about unsaved changes in additionals and gives the user the option to abort
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
AskSaving askSaveNetwork() const
warns about unsaved changes in network and gives the user the option to abort
AskSaving askSaveDemandElements() const
warns about unsaved changes in demand elements and gives the user the option to abort
AskSaving
enum used to keep the result of ask about saving elements
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
AskSaving askSaveDataElements() const
warns about unsaved changes in data elements and gives the user the option to abort
bool isDemandElementsSaved() const
check if demand elements are saved
void requireSaveAdditionals()
inform that additionals has to be saved
bool isDataElementsSaved() const
check if data elements are saved
bool isNetworkSaved() const
check if network is saved
bool isMeanDatasSaved() const
check if mean data elements are saved
void requireSaveDataElements()
inform that data elements has to be saved
bool isNeteditConfigSaved() const
check if netedit config is saved
void networkSaved()
mark network as saved
bool isAdditionalsSaved() const
check if additionals are saved
SavingStatus()=delete
invalidate default constructor
void requireSaveDemandElements()
inform that demand elements has to be saved
void edgeTypeSaved()
mark edgeType as saved
A NBNetBuilder extended by visualisation and editing capabilities.
const GNETagPropertiesDatabase * getTagPropertiesDatabase() const
get tag properties database
void setNetworkElementID(const std::string &newID)
set network element id
GUIGlObject * getGUIGlObject()
get GUIGlObject associated with this AttributeCarrier
void decRef(const std::string &debugMsg="")
Decrease reference.
void incRef(const std::string &debugMsg="")
Increase reference.
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
bool isPlacedInRTree() const
return true if Tag correspond to an element that has to be placed in RTREE
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
This object is responsible for drawing a shape and for supplying a a popup menu. Messages are routete...
const PositionVector & getShape() const
The shape of the additional element.
const std::string & getMicrosimID() const
Returns the id of the object as known to microsim.
virtual void setMicrosimID(const std::string &newID)
Changes the microsimID of the object.
void unblockObject(GUIGlID id)
Marks an object as unblocked.
GUIGlObject * getObjectBlocking(GUIGlID id) const
Returns the object from the container locking it.
static GUIGlObjectStorage gIDStorage
A single static instance of this class.
static FXuint question(FXApp *app, const char *caption, const char *message,...)
Show modal question message, in free floating window.
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