114 for (
const auto& additionalTagProperty : additionalTagProperties) {
115 myAdditionals.insert(std::make_pair(additionalTagProperty->getTag(), std::unordered_map<const GUIGlObject*, GNEAdditional*>()));
117 myAdditionalIDs.insert(std::make_pair(additionalTagProperty->getTag(), std::map<const std::string, GNEAdditional*>()));
124 for (
const auto& demandElementTagProperty : demandElementTagProperties) {
125 myDemandElements.insert(std::make_pair(demandElementTagProperty->getTag(), std::unordered_map<const GUIGlObject*, GNEDemandElement*>()));
126 if (demandElementTagProperty->hasAttribute(
SUMO_ATTR_ID)) {
127 myDemandElementIDs.insert(std::make_pair(demandElementTagProperty->getTag(), std::map<const std::string, GNEDemandElement*>()));
131 for (
const auto& stopTagProperty : stopTagProperties) {
132 myDemandElements.insert(std::make_pair(stopTagProperty->getTag(), std::unordered_map<const GUIGlObject*, GNEDemandElement*>()));
136 for (
const auto& genericDataElementTagProperty : genericDataElementTagProperties) {
137 myGenericDatas.insert(std::make_pair(genericDataElementTagProperty->getTag(), std::unordered_map<const GUIGlObject*, GNEGenericData*>()));
141 for (
const auto& meanDataTagProperty : meanDataTagProperties) {
142 myMeanDatas.insert(std::make_pair(meanDataTagProperty->getTag(), std::map<const std::string, GNEMeanData*>()));
149 for (
const auto& edgeType : myEdgeTypes) {
150 edgeType.second->decRef(
"GNENetHelper::~GNENet");
151 delete edgeType.second;
154 for (
const auto& edge : myEdges) {
155 edge.second->decRef(
"GNENetHelper::~GNENet");
159 for (
const auto& junction : myJunctions) {
160 junction.second->decRef(
"GNENetHelper::~GNENet");
161 delete junction.second;
164 for (
const auto& additionalTag : myAdditionals) {
165 for (
const auto& additional : additionalTag.second) {
167 additional.second->decRef();
168 delete additional.second;
172 for (
const auto& demandElementTag : myDemandElements) {
173 for (
const auto& demandElement : demandElementTag.second) {
175 demandElement.second->decRef();
176 delete demandElement.second;
180 for (
const auto& dataSet : myDataSets) {
182 dataSet.second->decRef();
183 delete dataSet.second;
186 for (
const auto& meanDataTag : myMeanDatas) {
187 for (
const auto& meanData : meanDataTag.second) {
189 meanData.second->decRef();
190 delete meanData.second;
198 std::map<std::string, GNEEdge*> newEdgeMap;
199 std::map<std::string, GNEJunction*> newJunctionMap;
201 for (
const auto& edge : myEdges) {
202 edge.second->setEdgeID(edge.second->getNBEdge()->getID());
203 newEdgeMap[edge.second->getNBEdge()->getID()] = edge.second;
205 for (
const auto& junction : myJunctions) {
206 newJunctionMap[junction.second->getNBNode()->getID()] = junction.second;
207 junction.second->setNetworkElementID(junction.second->getNBNode()->getID());
209 myEdges = newEdgeMap;
210 myJunctions = newJunctionMap;
227 for (
const auto& lane : myEdges.at(AC->
getID())->getChildLanes()) {
258 return myNumberOfNetworkElements;
264 return myNumberOfDemandElements;
270 return myNumberOfDataElements;
279 if (
object !=
nullptr) {
285 throw ProcessError(
"GUIGlObject does not match the declared type");
289 }
else if (hardFail) {
290 throw ProcessError(
"Attempted to retrieve non-existant GUIGlObject");
297std::vector<GNEAttributeCarrier*>
299 std::vector<GNEAttributeCarrier*> ACs;
302 const auto rootTagProperty = myNet->getTagPropertiesDatabase()->getTagProperty(
SUMO_TAG_ROOTFILE,
true);
303 ACs.reserve(myNumberOfNetworkElements + myNumberOfDemandElements + myNumberOfDataElements);
304 retrieveAttributeCarriersRecursively(rootTagProperty, ACs);
306 const auto tagProperty = myNet->getTagPropertiesDatabase()->getTagProperty(tag,
true);
309 ACs.reserve(myNumberOfNetworkElements);
311 ACs.reserve(myNumberOfDemandElements);
313 ACs.reserve(myNumberOfDataElements + myNumberOfMeanDataElements);
315 retrieveAttributeCarriersRecursively(tagProperty, ACs);
321std::vector<GNEAttributeCarrier*>
323 std::vector<GNEAttributeCarrier*> result;
327 for (
const auto& junction : myJunctions) {
328 if (!onlySelected || junction.second->isAttributeCarrierSelected()) {
329 result.push_back(junction.second);
332 for (
const auto& crossing : myCrossings) {
333 if (!onlySelected || crossing.second->isAttributeCarrierSelected()) {
334 result.push_back(crossing.second);
337 for (
const auto& edge : myEdges) {
338 if (!onlySelected || edge.second->isAttributeCarrierSelected()) {
339 result.push_back(edge.second);
342 for (
const auto& lane : myLanes) {
343 if (!onlySelected || lane.second->isAttributeCarrierSelected()) {
344 result.push_back(lane.second);
347 for (
const auto& connection : myConnections) {
348 if (!onlySelected || connection.second->isAttributeCarrierSelected()) {
349 result.push_back(connection.second);
352 for (
const auto& additionalSet : myAdditionals) {
353 for (
const auto& additional : additionalSet.second) {
354 if (!onlySelected || additional.second->isAttributeCarrierSelected()) {
355 result.push_back(additional.second);
360 for (
const auto& demandElementSet : myDemandElements) {
361 for (
const auto& demandElement : demandElementSet.second) {
362 if (!onlySelected || demandElement.second->isAttributeCarrierSelected()) {
363 result.push_back(demandElement.second);
368 for (
const auto& dataSet : myDataSets) {
369 if (!onlySelected || dataSet.second->isAttributeCarrierSelected()) {
370 result.push_back(dataSet.second);
373 for (
const auto& dataInterval : myDataIntervals) {
374 if (!onlySelected || dataInterval.second->isAttributeCarrierSelected()) {
375 result.push_back(dataInterval.second);
378 for (
const auto& genericDataSet : myGenericDatas) {
379 for (
const auto& genericData : genericDataSet.second) {
380 if (!onlySelected || genericData.second->isAttributeCarrierSelected()) {
381 result.push_back(genericData.second);
385 for (
const auto& meanDataSet : myMeanDatas) {
386 for (
const auto& meanData : meanDataSet.second) {
387 if (!onlySelected || meanData.second->isAttributeCarrierSelected()) {
388 result.push_back(meanData.second);
397std::vector<GNEAttributeCarrier*>
400 const auto& editModes = myNet->getViewNet()->getEditModes();
402 std::vector<GNEAttributeCarrier*> result;
410 if (ignoreCurrentSupermode) {
411 result.push_back(AC);
414 result.push_back(AC);
416 result.push_back(AC);
418 result.push_back(AC);
428 auto it = myJunctions.find(
id);
429 if (it != myJunctions.end()) {
434 throw UnknownElement(
"Attempted to retrieve non-existant junction " +
id);
441const std::map<std::string, GNEJunction*>&
447std::vector<GNEJunction*>
449 std::vector<GNEJunction*> result;
451 for (
const auto& junction : myJunctions) {
452 if (junction.second->isAttributeCarrierSelected()) {
453 result.push_back(junction.second);
463 junction->
incRef(
"GNENet::registerJunction");
466 myNumberOfNetworkElements++;
470 myNet->addGLObjectIntoGrid(junction);
488 auto junctionCopy = myJunctions;
492 for (
const auto& junction : junctionCopy) {
496 myJunctions[prefix + junction.first] = junction.second;
503 if (myJunctions.count(junction->
getID()) == 0) {
504 throw ProcessError(junction->
getTagStr() +
" with ID='" + junction->
getID() +
"' doesn't exist in AttributeCarriers.junction");
505 }
else if (myJunctions.count(newID) != 0) {
506 throw ProcessError(
"There is another " + junction->
getTagStr() +
" with new ID='" + newID +
"' in myJunctions");
511 myNet->getNetBuilder()->getNodeCont().rename(junction->
getNBNode(), newID);
515 myJunctions[junction->
getID()] = junction;
519 myNet->getSavingStatus()->requireSaveNetwork();
527 for (
const auto& junction : myJunctions) {
528 if (junction.second->isAttributeCarrierSelected()) {
538 auto it = myCrossings.find(glObject);
539 if (it != myCrossings.end()) {
551const std::unordered_map<const GUIGlObject*, GNECrossing*>&
557std::vector<GNECrossing*>
559 std::vector<GNECrossing*> result;
561 for (
const auto& crossing : myCrossings) {
562 if (crossing.second->isAttributeCarrierSelected()) {
563 result.push_back(crossing.second);
573 for (
const auto& crossing : myCrossings) {
574 if (crossing.second->isAttributeCarrierSelected()) {
584 auto it = myWalkingAreas.find(glObject);
585 if (it != myWalkingAreas.end()) {
597const std::unordered_map<const GUIGlObject*, GNEWalkingArea*>&
599 return myWalkingAreas;
603std::vector<GNEWalkingArea*>
605 std::vector<GNEWalkingArea*> result;
607 for (
const auto& walkingArea : myWalkingAreas) {
608 if (walkingArea.second->isAttributeCarrierSelected()) {
609 result.push_back(walkingArea.second);
619 for (
const auto& walkingArea : myWalkingAreas) {
620 if (walkingArea.second->isAttributeCarrierSelected()) {
630 if (myEdgeTypes.count(
id) > 0) {
631 return myEdgeTypes.at(
id);
632 }
else if (hardFail) {
634 throw UnknownElement(
"Attempted to retrieve non-existant EdgeType " +
id);
644 edgeType->
incRef(
"GNENet::registerEdgeType");
651const std::map<std::string, GNEEdgeType*>&
664 if (myEdgeTypes.count(edgeType->
getID()) == 0) {
665 throw ProcessError(edgeType->
getTagStr() +
" with ID='" + edgeType->
getID() +
"' doesn't exist in AttributeCarriers.edgeType");
666 }
else if (myEdgeTypes.count(newID) != 0) {
667 throw ProcessError(
"There is another " + edgeType->
getTagStr() +
" with new ID='" + newID +
"' in myEdgeTypes");
670 myEdgeTypes.erase(edgeType->
getID());
672 myNet->getNetBuilder()->getTypeCont().updateEdgeTypeID(edgeType->
getID(), newID);
676 myEdgeTypes[edgeType->
getID()] = edgeType;
678 myNet->getSavingStatus()->requireSaveNetwork();
686 while (myEdgeTypes.count(
"edgeType_" +
toString(counter)) != 0) {
689 return (
"edgeType_" +
toString(counter));
695 auto it = myEdges.find(
id);
696 if (it != myEdges.end()) {
701 throw UnknownElement(
"Attempted to retrieve non-existant edge " +
id);
710 if ((from ==
nullptr) || (to ==
nullptr)) {
713 std::vector<GNEEdge*> edges;
716 if (edgeTo->getToJunction() == to) {
717 edges.push_back(edgeTo);
724const std::map<std::string, GNEEdge*>&
732 std::vector<GNEEdge*> result;
734 for (
const auto& edge : myEdges) {
735 if (edge.second->isAttributeCarrierSelected()) {
736 result.push_back(edge.second);
745 edge->
incRef(
"GNENet::registerEdge");
749 myNumberOfNetworkElements++;
765 myNet->addGLObjectIntoGrid(edge);
779 auto edgeCopy = myEdges;
783 for (
const auto& edge : edgeCopy) {
787 myEdges[prefix + edge.first] = edge.second;
797 while (myEdges.count(edgePrefix +
toString(myNet->getEdgeIDCounter())) != 0) {
798 myNet->getEdgeIDCounter()++;
800 return edgePrefix +
toString(myNet->getEdgeIDCounter());
806 if (myEdges.count(edge->
getID()) == 0) {
808 }
else if (myEdges.count(newID) != 0) {
809 throw ProcessError(
"There is another " + edge->
getTagStr() +
" with new ID='" + newID +
"' in myEdges");
814 myNet->getNetBuilder()->getEdgeCont().rename(edge->
getNBEdge(), newID);
818 myEdges[edge->
getID()] = edge;
821 lane->updateConnectionIDs();
824 myNet->getSavingStatus()->requireSaveNetwork();
832 for (
const auto& edge : myEdges) {
833 if (edge.second->isAttributeCarrierSelected()) {
844 const GNEEdge* edge = retrieveEdge(edge_id,
false);
845 if (edge !=
nullptr) {
849 if (laneIt->getID() == id) {
854 if (lane ==
nullptr) {
861 if (checkVolatileChange && (myNet->getEdgesAndNumberOfLanes().count(edge_id) == 1) &&
862 myNet->getEdgesAndNumberOfLanes().at(edge_id) != (
int)edge->
getChildLanes().size()) {
867 }
else if (hardFail) {
877 auto it = myLanes.find(glObject);
878 if (it != myLanes.end()) {
890const std::unordered_map<const GUIGlObject*, GNELane*>&
898 std::vector<GNELane*> result;
900 for (
const auto& lane : myLanes) {
901 if (lane.second->isAttributeCarrierSelected()) {
902 result.push_back(lane.second);
912 for (
const auto& lane : myLanes) {
913 if (lane.second->isAttributeCarrierSelected()) {
924 for (
const auto& connection : myConnections) {
925 if (connection.second->getID() == id) {
926 return connection.second;
931 throw UnknownElement(
"Attempted to retrieve non-existant connection " +
id);
940 auto it = myConnections.find(glObject);
941 if (it != myConnections.end()) {
953const std::unordered_map<const GUIGlObject*, GNEConnection*>&
955 return myConnections;
959std::vector<GNEConnection*>
961 std::vector<GNEConnection*> result;
963 for (
const auto& connection : myConnections) {
964 if (connection.second->isAttributeCarrierSelected()) {
965 result.push_back(connection.second);
975 for (
const auto& connection : myConnections) {
976 if (connection.second->isAttributeCarrierSelected()) {
986 auto it = myInternalLanes.find(glObject);
987 if (it != myInternalLanes.end()) {
1001 auto it = myAdditionalIDs.at(type).find(
id);
1002 if (it != myAdditionalIDs.at(type).end()) {
1006 throw ProcessError(
"Attempted to retrieve non-existant additional (string)");
1015 for (
const auto& type : types) {
1016 auto it = myAdditionalIDs.at(type).find(
id);
1017 if (it != myAdditionalIDs.at(type).end()) {
1022 throw ProcessError(
"Attempted to retrieve non-existant additional (string)");
1032 for (
const auto& additionalTag : myAdditionals) {
1033 auto it = additionalTag.second.find(glObject);
1034 if (it != additionalTag.second.end()) {
1039 throw ProcessError(
"Attempted to retrieve non-existant additional (glObject)");
1065 throw ProcessError(
"Attempted to retrieve non-existant rerouter interval");
1069const std::unordered_map<SumoXMLTag, std::unordered_map<const GUIGlObject*, GNEAdditional*>, std::hash<int> >&
1071 return myAdditionals;
1075std::vector<GNEAdditional*>
1077 std::vector<GNEAdditional*> result;
1079 for (
const auto& additionalsTags : myAdditionals) {
1080 for (
const auto& additional : additionalsTags.second) {
1081 if (additional.second->isAttributeCarrierSelected()) {
1082 result.push_back(additional.second);
1090std::vector<GNEAdditional*>
1092 std::vector<GNEAdditional*> result;
1094 for (
const auto& additionalsTags : myAdditionals) {
1095 for (
const auto& additional : additionalsTags.second) {
1096 if (additional.second->getTagProperty()->isShapeElement() && additional.second->isAttributeCarrierSelected()) {
1097 result.push_back(additional.second);
1108 for (
const auto& additionalsTag : myAdditionals) {
1109 counter += (int)additionalsTag.second.size();
1118 for (
const auto& additionalsTags : myAdditionals) {
1119 for (
const auto& additional : additionalsTags.second) {
1120 myNet->removeGLObjectFromGrid(additional.second);
1124 for (
auto& additionals : myAdditionals) {
1125 additionals.second.clear();
1127 for (
auto& additionals : myAdditionalIDs) {
1128 additionals.second.clear();
1136 const auto it = myAdditionalIDs.at(tag).find(additional->
getID());
1137 if (it == myAdditionalIDs.at(tag).end()) {
1138 throw ProcessError(additional->
getTagStr() +
" with ID='" + additional->
getID() +
"' doesn't exist in AttributeCarriers.additionals");
1141 myAdditionalIDs.at(tag).erase(it);
1144 myAdditionalIDs.at(tag)[newID] = additional;
1156 prefix = neteditOptions.getString(
"busStop-prefix");
1158 prefix = neteditOptions.getString(
"trainStop-prefix");
1160 prefix = neteditOptions.getString(
"containerStop-prefix");
1162 prefix = neteditOptions.getString(
"chargingStation-prefix");
1164 prefix = neteditOptions.getString(
"parkingArea-prefix");
1166 prefix = neteditOptions.getString(
"e1Detector-prefix");
1168 prefix = neteditOptions.getString(
"e2Detector-prefix");
1170 prefix = neteditOptions.getString(
"e3Detector-prefix");
1172 prefix = neteditOptions.getString(
"e1InstantDetector-prefix");
1174 prefix = neteditOptions.getString(
"rerouter-prefix");
1176 prefix = neteditOptions.getString(
"calibrator-prefix");
1178 prefix = neteditOptions.getString(
"routeProbe-prefix");
1180 prefix = neteditOptions.getString(
"vss-prefix");
1182 prefix = neteditOptions.getString(
"tractionSubstation-prefix");
1184 prefix = neteditOptions.getString(
"overheadWire-prefix");
1186 prefix = neteditOptions.getString(
"polygon-prefix");
1188 prefix = neteditOptions.getString(
"poi-prefix");
1192 prefix = neteditOptions.getString(
"jps.walkableArea-prefix");
1194 prefix = neteditOptions.getString(
"jps.obstacle-prefix");
1219 while (retrieveAdditional(tag, prefix +
"_" +
toString(counter),
false) !=
nullptr) {
1224 return (prefix +
"_" +
toString(counter));
1231 for (
const auto& additionalsTags : myAdditionals) {
1232 for (
const auto& additional : additionalsTags.second) {
1233 if (additional.second->isAttributeCarrierSelected()) {
1244 return getNumberOfSelectedAdditionals() -
1246 getNumberOfSelectedPolygons() - getNumberOfSelectedPOIs() -
1248 getNumberOfSelectedJpsWalkableAreas() - getNumberOfSelectedJpsObstacles() -
1250 getNumberOfSelectedTAZs() -
1252 getNumberOfSelectedWires();
1260 if (poly.second->isAttributeCarrierSelected()) {
1272 if (walkableArea.second->isAttributeCarrierSelected()) {
1284 if (obstacle.second->isAttributeCarrierSelected()) {
1296 if (
POI.second->isAttributeCarrierSelected()) {
1301 if (POILane.second->isAttributeCarrierSelected()) {
1306 if (
POIGEO.second->isAttributeCarrierSelected()) {
1318 if (
TAZ.second->isAttributeCarrierSelected()) {
1329 for (
const auto& additionalsTags : myAdditionals) {
1330 for (
const auto& additional : additionalsTags.second) {
1331 if (additional.second->isAttributeCarrierSelected() && additional.second->getTagProperty()->isWireElement()) {
1343 for (
const auto& TAZSourceSinkTag : myTAZSourceSinks) {
1344 auto it = TAZSourceSinkTag.second.find(sourceSink);
1345 if (it != TAZSourceSinkTag.second.end()) {
1350 throw ProcessError(
"Attempted to retrieve non-existant sourceSink (glObject)");
1357const std::unordered_map<SumoXMLTag, std::unordered_map<const GNEAttributeCarrier*, GNETAZSourceSink*>, std::hash<int> >&
1359 return myTAZSourceSinks;
1366 for (
const auto& sourceSinksTag : myTAZSourceSinks) {
1367 counter += (int)sourceSinksTag.second.size();
1376 for (
auto& sourceSinksTags : myTAZSourceSinks) {
1377 sourceSinksTags.second.clear();
1384 auto it = myDemandElementIDs.at(type).find(
id);
1385 if (it != myDemandElementIDs.at(type).end()) {
1389 throw ProcessError(
"Attempted to retrieve non-existant demand element (string)");
1398 for (
const auto& type : types) {
1399 auto it = myDemandElementIDs.at(type).find(
id);
1400 if (it != myDemandElementIDs.at(type).end()) {
1405 throw ProcessError(
"Attempted to retrieve non-existant demand element (string)");
1415 for (
const auto& demandElementTag : myDemandElements) {
1416 auto it = demandElementTag.second.find(glObject);
1417 if (it != demandElementTag.second.end()) {
1422 throw ProcessError(
"Attempted to retrieve non-existant demandElement (glObject)");
1429std::vector<GNEDemandElement*>
1431 std::vector<GNEDemandElement*> result;
1433 for (
const auto& demandElementTag : myDemandElements) {
1434 for (
const auto& demandElement : demandElementTag.second) {
1435 if (demandElement.second->isAttributeCarrierSelected()) {
1436 result.push_back(demandElement.second);
1444const std::unordered_map<SumoXMLTag, std::unordered_map<const GUIGlObject*, GNEDemandElement*>, std::hash<int> >&
1446 return myDemandElements;
1455 const auto tagProperty = myNet->getTagPropertiesDatabase()->getTagProperty(tag,
true);
1459 prefix = neteditOptions.getString(
"route-prefix");
1461 prefix = neteditOptions.getString(
"routeDistribution-prefix");
1463 prefix = neteditOptions.getString(
"vType-prefix");
1465 prefix = neteditOptions.getString(
"vTypeDistribution-prefix");
1467 prefix = neteditOptions.getString(
"trip-prefix");
1468 }
else if (tagProperty->isVehicle() && !tagProperty->isFlow()) {
1469 prefix = neteditOptions.getString(
"vehicle-prefix");
1470 }
else if (tagProperty->isPerson()) {
1471 if (tagProperty->isFlow()) {
1472 prefix = neteditOptions.getString(
"personflow-prefix");
1474 prefix = neteditOptions.getString(
"person-prefix");
1476 }
else if (tagProperty->isContainer()) {
1477 if (tagProperty->isFlow()) {
1478 prefix = neteditOptions.getString(
"containerflow-prefix");
1480 prefix = neteditOptions.getString(
"container-prefix");
1482 }
else if (tagProperty->isFlow()) {
1483 prefix = neteditOptions.getString(
"flow-prefix");
1508 while (retrieveDemandElement(tag, prefix +
"_" +
toString(counter),
false) !=
nullptr) {
1513 return (prefix +
"_" +
toString(counter));
1531 for (
const auto& demandElementsTags : myDemandElements) {
1532 for (
const auto& demandElement : demandElementsTags.second) {
1533 myNet->removeGLObjectFromGrid(demandElement.second);
1537 for (
auto& demandElements : myDemandElements) {
1538 demandElements.second.clear();
1540 for (
auto& demandElements : myDemandElementIDs) {
1541 demandElements.second.clear();
1549 const auto it = myDemandElementIDs.at(tag).find(demandElement->
getID());
1550 if (it == myDemandElementIDs.at(tag).end()) {
1551 throw ProcessError(demandElement->
getTagStr() +
" with ID='" + demandElement->
getID() +
"' doesn't exist in AttributeCarriers.demandElements");
1554 myDemandElementIDs.at(tag).erase(it);
1557 myDemandElementIDs.at(tag)[newID] = demandElement;
1567 myDemandElementIDs.at(defaultVehicleType->
getTagProperty()->
getTag()).insert(std::make_pair(defaultVehicleType->
getID(), defaultVehicleType));
1568 defaultVehicleType->
incRef(
"GNENet::DEFAULT_VEHTYPE");
1573 myDemandElementIDs.at(defaultBikeType->
getTagProperty()->
getTag()).insert(std::make_pair(defaultBikeType->
getID(), defaultBikeType));
1575 defaultBikeType->
incRef(
"GNENet::DEFAULT_BIKETYPE_ID");
1580 myDemandElementIDs.at(defaultTaxiType->
getTagProperty()->
getTag()).insert(std::make_pair(defaultTaxiType->
getID(), defaultTaxiType));
1582 defaultTaxiType->
incRef(
"GNENet::DEFAULT_TAXITYPE_ID");
1587 myDemandElementIDs.at(defaultRailType->
getTagProperty()->
getTag()).insert(std::make_pair(defaultRailType->
getID(), defaultRailType));
1589 defaultRailType->
incRef(
"GNENet::DEFAULT_RAILTYPE_ID");
1594 myDemandElementIDs.at(defaultPersonType->
getTagProperty()->
getTag()).insert(std::make_pair(defaultPersonType->
getID(), defaultPersonType));
1596 defaultPersonType->
incRef(
"GNENet::DEFAULT_PEDTYPE_ID");
1601 myDemandElementIDs.at(defaultContainerType->
getTagProperty()->
getTag()).insert(std::make_pair(defaultContainerType->
getID(), defaultContainerType));
1603 defaultContainerType->
incRef(
"GNENet::DEFAULT_CONTAINERTYPE_ID");
1609 return myStopIndex++;
1616 for (
const auto& demandElementsTags : myDemandElements) {
1617 for (
const auto& demandElement : demandElementsTags.second) {
1618 if (demandElement.second->isAttributeCarrierSelected()) {
1632 if (route.second->isAttributeCarrierSelected()) {
1638 if (vehicle.second->getChildDemandElements().front()->isAttributeCarrierSelected()) {
1643 if (flow.second->getChildDemandElements().front()->isAttributeCarrierSelected()) {
1656 if (vehicle.second->isAttributeCarrierSelected()) {
1660 for (
const auto& trip : myDemandElements.at(
SUMO_TAG_TRIP)) {
1661 if (trip.second->isAttributeCarrierSelected()) {
1666 if (vehicle.second->isAttributeCarrierSelected()) {
1670 for (
const auto& flow : myDemandElements.at(
SUMO_TAG_FLOW)) {
1671 if (flow.second->isAttributeCarrierSelected()) {
1676 if (flow.second->isAttributeCarrierSelected()) {
1681 if (flow.second->isAttributeCarrierSelected()) {
1694 if (person.second->isAttributeCarrierSelected()) {
1699 if (personFlow.second->isAttributeCarrierSelected()) {
1712 for (
const auto& personPlan : person.second->getChildDemandElements()) {
1713 if (personPlan->getTagProperty()->isPlanPersonTrip() && personPlan->isAttributeCarrierSelected()) {
1719 for (
const auto& personPlan : personFlow.second->getChildDemandElements()) {
1720 if (personPlan->getTagProperty()->isPlanPersonTrip() && personPlan->isAttributeCarrierSelected()) {
1734 for (
const auto& personPlan : person.second->getChildDemandElements()) {
1735 if (personPlan->getTagProperty()->isPlanWalk() && personPlan->isAttributeCarrierSelected()) {
1741 for (
const auto& personPlan : personFlow.second->getChildDemandElements()) {
1742 if (personPlan->getTagProperty()->isPlanWalk() && personPlan->isAttributeCarrierSelected()) {
1756 for (
const auto& personPlan : person.second->getChildDemandElements()) {
1757 if (personPlan->getTagProperty()->isPlanRide() && personPlan->isAttributeCarrierSelected()) {
1763 for (
const auto& personPlan : personFlow.second->getChildDemandElements()) {
1764 if (personPlan->getTagProperty()->isPlanRide() && personPlan->isAttributeCarrierSelected()) {
1778 if (container.second->isAttributeCarrierSelected()) {
1783 if (containerFlow.second->isAttributeCarrierSelected()) {
1796 for (
const auto& containerPlan : container.second->getChildDemandElements()) {
1797 if (containerPlan->getTagProperty()->isPlanTransport() && containerPlan->isAttributeCarrierSelected()) {
1803 for (
const auto& containerPlan : containerFlow.second->getChildDemandElements()) {
1804 if (containerPlan->getTagProperty()->isPlanTransport() && containerPlan->isAttributeCarrierSelected()) {
1818 for (
const auto& containerPlan : container.second->getChildDemandElements()) {
1819 if (containerPlan->getTagProperty()->isPlanTranship() && containerPlan->isAttributeCarrierSelected()) {
1825 for (
const auto& containerPlan : containerFlow.second->getChildDemandElements()) {
1826 if (containerPlan->getTagProperty()->isPlanTranship() && containerPlan->isAttributeCarrierSelected()) {
1840 if (route.second->isAttributeCarrierSelected()) {
1845 for (
const auto& trip : myDemandElements.at(
SUMO_TAG_TRIP)) {
1846 for (
const auto& stop : trip.second->getChildDemandElements()) {
1847 if (stop->getTagProperty()->isVehicleStop() && stop->isAttributeCarrierSelected()) {
1853 for (
const auto& stop : vehicle.second->getChildDemandElements().front()->getChildDemandElements()) {
1854 if (stop->getTagProperty()->isVehicleStop() && stop->isAttributeCarrierSelected()) {
1859 for (
const auto& flow : myDemandElements.at(
SUMO_TAG_FLOW)) {
1860 for (
const auto& stop : flow.second->getChildDemandElements()) {
1861 if (stop->getTagProperty()->isVehicleStop() && stop->isAttributeCarrierSelected()) {
1867 for (
const auto& stop : flow.second->getChildDemandElements().front()->getChildDemandElements()) {
1868 if (stop->getTagProperty()->isVehicleStop() && stop->isAttributeCarrierSelected()) {
1875 for (
const auto& personPlan : person.second->getChildDemandElements()) {
1876 if (personPlan->getTagProperty()->isPlanStopPerson() && personPlan->isAttributeCarrierSelected()) {
1882 for (
const auto& personPlan : personFlow.second->getChildDemandElements()) {
1883 if (personPlan->getTagProperty()->isPlanStopPerson() && personPlan->isAttributeCarrierSelected()) {
1890 for (
const auto& containerPlan : container.second->getChildDemandElements()) {
1891 if (containerPlan->getTagProperty()->isPlanStopContainer() && containerPlan->isAttributeCarrierSelected()) {
1897 for (
const auto& containerPlan : containerFlow.second->getChildDemandElements()) {
1898 if (containerPlan->getTagProperty()->isPlanStopContainer() && containerPlan->isAttributeCarrierSelected()) {
1909 for (
const auto& dataSet : myDataSets) {
1910 if (dataSet.second->getID() == id) {
1911 return dataSet.second;
1915 throw ProcessError(
"Attempted to retrieve non-existant data set");
1922const std::map<const std::string, GNEDataSet*>&
1933 while (retrieveDataSet(prefix +
"_" +
toString(counter),
false) !=
nullptr) {
1936 return (prefix +
"_" +
toString(counter));
1942 if (myDataIntervals.count(AC)) {
1943 return myDataIntervals.at(AC);
1944 }
else if (hardFail) {
1945 throw ProcessError(
"Attempted to retrieve non-existant data interval");
1952const std::unordered_map<const GNEAttributeCarrier*, GNEDataInterval*>&
1954 return myDataIntervals;
1960 if (myDataIntervals.count(AC) > 0) {
1963 myDataIntervals[AC] = dataInterval;
1966 myNet->getViewNet()->getIntervalBar().markForUpdate();
1972 const auto finder = myDataIntervals.find(dataInterval);
1973 if (finder == myDataIntervals.end()) {
1976 myDataIntervals.erase(finder);
1979 myNet->getViewNet()->getInspectedElements().uninspectAC(dataInterval);
1981 myNet->getViewNet()->getViewParent()->getInspectorFrame()->getHierarchicalElementTree()->removeCurrentEditedAttributeCarrier(dataInterval);
1983 myNet->getViewNet()->getIntervalBar().markForUpdate();
1990 for (
const auto& genericDataTag : myGenericDatas) {
1991 auto it = genericDataTag.second.find(glObject);
1992 if (it != genericDataTag.second.end()) {
1997 throw ProcessError(
"Attempted to retrieve non-existant generic (glObject)");
2004std::vector<GNEGenericData*>
2006 std::vector<GNEGenericData*> result;
2008 for (
const auto& genericDataTag : myGenericDatas) {
2009 for (
const auto& genericData : genericDataTag.second) {
2010 if (genericData.second->isAttributeCarrierSelected()) {
2011 result.push_back(genericData.second);
2019const std::unordered_map<SumoXMLTag, std::unordered_map<const GUIGlObject*, GNEGenericData*>, std::hash<int> >&
2021 return myGenericDatas;
2025std::vector<GNEGenericData*>
2028 std::vector<GNEGenericData*> genericDatas;
2030 for (
const auto& genericData : myGenericDatas.at(genericDataTag)) {
2032 if ((genericData.second->getDataIntervalParent()->getAttributeDouble(
SUMO_ATTR_BEGIN) >= begin) &&
2033 (genericData.second->getDataIntervalParent()->getAttributeDouble(
SUMO_ATTR_END) <= end)) {
2034 genericDatas.push_back(genericData.second);
2037 return genericDatas;
2045 for (
const auto& genericDataTag : myGenericDatas) {
2046 counter += (int)genericDataTag.second.size();
2057 if (genericData.second->isAttributeCarrierSelected()) {
2070 if (genericData.second->isAttributeCarrierSelected()) {
2083 if (genericData.second->isAttributeCarrierSelected()) {
2099 myNet->getViewNet()->getIntervalBar().markForUpdate();
2105 const auto finder = myGenericDatas.at(genericData->
getTagProperty()->
getTag()).find(genericData);
2112 myNet->getViewNet()->getInspectedElements().uninspectAC(genericData);
2114 myNet->getViewNet()->getViewParent()->getInspectorFrame()->getHierarchicalElementTree()->removeCurrentEditedAttributeCarrier(genericData);
2116 myNet->getDataPathManager()->removePath(genericData);
2118 myNet->getViewNet()->getIntervalBar().markForUpdate();
2122std::set<std::string>
2125 std::set<std::string> attributesSolution;
2127 std::vector<GNEGenericData*> genericDatas;
2129 for (
const auto& interval : myDataIntervals) {
2133 for (
const auto& genericData : interval.second->getGenericDataChildren()) {
2134 if (genericDataTag.empty() || (genericData->getTagProperty()->getTagStr() == genericDataTag)) {
2135 genericDatas.push_back(genericData);
2141 for (
const auto& genericData : genericDatas) {
2142 for (
const auto& attribute : genericData->getParametersMap()) {
2143 attributesSolution.insert(attribute.first);
2146 return attributesSolution;
2150std::set<std::string>
2152 const std::string& beginStr,
const std::string& endStr)
const {
2154 std::set<std::string> attributesSolution;
2156 std::vector<GNEDataSet*> dataSets;
2157 std::vector<GNEDataInterval*> dataIntervals;
2159 GNEDataSet* retrievedDataSet = retrieveDataSet(dataSetID,
false);
2161 if (dataSetID.empty()) {
2163 dataSets.reserve(myDataSets.size());
2164 for (
const auto& dataSet : myDataSets) {
2165 dataSets.push_back(dataSet.second);
2167 }
else if (retrievedDataSet) {
2168 dataSets.push_back(retrievedDataSet);
2170 return attributesSolution;
2173 int numberOfIntervals = 0;
2174 for (
const auto& dataSet : dataSets) {
2175 numberOfIntervals += (int)dataSet->getDataIntervalChildren().size();
2178 dataIntervals.reserve(numberOfIntervals);
2180 for (
const auto& dataSet : dataSets) {
2181 for (
const auto& dataInterval : dataSet->getDataIntervalChildren()) {
2183 if (beginStr.empty() && endStr.empty()) {
2184 dataIntervals.push_back(dataInterval.second);
2185 }
else if (endStr.empty()) {
2187 const double begin = GNEAttributeCarrier::parse<double>(beginStr);
2188 if (dataInterval.second->getAttributeDouble(
SUMO_ATTR_BEGIN) >= begin) {
2189 dataIntervals.push_back(dataInterval.second);
2191 }
else if (beginStr.empty()) {
2193 const double end = GNEAttributeCarrier::parse<double>(endStr);
2194 if (dataInterval.second->getAttributeDouble(
SUMO_ATTR_END) <= end) {
2195 dataIntervals.push_back(dataInterval.second);
2199 const double begin = GNEAttributeCarrier::parse<double>(beginStr);
2200 const double end = GNEAttributeCarrier::parse<double>(endStr);
2201 if ((dataInterval.second->getAttributeDouble(
SUMO_ATTR_BEGIN) >= begin) &&
2202 (dataInterval.second->getAttributeDouble(
SUMO_ATTR_END) <= end)) {
2203 dataIntervals.push_back(dataInterval.second);
2209 for (
const auto& dataInterval : dataIntervals) {
2210 for (
const auto& genericData : dataInterval->getGenericDataChildren()) {
2212 if (genericDataTag.empty() || (genericData->getTagProperty()->getTagStr() == genericDataTag)) {
2213 for (
const auto& attribute : genericData->getParametersMap()) {
2214 attributesSolution.insert(attribute.first);
2219 return attributesSolution;
2225 for (
const auto& meanData : myMeanDatas.at(type)) {
2226 if (meanData.second->getID() == id) {
2227 return meanData.second;
2231 throw ProcessError(
"Attempted to retrieve non-existant meanData (string)");
2238const std::unordered_map<SumoXMLTag, std::map<const std::string, GNEMeanData*>, std::hash<int> >&
2246 return myNumberOfMeanDataElements;
2253 for (
auto& meanDatas : myMeanDatas) {
2254 meanDatas.second.clear();
2262 const auto it = myMeanDatas.at(tag).find(meanData->
getID());
2263 if (it == myMeanDatas.at(tag).end()) {
2264 throw ProcessError(meanData->
getTagStr() +
" with ID='" + meanData->
getID() +
"' doesn't exist in AttributeCarriers.meanDatas");
2267 myMeanDatas.at(tag).erase(it);
2268 myMeanDatas.at(tag)[newID] = meanData;
2280 prefix = neteditOptions.getString(
"meanDataEdge-prefix");
2282 prefix = neteditOptions.getString(
"meanDataLane-prefix");
2285 while (retrieveMeanData(tag, prefix +
"_" +
toString(counter),
false) !=
nullptr) {
2288 return (prefix +
"_" +
toString(counter));
2294 myNet->getNetBuilder()->getNodeCont().insert(junction->
getNBNode());
2295 registerJunction(junction);
2302 myNet->getViewNet()->getInspectedElements().uninspectAC(junction);
2304 myNet->getViewNet()->getViewParent()->getInspectorFrame()->getHierarchicalElementTree()->removeCurrentEditedAttributeCarrier(junction);
2306 myNet->removeGLObjectFromGrid(junction);
2308 myNumberOfNetworkElements--;
2309 myNet->getNetBuilder()->getNodeCont().extract(junction->
getNBNode());
2310 junction->
decRef(
"GNENet::deleteSingleJunction");
2318 const auto& createEdgeFrame = myNet->getViewNet()->getViewParent()->getCreateEdgeFrame();
2321 myNumberOfNetworkElements++;
2323 if (myNet->getViewNet()->getViewParent()->getCreateEdgeFrame()->shown()) {
2324 myNet->getViewNet()->getViewParent()->getCreateEdgeFrame()->getEdgeTypeSelector()->refreshEdgeTypeSelector();
2327 createEdgeFrame->getEdgeTypeSelector()->setCurrentEdgeType(edgeType);
2334 const auto& createEdgeFrame = myNet->getViewNet()->getViewParent()->getCreateEdgeFrame();
2336 myNet->getViewNet()->getInspectedElements().uninspectAC(edgeType);
2338 myNet->getViewNet()->getViewParent()->getInspectorFrame()->getHierarchicalElementTree()->removeCurrentEditedAttributeCarrier(edgeType);
2341 myNumberOfNetworkElements--;
2343 if (createEdgeFrame->getEdgeTypeSelector()->getEdgeTypeSelected() == edgeType) {
2344 createEdgeFrame->getEdgeTypeSelector()->clearEdgeTypeSelected();
2347 createEdgeFrame->getEdgeTypeSelector()->refreshEdgeTypeSelector();
2354 myNet->getNetBuilder()->getEdgeCont().insert(nbe);
2366 myNet->getViewNet()->getInspectedElements().uninspectAC(edge);
2368 myNet->getViewNet()->getViewParent()->getInspectorFrame()->getHierarchicalElementTree()->removeCurrentEditedAttributeCarrier(edge);
2370 myNet->removeGLObjectFromGrid(edge);
2372 myNumberOfNetworkElements--;
2378 myNet->getNetBuilder()->getEdgeCont().extract(myNet->getNetBuilder()->getDistrictCont(), edge->
getNBEdge());
2379 edge->
decRef(
"GNENet::deleteSingleEdge");
2402 myNumberOfNetworkElements++;
2410 if (finder == myLanes.end()) {
2413 myLanes.erase(finder);
2414 myNumberOfNetworkElements--;
2416 myNet->getViewNet()->getInspectedElements().uninspectAC(lane);
2418 myNet->getViewNet()->getViewParent()->getInspectorFrame()->getHierarchicalElementTree()->removeCurrentEditedAttributeCarrier(lane);
2429 myNumberOfNetworkElements++;
2436 const auto finder = myCrossings.find(crossing->
getGUIGlObject());
2437 if (finder == myCrossings.end()) {
2440 myCrossings.erase(finder);
2441 myNumberOfNetworkElements--;
2443 if (myNet->getViewNet()) {
2444 myNet->getViewNet()->getInspectedElements().uninspectAC(crossing);
2446 myNet->getViewNet()->getViewParent()->getInspectorFrame()->getHierarchicalElementTree()->removeCurrentEditedAttributeCarrier(crossing);
2458 myNumberOfNetworkElements++;
2465 const auto finder = myWalkingAreas.find(walkingArea->
getGUIGlObject());
2466 if (finder == myWalkingAreas.end()) {
2469 myWalkingAreas.erase(finder);
2470 myNumberOfNetworkElements--;
2472 myNet->getViewNet()->getInspectedElements().uninspectAC(walkingArea);
2474 myNet->getViewNet()->getViewParent()->getInspectorFrame()->getHierarchicalElementTree()->removeCurrentEditedAttributeCarrier(walkingArea);
2485 myNumberOfNetworkElements++;
2492 const auto finder = myConnections.find(connection->
getGUIGlObject());
2493 if (finder == myConnections.end()) {
2496 myConnections.erase(finder);
2497 myNumberOfNetworkElements--;
2499 myNet->getViewNet()->getInspectedElements().uninspectAC(connection);
2501 myNet->getViewNet()->getViewParent()->getInspectorFrame()->getHierarchicalElementTree()->removeCurrentEditedAttributeCarrier(connection);
2512 myNumberOfNetworkElements++;
2519 const auto finder = myInternalLanes.find(internalLane->
getGUIGlObject());
2520 if (finder == myInternalLanes.end()) {
2523 myInternalLanes.erase(finder);
2524 myNumberOfNetworkElements--;
2532 if (myAdditionals.at(tag).count(additional) > 0) {
2536 myAdditionals.at(tag)[additional->
getGUIGlObject()] = additional;
2538 myAdditionalIDs.at(tag)[additional->
getID()] = additional;
2540 myNumberOfNetworkElements++;
2543 myNet->addGLObjectIntoGrid(additional);
2546 if (myNet->isUpdateGeometryEnabled()) {
2550 myNet->getSavingStatus()->requireSaveAdditionals();
2559 auto itFind = myAdditionals.at(tag).find(additional->
getGUIGlObject());
2561 if (itFind == myAdditionals.at(tag).end()) {
2565 myAdditionals.at(tag).erase(itFind);
2567 myAdditionalIDs.at(tag).erase(myAdditionalIDs.at(tag).find(additional->
getID()));
2569 myNumberOfNetworkElements--;
2571 myNet->getViewNet()->getInspectedElements().uninspectAC(additional);
2573 myNet->getViewNet()->getViewParent()->getInspectorFrame()->getHierarchicalElementTree()->removeCurrentEditedAttributeCarrier(additional);
2576 myNet->removeGLObjectFromGrid(additional);
2579 myNet->getNetworkPathManager()->removePath(additional);
2581 myNet->getSavingStatus()->requireSaveAdditionals();
2591 if (myTAZSourceSinks.at(sourceSinkTag).count(sourceSink) > 0) {
2594 myTAZSourceSinks.at(sourceSinkTag)[sourceSink] = sourceSink;
2595 myNumberOfNetworkElements++;
2597 myNet->getSavingStatus()->requireSaveAdditionals();
2606 auto itFind = myTAZSourceSinks.at(tag).find(sourceSink);
2608 if (itFind == myTAZSourceSinks.at(tag).end()) {
2612 myTAZSourceSinks.at(tag).erase(itFind);
2613 myNumberOfNetworkElements--;
2615 myNet->getViewNet()->getInspectedElements().uninspectAC(sourceSink);
2617 myNet->getViewNet()->getViewParent()->getInspectorFrame()->getHierarchicalElementTree()->removeCurrentEditedAttributeCarrier(sourceSink);
2619 myNet->getSavingStatus()->requireSaveAdditionals();
2627 if (myDemandElements.at(tag).count(demandElement) > 0) {
2630 myDemandElements.at(tag)[demandElement->
getGUIGlObject()] = demandElement;
2631 myNumberOfDemandElements++;
2633 myDemandElementIDs.at(tag)[demandElement->
getID()] = demandElement;
2636 myNet->addGLObjectIntoGrid(demandElement);
2638 if (myNet->isUpdateGeometryEnabled()) {
2642 if (myNet->getViewNet()->getEditModes().isCurrentSupermodeDemand()) {
2648 myNet->getSavingStatus()->requireSaveDemandElements();
2656 auto viewParent = myNet->getViewNet()->getViewParent();
2658 auto itFind = myDemandElements.at(tag).find(demandElement->
getGUIGlObject());
2660 if (itFind == myDemandElements.at(tag).end()) {
2664 myDemandElements.at(tag).erase(itFind);
2666 myDemandElementIDs.at(tag).erase(myDemandElementIDs.at(tag).find(demandElement->
getID()));
2668 myNumberOfDemandElements--;
2670 myNet->removeGLObjectFromGrid(demandElement);
2672 myNet->getViewNet()->getInspectedElements().uninspectAC(demandElement);
2674 viewParent->getInspectorFrame()->getHierarchicalElementTree()->removeCurrentEditedAttributeCarrier(demandElement);
2675 viewParent->getPersonPlanFrame()->getPersonHierarchy()->removeCurrentEditedAttributeCarrier(demandElement);
2676 viewParent->getContainerPlanFrame()->getContainerHierarchy()->removeCurrentEditedAttributeCarrier(demandElement);
2677 if (viewParent->getRouteDistributionFrame()->getDistributionSelector()->getCurrentDistribution() == demandElement) {
2678 viewParent->getRouteDistributionFrame()->getDistributionSelector()->setDistribution(
nullptr);
2680 if (viewParent->getTypeDistributionFrame()->getDistributionSelector()->getCurrentDistribution() == demandElement) {
2681 viewParent->getTypeDistributionFrame()->getDistributionSelector()->setDistribution(
nullptr);
2684 if (myNet->getViewNet()->getLastCreatedRoute() == demandElement) {
2685 myNet->getViewNet()->setLastCreatedRoute(
nullptr);
2688 myNet->getDemandPathManager()->removePath(demandElement);
2694 myNet->getSavingStatus()->requireSaveDemandElements();
2701 if (myDataSets.count(dataSet->
getID()) > 0) {
2704 myDataSets[dataSet->
getID()] = dataSet;
2705 myNumberOfDataElements++;
2707 myNet->getSavingStatus()->requireSaveDataElements();
2709 myNet->getViewNet()->getIntervalBar().markForUpdate();
2716 const auto finder = myDataSets.find(dataSet->
getID());
2717 if (finder == myDataSets.end()) {
2720 myDataSets.erase(finder);
2721 myNumberOfDataElements--;
2723 myNet->getViewNet()->getInspectedElements().uninspectAC(dataSet);
2725 myNet->getViewNet()->getViewParent()->getInspectorFrame()->getHierarchicalElementTree()->removeCurrentEditedAttributeCarrier(dataSet);
2727 myNet->getSavingStatus()->requireSaveDataElements();
2729 myNet->getViewNet()->getIntervalBar().markForUpdate();
2740 myNumberOfMeanDataElements++;
2742 myNet->getSavingStatus()->requireSaveMeanDatas();
2757 myNumberOfMeanDataElements--;
2759 myNet->getViewNet()->getInspectedElements().uninspectAC(meanData);
2761 myNet->getViewNet()->getViewParent()->getInspectorFrame()->getHierarchicalElementTree()->removeCurrentEditedAttributeCarrier(meanData);
2764 myNet->removeGLObjectFromGrid(meanData);
2767 myNet->getSavingStatus()->requireSaveMeanDatas();
2774 if (myNet->getViewNet()->getEditModes().isCurrentSupermodeDemand()) {
2776 switch (myNet->getViewNet()->getEditModes().demandEditMode) {
2778 if (tagProperty->
isType()) {
2779 myNet->getViewNet()->getViewParent()->getVehicleFrame()->getTypeSelector()->refreshDemandElementSelector();
2783 if (tagProperty->
isType()) {
2784 myNet->getViewNet()->getViewParent()->getTypeFrame()->getTypeSelector()->refreshTypeSelector(
true);
2788 if (tagProperty->
isType()) {
2789 myNet->getViewNet()->getViewParent()->getTypeDistributionFrame()->getDistributionSelector()->refreshDistributionSelector();
2794 myNet->getViewNet()->getViewParent()->getRouteDistributionFrame()->getDistributionSelector()->refreshDistributionSelector();
2798 if (tagProperty->
isType()) {
2799 myNet->getViewNet()->getViewParent()->getPersonFrame()->getTypeSelector()->refreshDemandElementSelector();
2804 myNet->getViewNet()->getViewParent()->getPersonPlanFrame()->getPersonSelector()->refreshDemandElementSelector();
2808 if (tagProperty->
isType()) {
2809 myNet->getViewNet()->getViewParent()->getContainerFrame()->getTypeSelector()->refreshDemandElementSelector();
2814 myNet->getViewNet()->getViewParent()->getContainerPlanFrame()->getContainerSelector()->refreshDemandElementSelector();
2818 myNet->getViewNet()->getViewParent()->getStopFrame()->getStopParentSelector()->refreshDemandElementSelector();
2832 for (
const auto& junction : myJunctions) {
2833 ACs.push_back(junction.second);
2837 for (
const auto& edge : myEdges) {
2838 ACs.push_back(edge.second);
2842 for (
const auto& lane : myLanes) {
2843 ACs.push_back(lane.second);
2847 for (
const auto& connection : myConnections) {
2848 ACs.push_back(connection.second);
2852 for (
const auto& crossing : myCrossings) {
2853 ACs.push_back(crossing.second);
2857 for (
const auto& walkingArea : myWalkingAreas) {
2858 ACs.push_back(walkingArea.second);
2863 for (
const auto& additionalTag : myAdditionals) {
2864 if (additionalTag.first == tag->
getTag()) {
2865 for (
const auto& additional : additionalTag.second) {
2866 ACs.push_back(additional.second);
2873 for (
const auto& demandElementTag : myDemandElements) {
2874 if (demandElementTag.first == tag->
getTag()) {
2875 for (
const auto& demandElemet : demandElementTag.second) {
2876 ACs.push_back(demandElemet.second);
2884 for (
const auto& dataSet : myDataSets) {
2885 ACs.push_back(dataSet.second);
2889 for (
const auto& dataInterval : myDataIntervals) {
2890 ACs.push_back(dataInterval.second);
2893 for (
const auto& genericDataTag : myGenericDatas) {
2894 if (genericDataTag.first == tag->
getTag()) {
2895 for (
const auto& genericData : genericDataTag.second) {
2896 ACs.push_back(genericData.second);
2900 for (
const auto& meanDataTag : myMeanDatas) {
2901 if (meanDataTag.first == tag->
getTag()) {
2902 for (
const auto& meanData : meanDataTag.second) {
2903 ACs.push_back(meanData.second);
2910 retrieveAttributeCarriersRecursively(child, ACs);
2977 for (
const auto vType : vTypes) {
2978 myTemplates[vType->getTag()] =
new GNEVType(vType->getTag(), myNet);
2985 for (
const auto route : routes) {
2986 myTemplates[route->getTag()] =
new GNERoute(route->getTag(), myNet);
2993 for (
const auto vehicle : vehicles) {
2994 myTemplates[vehicle->getTag()] =
new GNEVehicle(vehicle->getTag(), myNet);
2998 for (
const auto person : persons) {
2999 myTemplates[person->getTag()] =
new GNEPerson(person->getTag(), myNet);
3003 for (
const auto container : containers) {
3004 myTemplates[container->getTag()] =
new GNEContainer(container->getTag(), myNet);
3008 for (
const auto stopAndWaypoint : stopAndWaypoints) {
3009 myTemplates[stopAndWaypoint->getTag()] =
new GNEStop(stopAndWaypoint->getTag(), myNet);
3013 for (
const auto personTrip : personTrips) {
3014 myTemplates[personTrip->getTag()] =
new GNEPersonTrip(personTrip->getTag(), myNet);
3018 for (
const auto walk : walks) {
3019 myTemplates[walk->getTag()] =
new GNEWalk(walk->getTag(), myNet);
3023 for (
const auto ride : rides) {
3024 myTemplates[ride->getTag()] =
new GNERide(ride->getTag(), myNet);
3028 for (
const auto stopPerson : stopPersons) {
3029 myTemplates[stopPerson->getTag()] =
new GNEStopPlan(stopPerson->getTag(), myNet);
3033 for (
const auto transport : transports) {
3034 myTemplates[transport->getTag()] =
new GNETransport(transport->getTag(), myNet);
3038 for (
const auto tranship : tranships) {
3039 myTemplates[tranship->getTag()] =
new GNETranship(tranship->getTag(), myNet);
3043 for (
const auto stopContainer : stopContainers) {
3044 myTemplates[stopContainer->getTag()] =
new GNEStopPlan(stopContainer->getTag(), myNet);
3047 for (
const auto& AC : myTemplates) {
3048 AC.second->resetDefaultValues(
false);
3054 for (
auto& AC : myTemplates) {
3060std::map<SumoXMLTag, GNEAttributeCarrier*>
3068 if (myTemplates.count(tag) > 0) {
3069 return myTemplates.at(tag);
3078 for (
const auto& templateAC : myTemplates) {
3079 if (templateAC.second->getTagProperty()->getSelectorText() == selectorText) {
3080 return templateAC.second;
3099 const auto additionalFiles = parsingSavingFiles(myAdditionalElementsSavingFiles);
3100 const auto demandElementFiles = parsingSavingFiles(myDemandElementsSavingFiles);
3101 const auto dataElementFiles = parsingSavingFiles(myDataElementsSavingFiles);
3102 const auto meanDataElementFiles = parsingSavingFiles(myMeanDataElementsSavingFiles);
3104 neteditOptions.resetWritable();
3105 if (additionalFiles.size() > 0) {
3106 neteditOptions.set(
"additional-files", additionalFiles);
3108 neteditOptions.resetDefault(
"additional-files");
3111 neteditOptions.resetWritable();
3112 if (demandElementFiles.size() > 0) {
3113 neteditOptions.set(
"route-files", demandElementFiles);
3115 neteditOptions.resetDefault(
"route-files");
3118 neteditOptions.resetWritable();
3119 if (dataElementFiles.size() > 0) {
3120 neteditOptions.set(
"data-files", dataElementFiles);
3122 neteditOptions.resetDefault(
"data-files");
3125 neteditOptions.resetWritable();
3126 if (meanDataElementFiles.size() > 0) {
3127 neteditOptions.set(
"meandata-files", meanDataElementFiles);
3129 neteditOptions.resetDefault(
"meandata-files");
3136 if ((additionalElement->
getFilename().size() > 0) && !existAdditionalFilename(additionalElement->
getFilename())) {
3137 if (myAdditionalElementsSavingFiles.empty()) {
3138 updateAdditionalEmptyFilenames(additionalElement->
getFilename());
3140 myAdditionalElementsSavingFiles.push_back(additionalElement->
getFilename());
3148 for (
const auto& additionalTag : myNet->getAttributeCarriers()->getAdditionals()) {
3149 for (
const auto& additional : additionalTag.second) {
3150 additional.second->changeDefaultFilename(file);
3154 for (
auto& templateAC : myNet->getACTemplates()->getACTemplates()) {
3155 if (templateAC.second->getTagProperty()->isAdditionalElement() && templateAC.second->getFilename().empty()) {
3156 templateAC.second->changeDefaultFilename(file);
3160 if (!existAdditionalFilename(file)) {
3161 myAdditionalElementsSavingFiles.push_back(file);
3166const std::vector<std::string>&
3168 return myAdditionalElementsSavingFiles;
3175 for (
const auto& additionalTag : myNet->getAttributeCarriers()->getAdditionals()) {
3176 for (
const auto& additional : additionalTag.second) {
3177 additionalsbyFilenames[additional.second->getFilename()].insert(additional.second);
3181 for (
const auto& route : myNet->getAttributeCarriers()->getDemandElements().at(
SUMO_TAG_ROUTE)) {
3182 if (std::find(myAdditionalElementsSavingFiles.begin(), myAdditionalElementsSavingFiles.end(), route.second->getFilename()) != myAdditionalElementsSavingFiles.end()) {
3183 additionalsbyFilenames[route.second->getFilename()].insert(route.second);
3187 auto it = myAdditionalElementsSavingFiles.begin();
3188 while (it != myAdditionalElementsSavingFiles.end()) {
3189 if (it->empty() || (additionalsbyFilenames.find(*it) == additionalsbyFilenames.end())) {
3190 it = myAdditionalElementsSavingFiles.erase(it);
3195 return additionalsbyFilenames;
3201 const auto it = std::find(myAdditionalElementsSavingFiles.begin(), myAdditionalElementsSavingFiles.end(), file);
3202 return it != myAdditionalElementsSavingFiles.end();
3209 if (myDemandElementsSavingFiles.empty()) {
3210 updateDemandEmptyFilenames(demandElement->
getFilename());
3212 myDemandElementsSavingFiles.push_back(demandElement->
getFilename());
3220 for (
const auto& demandTag : myNet->getAttributeCarriers()->getDemandElements()) {
3221 for (
const auto& demand : demandTag.second) {
3222 demand.second->changeDefaultFilename(file);
3226 for (
auto& templateAC : myNet->getACTemplates()->getACTemplates()) {
3227 if (templateAC.second->getTagProperty()->isDemandElement() && templateAC.second->getFilename().empty()) {
3228 templateAC.second->changeDefaultFilename(file);
3232 if (!existDemandFilename(file)) {
3233 myDemandElementsSavingFiles.push_back(file);
3238const std::vector<std::string>&
3240 return myDemandElementsSavingFiles;
3247 for (
const auto& demandTag : myNet->getAttributeCarriers()->getDemandElements()) {
3248 for (
const auto& demand : demandTag.second) {
3249 if (std::find(myAdditionalElementsSavingFiles.begin(), myAdditionalElementsSavingFiles.end(), demand.second->getFilename()) == myAdditionalElementsSavingFiles.end()) {
3250 demandsbyFilenames[demand.second->getFilename()].insert(demand.second);
3255 auto it = myDemandElementsSavingFiles.begin();
3256 while (it != myDemandElementsSavingFiles.end()) {
3257 if (it->empty() || (demandsbyFilenames.find(*it) == demandsbyFilenames.end())) {
3258 it = myDemandElementsSavingFiles.erase(it);
3263 return demandsbyFilenames;
3269 const auto it = std::find(myDemandElementsSavingFiles.begin(), myDemandElementsSavingFiles.end(), file);
3270 return it != myDemandElementsSavingFiles.end();
3277 if (myDataElementsSavingFiles.empty()) {
3278 updateDataEmptyFilenames(dataElement->
getFilename());
3280 myDataElementsSavingFiles.push_back(dataElement->
getFilename());
3288 if (file.size() > 0) {
3289 for (
const auto& dataSet : myNet->getAttributeCarriers()->getDataSets()) {
3290 dataSet.second->changeDefaultFilename(file);
3293 if (!existDataFilename(file)) {
3294 myDataElementsSavingFiles.push_back(file);
3300const std::vector<std::string>&
3302 return myDataElementsSavingFiles;
3309 for (
const auto& dataSet : myNet->getAttributeCarriers()->getDataSets()) {
3310 datasbyFilenames[dataSet.second->getFilename()].insert(dataSet.second);
3313 auto it = myDataElementsSavingFiles.begin();
3314 while (it != myDataElementsSavingFiles.end()) {
3315 if (it->empty() || (datasbyFilenames.find(*it) == datasbyFilenames.end())) {
3316 it = myDataElementsSavingFiles.erase(it);
3321 return datasbyFilenames;
3327 const auto it = std::find(myDataElementsSavingFiles.begin(), myDataElementsSavingFiles.end(), file);
3328 return it != myDataElementsSavingFiles.end();
3334 if ((meanDataElement->
getFilename().size() > 0) && !existMeanDataFilename(meanDataElement->
getFilename())) {
3335 if (myMeanDataElementsSavingFiles.empty()) {
3336 updateMeanDataEmptyFilenames(meanDataElement->
getFilename());
3338 myMeanDataElementsSavingFiles.push_back(meanDataElement->
getFilename());
3346 for (
const auto& meanDataTag : myNet->getAttributeCarriers()->getMeanDatas()) {
3347 for (
const auto& meanData : meanDataTag.second) {
3348 meanData.second->changeDefaultFilename(file);
3352 for (
auto& templateAC : myNet->getACTemplates()->getACTemplates()) {
3353 if (templateAC.second->getTagProperty()->isMeanData() && templateAC.second->getFilename().empty()) {
3354 templateAC.second->changeDefaultFilename(file);
3358 if (!existMeanDataFilename(file)) {
3359 myMeanDataElementsSavingFiles.push_back(file);
3364const std::vector<std::string>&
3366 return myMeanDataElementsSavingFiles;
3373 for (
const auto& meanDataTag : myNet->getAttributeCarriers()->getMeanDatas()) {
3374 for (
const auto& meanData : meanDataTag.second) {
3375 meanDatasbyFilenames[meanData.second->getFilename()].insert(meanData.second);
3379 auto it = myMeanDataElementsSavingFiles.begin();
3380 while (it != myMeanDataElementsSavingFiles.end()) {
3381 if (it->empty() || (meanDatasbyFilenames.find(*it) == meanDatasbyFilenames.end())) {
3382 it = myMeanDataElementsSavingFiles.erase(it);
3387 return meanDatasbyFilenames;
3393 const auto it = std::find(myMeanDataElementsSavingFiles.begin(), myMeanDataElementsSavingFiles.end(), file);
3394 return it != myMeanDataElementsSavingFiles.end();
3400 std::string savingFileNames;
3402 for (
const auto& savingFile : savingFiles) {
3403 savingFileNames.append(savingFile +
",");
3406 if (savingFileNames.size() > 0) {
3407 savingFileNames.pop_back();
3409 return savingFileNames;
3423 mySumoConfigSaved =
false;
3429 mySumoConfigSaved =
true;
3435 return mySumoConfigSaved;
3442 myNeteditConfigSaved =
false;
3448 myNeteditConfigSaved =
true;
3454 return myNeteditConfigSaved;
3460 myNetworkSaved =
false;
3462 myNeteditConfigSaved =
false;
3463 mySumoConfigSaved =
false;
3469 myNetworkSaved =
true;
3475 return myNetworkSaved;
3499 myEdgeTypeSaved =
false;
3505 myEdgeTypeSaved =
true;
3511 return myEdgeTypeSaved;
3517 myAdditionalSaved =
false;
3519 myNeteditConfigSaved =
false;
3520 mySumoConfigSaved =
false;
3526 myAdditionalSaved =
true;
3532 return myAdditionalSaved;
3538 myDemandElementSaved =
false;
3540 myNeteditConfigSaved =
false;
3541 mySumoConfigSaved =
false;
3547 myDemandElementSaved =
true;
3553 return myDemandElementSaved;
3559 myDataElementSaved =
false;
3561 myNeteditConfigSaved =
false;
3562 mySumoConfigSaved =
false;
3568 myDataElementSaved =
true;
3574 return myDataElementSaved;
3580 myMeanDataElementSaved =
false;
3582 myNeteditConfigSaved =
false;
3583 mySumoConfigSaved =
false;
3589 myMeanDataElementSaved =
true;
3595 return myMeanDataElementSaved;
3604 }
else if (myNetworkSaved) {
3608 const std::string header =
TL(
"Confirm close Network");
3609 const std::string contentsA =
TL(
"You have unsaved changes in the network.");
3610 const std::string contentsB =
TL(
"Do you wish to close and discard all changes?");
3611 const auto questionDialog =
GNEQuestionBasicDialog(myNet->getViewNet()->getViewParent()->getGNEAppWindows(),
3618 return questionDialog.getResult();
3628 }
else if (myAdditionalSaved) {
3632 const std::string header =
TL(
"Save additional elements before close");
3633 const std::string contentsA =
TL(
"You have unsaved additional elements.");
3634 const std::string contentsB =
TL(
"Do you wish to close and discard all changes?");
3635 const auto questionDialog =
GNEQuestionBasicDialog(myNet->getViewNet()->getViewParent()->getGNEAppWindows(),
3642 return questionDialog.getResult();
3652 }
else if (myDemandElementSaved) {
3656 const std::string header =
TL(
"Save demand elements before close");
3657 const std::string contentsA =
TL(
"You have unsaved demand elements.");
3658 const std::string contentsB =
TL(
"Do you wish to close and discard all changes?");
3659 const auto questionDialog =
GNEQuestionBasicDialog(myNet->getViewNet()->getViewParent()->getGNEAppWindows(),
3666 return questionDialog.getResult();
3676 }
else if (myDataElementSaved) {
3680 const std::string header =
TL(
"Save data elements before close");
3681 const std::string contentsA =
TL(
"You have unsaved data elements.");
3682 const std::string contentsB =
TL(
"Do you wish to close and discard all changes?");
3683 const auto questionDialog =
GNEQuestionBasicDialog(myNet->getViewNet()->getViewParent()->getGNEAppWindows(),
3690 return questionDialog.getResult();
3700 }
else if (myMeanDataElementSaved) {
3704 const std::string header =
TL(
"Save meanData elements before close");
3705 const std::string contentsA =
TL(
"You have unsaved meanData elements.");
3706 const std::string contentsB =
TL(
"Do you wish to close and discard all changes?");
3707 const auto questionDialog =
GNEQuestionBasicDialog(myNet->getViewNet()->getViewParent()->getGNEAppWindows(),
3714 return questionDialog.getResult();
3725 myReplaced(replaced),
3736 myTllcont.replaceRemoved(myBy, -1, myReplaced, -1,
true);
3743 myTllcont.replaceRemoved(myReplaced, -1, myBy, -1,
true);
3749 return TL(
"Redo replace in TLS");
3755 return TL(
"Undo replace in TLS");
3761 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+
Result
list of possible results when closing the dialog
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
void SumoConfigSaved()
mark SumoConfig as saved
GNEDialog::Result askSaveDemandElements(bool &abortSaving) const
warns about unsaved changes in demand elements and gives the user the option to abort
void additionalsSaved()
mark additionals as saved
void requireSaveNeteditConfig()
inform that netedit config has to be saved
void requireSaveSumoConfig()
inform that SumoConfig has to be saved
void TLSSaved()
mark TLS as saved
bool isSumoConfigSaved() const
check if SumoConfig is saved
void neteditConfigSaved()
mark netedit config as saved
void requireSaveMeanDatas()
inform that mean data elements has to be saved
void meanDatasSaved()
mark mean data elements as saved
bool isDemandElementsSaved() const
check if demand elements are saved
void requireSaveAdditionals()
inform that additionals has to be saved
GNEDialog::Result askSaveNetwork(bool &abortSaving) const
warns about unsaved changes in network and gives the user the option to abort
bool isDataElementsSaved() const
check if data elements are saved
GNEDialog::Result askSaveAdditionalElements(bool &abortSaving) const
warns about unsaved changes in additionals and gives the user the option to abort
GNEDialog::Result askSaveDataElements(bool &abortSaving) const
warns about unsaved changes in data elements and gives the user the option to abort
bool isNetworkSaved() const
check if network is saved
bool isMeanDatasSaved() const
check if mean data elements are saved
void requireSaveDataElements()
inform that data elements has to be saved
bool isNeteditConfigSaved() const
check if netedit config is saved
void networkSaved()
mark network as saved
GNEDialog::Result askSaveMeanDataElements(bool &abortSaving) const
warns about unsaved changes in meanData elements and gives the user the option to abort
bool isAdditionalsSaved() const
check if additionals are saved
SavingStatus()=delete
invalidate default constructor
void requireSaveDemandElements()
inform that demand elements has to be saved
void edgeTypeSaved()
mark edgeType as saved
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.
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