60 mySwapLane2edge(false) {
67 mySwapLane2edge =
false;
69 myEdgeObjects.clearElements();
70 myLaneObjects.clearElements();
72 sortGUIGlObjects(GUIGlObjects);
74 for (
const auto& glObject : myEdgeObjects.GUIGlObjects) {
80 updateAttributeCarriers(myEdgeObjects, AC);
84 updateNetworkElements(myEdgeObjects, AC);
87 updateAdditionalElements(myEdgeObjects, AC);
90 updateTAZElements(myEdgeObjects, AC);
93 updateShapeElements(myEdgeObjects, AC);
96 updateDemandElements(myEdgeObjects, AC);
99 updateGenericDataElements(myEdgeObjects, AC);
104 updateGUIGlObjects(myEdgeObjects);
106 for (
const auto& glObject : myLaneObjects.GUIGlObjects) {
112 updateAttributeCarriers(myLaneObjects, AC);
116 updateNetworkElements(myLaneObjects, AC);
119 updateAdditionalElements(myLaneObjects, AC);
122 updateTAZElements(myLaneObjects, AC);
125 updateShapeElements(myLaneObjects, AC);
128 updateDemandElements(myLaneObjects, AC);
131 updateGenericDataElements(myLaneObjects, AC);
136 updateGUIGlObjects(myLaneObjects);
143 mySwapLane2edge =
true;
149 if (getGUIGlObjectFront()) {
150 return getGUIGlObjectFront()->getGlID();
159 if (getGUIGlObjectFront()) {
160 return getGUIGlObjectFront()->getType();
169 if (mySwapLane2edge) {
170 if (myEdgeObjects.attributeCarriers.size() > 0) {
171 return myEdgeObjects.GUIGlObjects.front();
176 if (myLaneObjects.attributeCarriers.size() > 0) {
177 return myLaneObjects.GUIGlObjects.front();
187 if (mySwapLane2edge) {
188 if (myEdgeObjects.attributeCarriers.size() > 0) {
189 return myEdgeObjects.attributeCarriers.front();
194 if (myLaneObjects.attributeCarriers.size() > 0) {
195 return myLaneObjects.attributeCarriers.front();
205 if (mySwapLane2edge) {
206 if (myEdgeObjects.networkElements.size() > 0) {
207 return myEdgeObjects.networkElements.front();
212 if (myLaneObjects.networkElements.size() > 0) {
213 return myLaneObjects.networkElements.front();
223 if (mySwapLane2edge) {
224 if (myEdgeObjects.additionals.size() > 0) {
225 return myEdgeObjects.additionals.front();
230 if (myLaneObjects.additionals.size() > 0) {
231 return myLaneObjects.additionals.front();
241 if (mySwapLane2edge) {
242 if (myEdgeObjects.shapes.size() > 0) {
243 return myEdgeObjects.shapes.front();
248 if (myLaneObjects.shapes.size() > 0) {
249 return myLaneObjects.shapes.front();
259 if (mySwapLane2edge) {
260 if (myEdgeObjects.TAZElements.size() > 0) {
261 return myEdgeObjects.TAZElements.front();
266 if (myLaneObjects.TAZElements.size() > 0) {
267 return myLaneObjects.TAZElements.front();
277 if (mySwapLane2edge) {
278 if (myEdgeObjects.demandElements.size() > 0) {
279 return myEdgeObjects.demandElements.front();
284 if (myLaneObjects.demandElements.size() > 0) {
285 return myLaneObjects.demandElements.front();
295 if (mySwapLane2edge) {
296 if (myEdgeObjects.genericDatas.size() > 0) {
297 return myEdgeObjects.genericDatas.front();
302 if (myLaneObjects.genericDatas.size() > 0) {
303 return myLaneObjects.genericDatas.front();
313 if (mySwapLane2edge) {
314 if (myEdgeObjects.junctions.size() > 0) {
315 return myEdgeObjects.junctions.front();
320 if (myLaneObjects.junctions.size() > 0) {
321 return myLaneObjects.junctions.front();
331 if (mySwapLane2edge) {
332 if (myEdgeObjects.edges.size() > 0) {
333 return myEdgeObjects.edges.front();
338 if (myLaneObjects.edges.size() > 0) {
339 return myLaneObjects.edges.front();
349 if (mySwapLane2edge) {
350 if (myEdgeObjects.lanes.size() > 0) {
351 return myEdgeObjects.lanes.front();
356 if (myLaneObjects.lanes.size() > 0) {
357 return myLaneObjects.lanes.front();
367 if (mySwapLane2edge) {
368 if (myEdgeObjects.crossings.size() > 0) {
369 return myEdgeObjects.crossings.front();
374 if (myLaneObjects.crossings.size() > 0) {
375 return myLaneObjects.crossings.front();
385 if (mySwapLane2edge) {
386 if (myEdgeObjects.connections.size() > 0) {
387 return myEdgeObjects.connections.front();
392 if (myLaneObjects.connections.size() > 0) {
393 return myLaneObjects.connections.front();
403 if (mySwapLane2edge) {
404 if (myEdgeObjects.internalLanes.size() > 0) {
405 return myEdgeObjects.internalLanes.front();
410 if (myLaneObjects.internalLanes.size() > 0) {
411 return myLaneObjects.internalLanes.front();
421 if (mySwapLane2edge) {
422 if (myEdgeObjects.POIs.size() > 0) {
423 return myEdgeObjects.POIs.front();
428 if (myLaneObjects.POIs.size() > 0) {
429 return myLaneObjects.POIs.front();
439 if (mySwapLane2edge) {
440 if (myEdgeObjects.polys.size() > 0) {
441 return myEdgeObjects.polys.front();
446 if (myLaneObjects.polys.size() > 0) {
447 return myLaneObjects.polys.front();
457 if (mySwapLane2edge) {
458 if (myEdgeObjects.TAZs.size() > 0) {
459 return myEdgeObjects.TAZs.front();
464 if (myLaneObjects.TAZs.size() > 0) {
465 return myLaneObjects.TAZs.front();
475 if (mySwapLane2edge) {
476 if (myEdgeObjects.edgeDatas.size() > 0) {
477 return myEdgeObjects.edgeDatas.front();
482 if (myLaneObjects.edgeDatas.size() > 0) {
483 return myLaneObjects.edgeDatas.front();
493 if (mySwapLane2edge) {
494 if (myEdgeObjects.edgeRelDatas.size() > 0) {
495 return myEdgeObjects.edgeRelDatas.front();
500 if (myLaneObjects.edgeRelDatas.size() > 0) {
501 return myLaneObjects.edgeRelDatas.front();
509 const std::vector<GNEAttributeCarrier*>&
511 if (mySwapLane2edge) {
512 return myEdgeObjects.attributeCarriers;
514 return myLaneObjects.attributeCarriers;
525 GUIGlObjects.clear();
526 attributeCarriers.clear();
527 networkElements.clear();
531 demandElements.clear();
537 internalLanes.clear();
541 genericDatas.clear();
543 edgeRelDatas.clear();
550 std::map<GUIGlObjectType, std::vector<GUIGlObject*> > mySortedGUIGlObjects;
552 for (
const auto& GLObject : GUIGlObjects) {
553 mySortedGUIGlObjects[GLObject->getType()].push_back(GLObject);
556 for (std::map<
GUIGlObjectType, std::vector<GUIGlObject*> >::reverse_iterator i = mySortedGUIGlObjects.rbegin(); i != mySortedGUIGlObjects.rend(); i++) {
557 for (
const auto& GlObject : i->second) {
561 if (GlObject->getType() ==
GLO_LANE) {
562 myLaneObjects.GUIGlObjects.push_back(GlObject);
564 myEdgeObjects.GUIGlObjects.push_back(GlObject);
565 myLaneObjects.GUIGlObjects.push_back(GlObject);
719 container.
TAZs.insert(container.
TAZs.begin(),
dynamic_cast<GNETAZ*
>(AC));
722 container.
TAZs.push_back(
dynamic_cast<GNETAZ*
>(AC));
749 container.
POIs.insert(container.
POIs.begin(),
dynamic_cast<GNEPOI*
>(AC));
752 container.
POIs.push_back(
dynamic_cast<GNEPOI*
>(AC));
835 container.
GUIGlObjects.push_back(attributeCarrrier->getGUIGlObject());
842 mySwapLane2edge(false) {
850 myEventInfo(nullptr) {
856 myEventInfo = (FXEvent*) eventData;
863 return (myEventInfo->state & SHIFTMASK) != 0;
873 return (myEventInfo->state & CONTROLMASK) != 0;
883 return (myEventInfo->state & ALTMASK) != 0;
893 return (myEventInfo->state & LEFTBUTTONMASK) != 0;
903 return (myEventInfo->state & RIGHTBUTTONMASK) != 0;
915 myDemandElementToMove(nullptr) {
922 myRelativeClickedPosition = myViewNet->getPositionInformation();
924 const GNENetworkElement* editedElement = myViewNet->myEditNetworkElementShapes.getEditedNetworkElement();
926 if (myViewNet->myObjectsUnderCursor.getJunctionFront() && (myViewNet->myObjectsUnderCursor.getJunctionFront() == editedElement)) {
927 return calculateMoveOperationShape(myViewNet->myObjectsUnderCursor.getJunctionFront(),
928 myViewNet->myObjectsUnderCursor.getJunctionFront()->getNBNode()->getShape(),
929 myViewNet->getVisualisationSettings().neteditSizeSettings.junctionGeometryPointRadius);
930 }
else if (myViewNet->myObjectsUnderCursor.getCrossingFront() && (myViewNet->myObjectsUnderCursor.getCrossingFront() == editedElement)) {
931 return calculateMoveOperationShape(myViewNet->myObjectsUnderCursor.getCrossingFront(),
932 myViewNet->myObjectsUnderCursor.getCrossingFront()->getCrossingShape(),
933 myViewNet->getVisualisationSettings().neteditSizeSettings.crossingGeometryPointRadius);
934 }
else if (myViewNet->myObjectsUnderCursor.getConnectionFront() && (myViewNet->myObjectsUnderCursor.getConnectionFront() == editedElement)) {
935 return calculateMoveOperationShape(myViewNet->myObjectsUnderCursor.getConnectionFront(),
936 myViewNet->myObjectsUnderCursor.getConnectionFront()->getConnectionShape(),
937 myViewNet->getVisualisationSettings().neteditSizeSettings.connectionGeometryPointRadius);
948 myRelativeClickedPosition = myViewNet->getPositionInformation();
950 const GNEAttributeCarrier* frontAC = myViewNet->myObjectsUnderCursor.getAttributeCarrierFront();
952 if (myViewNet->myObjectsUnderCursor.getPolyFront() && (frontAC == myViewNet->myObjectsUnderCursor.getPolyFront())) {
954 const double polygonShapeOffset = myViewNet->myObjectsUnderCursor.getPolyFront()->getShape().nearest_offset_to_point2D(myViewNet->getPositionInformation(),
false);
956 const double distanceToShape = myViewNet->myObjectsUnderCursor.getPolyFront()->getShape().distance2D(myViewNet->getPositionInformation());
958 const double snap_radius = myViewNet->getVisualisationSettings().neteditSizeSettings.polygonGeometryPointRadius;
960 if (distanceToShape <= snap_radius) {
962 GNEMoveOperation* moveOperation = myViewNet->myObjectsUnderCursor.getPolyFront()->getMoveOperation(polygonShapeOffset);
965 myMoveOperations.push_back(moveOperation);
971 }
else if (myViewNet->myObjectsUnderCursor.getPOIFront() && (frontAC == myViewNet->myObjectsUnderCursor.getPOIFront())) {
973 GNEMoveOperation* moveOperation = myViewNet->myObjectsUnderCursor.getPOIFront()->getMoveOperation(0);
976 myMoveOperations.push_back(moveOperation);
981 }
else if (myViewNet->myObjectsUnderCursor.getAdditionalFront() && (frontAC == myViewNet->myObjectsUnderCursor.getAdditionalFront())) {
983 GNEMoveOperation* moveOperation = myViewNet->myObjectsUnderCursor.getAdditionalFront()->getMoveOperation(0);
986 myMoveOperations.push_back(moveOperation);
991 }
else if (myViewNet->myObjectsUnderCursor.getTAZFront() && (frontAC == myViewNet->myObjectsUnderCursor.getTAZFront())) {
993 const double TAZShapeOffset = myViewNet->myObjectsUnderCursor.getTAZFront()->getTAZElementShape().nearest_offset_to_point2D(myViewNet->getPositionInformation(),
false);
995 const double distanceToShape = myViewNet->myObjectsUnderCursor.getTAZFront()->getTAZElementShape().distance2D(myViewNet->getPositionInformation());
997 const double snap_radius = myViewNet->getVisualisationSettings().neteditSizeSettings.polygonGeometryPointRadius;
999 if (distanceToShape <= snap_radius) {
1001 GNEMoveOperation* moveOperation = myViewNet->myObjectsUnderCursor.getTAZFront()->getMoveOperation(TAZShapeOffset);
1003 if (moveOperation) {
1004 myMoveOperations.push_back(moveOperation);
1010 }
else if (myViewNet->myObjectsUnderCursor.getJunctionFront() && (frontAC == myViewNet->myObjectsUnderCursor.getJunctionFront())) {
1011 if (myViewNet->myObjectsUnderCursor.getJunctionFront()->isShapeEdited()) {
1015 GNEMoveOperation* moveOperation = myViewNet->myObjectsUnderCursor.getJunctionFront()->getMoveOperation(0);
1017 if (moveOperation) {
1018 myMoveOperations.push_back(moveOperation);
1024 }
else if ((myViewNet->myObjectsUnderCursor.getEdgeFront() && (frontAC == myViewNet->myObjectsUnderCursor.getEdgeFront())) ||
1025 (myViewNet->myObjectsUnderCursor.getLaneFront() && (frontAC == myViewNet->myObjectsUnderCursor.getLaneFront()))) {
1027 if (myViewNet->myMouseButtonKeyPressed.shiftKeyPressed()) {
1029 myViewNet->myObjectsUnderCursor.getEdgeFront()->editEndpoint(myViewNet->getPositionInformation(), myViewNet->myUndoList);
1034 const double shapeOffset = myViewNet->myObjectsUnderCursor.getEdgeFront()->getNBEdge()->getGeometry().nearest_offset_to_point2D(myViewNet->getPositionInformation());
1036 GNEMoveOperation* moveOperation = myViewNet->myObjectsUnderCursor.getEdgeFront()->getMoveOperation(shapeOffset);
1038 if (moveOperation) {
1039 myMoveOperations.push_back(moveOperation);
1055 myRelativeClickedPosition = myViewNet->getPositionInformation();
1057 if (myViewNet->myObjectsUnderCursor.getDemandElementFront() &&
1058 (myViewNet->myObjectsUnderCursor.getAttributeCarrierFront() == myViewNet->myObjectsUnderCursor.getDemandElementFront())) {
1060 myDemandElementToMove = myViewNet->myObjectsUnderCursor.getDemandElementFront();
1062 myDemandElementToMove->startGeometryMoving();
1075 const Position offsetMovement = calculateOffset();
1077 if (myDemandElementToMove) {
1079 myDemandElementToMove->moveGeometry(offsetMovement);
1082 if (mouseLeftButtonPressed) {
1084 for (
const auto& moveOperation : myMoveOperations) {
1090 for (
const auto& moveOperation : myMoveOperations) {
1094 delete moveOperation;
1097 myMoveOperations.clear();
1105 const Position offsetMovement = calculateOffset();
1107 if (myDemandElementToMove) {
1108 myDemandElementToMove->commitGeometryMoving(myViewNet->getUndoList());
1109 myDemandElementToMove->endGeometryMoving();
1110 myDemandElementToMove =
nullptr;
1113 for (
const auto& moveOperation : myMoveOperations) {
1116 delete moveOperation;
1119 myMoveOperations.clear();
1127 Position offsetMovement = (myViewNet->getPositionInformation() - myViewNet->myMoveSingleElementValues.myRelativeClickedPosition);
1129 if (myViewNet->myNetworkViewOptions.menuCheckMoveElevation->shown() && myViewNet->myNetworkViewOptions.menuCheckMoveElevation->amChecked() == TRUE) {
1131 offsetMovement =
Position(0, 0, offsetMovement.
y());
1134 offsetMovement.
setz(0);
1137 return offsetMovement;
1146 const double distanceToShape = shape.
distance2D(myViewNet->getPositionInformation());
1148 if (distanceToShape <= radius) {
1152 if (moveOperation) {
1153 myMoveOperations.push_back(moveOperation);
1166 myViewNet(viewNet) {
1173 myClickedPosition = myViewNet->getPositionInformation();
1175 const auto movedJunctions = myViewNet->getNet()->retrieveJunctions(
true);
1176 const auto movedEdges = myViewNet->getNet()->retrieveEdges(
true);
1178 if (myViewNet->myObjectsUnderCursor.getJunctionFront()) {
1179 calculateJunctionSelection();
1180 }
else if (myViewNet->myObjectsUnderCursor.getEdgeFront()) {
1181 calculateEdgeSelection(myViewNet->myObjectsUnderCursor.getEdgeFront());
1189 const Position offsetMovement = calculateOffset();
1191 if (mouseLeftButtonPressed) {
1193 for (
const auto& moveOperation : myMoveOperations) {
1197 }
else if (myMoveOperations.size() > 0) {
1199 myViewNet->getUndoList()->p_begin(
"moving selection");
1201 for (
const auto& moveOperation : myMoveOperations) {
1205 delete moveOperation;
1208 myViewNet->getUndoList()->p_end();
1210 myMoveOperations.clear();
1218 const Position offsetMovement = calculateOffset();
1220 myViewNet->getUndoList()->p_begin(
"moving selection");
1222 for (
const auto& moveOperation : myMoveOperations) {
1225 delete moveOperation;
1228 myViewNet->getUndoList()->p_end();
1230 myMoveOperations.clear();
1236 return (myMoveOperations.size() > 0);
1244 Position offsetMovement = (myViewNet->getPositionInformation() - myClickedPosition);
1246 if (myViewNet->myNetworkViewOptions.menuCheckMoveElevation->shown() && myViewNet->myNetworkViewOptions.menuCheckMoveElevation->amChecked() == TRUE) {
1248 offsetMovement =
Position(0, 0, offsetMovement.
y());
1251 offsetMovement.
setz(0);
1254 return offsetMovement;
1263 const auto selectedJunctions = myViewNet->getNet()->retrieveJunctions(
true);
1265 for (
const auto& junction : selectedJunctions) {
1266 moveOperation = junction->getMoveOperation(0);
1267 if (moveOperation) {
1268 myMoveOperations.push_back(moveOperation);
1272 const auto selectedEdges = myViewNet->getNet()->retrieveEdges(
true);
1274 for (
const auto& edge : selectedEdges) {
1275 moveOperation = edge->getMoveOperation(0);
1276 if (moveOperation) {
1277 myMoveOperations.push_back(moveOperation);
1288 const auto selectedJunctions = myViewNet->getNet()->retrieveJunctions(
true);
1290 for (
const auto& junction : selectedJunctions) {
1291 moveOperation = junction->getMoveOperation(0);
1292 if (moveOperation) {
1293 myMoveOperations.push_back(moveOperation);
1297 const auto selectedEdges000180 = myViewNet->getNet()->retrieve000180AngleEdges(
true);
1298 const auto selectedEdges180360 = myViewNet->getNet()->retrieve180360AngleEdges(
true);
1302 const bool useInverseOffset = (std::find(selectedEdges000180.begin(), selectedEdges000180.end(), clickedEdge) != selectedEdges000180.end());
1304 for (
const auto& edge : selectedEdges000180) {
1306 if (useInverseOffset) {
1307 moveOperation = edge->getMoveOperation(shapeOffset);
1309 moveOperation = edge->getMoveOperation(edge->getNBEdge()->getGeometry().length2D() - shapeOffset);
1312 if (moveOperation) {
1313 myMoveOperations.push_back(moveOperation);
1317 for (
const auto& edge : selectedEdges180360) {
1319 if (useInverseOffset) {
1320 moveOperation = edge->getMoveOperation(edge->getNBEdge()->getGeometry().length2D() - shapeOffset);
1322 moveOperation = edge->getMoveOperation(shapeOffset);
1325 if (moveOperation) {
1326 myMoveOperations.push_back(moveOperation);
1336 myViewNet(viewNet) {
1357 myViewNet(viewNet) {
1378 selectingUsingRectangle(false),
1379 startDrawing(false),
1380 myViewNet(viewNet) {
1386 selectingUsingRectangle =
true;
1387 selectionCorner1 = myViewNet->getPositionInformation();
1388 selectionCorner2 = selectionCorner1;
1395 startDrawing =
true;
1397 selectionCorner2 = myViewNet->getPositionInformation();
1399 myViewNet->setStatusBarText(
"Selection width:" +
toString(fabs(selectionCorner1.x() - selectionCorner2.x()))
1400 +
" height:" +
toString(fabs(selectionCorner1.y() - selectionCorner2.y()))
1401 +
" diagonal:" +
toString(selectionCorner1.distanceTo2D(selectionCorner2)));
1408 selectingUsingRectangle =
false;
1409 startDrawing =
false;
1416 if ((abs(selectionCorner1.x() - selectionCorner2.x()) > 0.01) &&
1417 (abs(selectionCorner1.y() - selectionCorner2.y()) > 0.01) &&
1418 myViewNet->myMouseButtonKeyPressed.shiftKeyPressed()) {
1421 rectangleBoundary.
add(selectionCorner1);
1422 rectangleBoundary.
add(selectionCorner2);
1424 processBoundarySelection(rectangleBoundary);
1429 std::vector<GNEEdge*>
1432 std::vector<GNEEdge*> result;
1434 if ((abs(selectionCorner1.x() - selectionCorner2.x()) > 0.01) &&
1435 (abs(selectionCorner1.y() - selectionCorner2.y()) > 0.01) &&
1436 myViewNet->myMouseButtonKeyPressed.shiftKeyPressed()) {
1439 rectangleBoundary.
add(selectionCorner1);
1440 rectangleBoundary.
add(selectionCorner2);
1441 if (myViewNet->makeCurrent()) {
1443 std::set<std::pair<std::string, GNEAttributeCarrier*> > ACsInBoundary = myViewNet->getAttributeCarriersInBoundary(rectangleBoundary);
1445 for (
auto i : ACsInBoundary) {
1447 result.push_back(
dynamic_cast<GNEEdge*
>(i.second));
1450 myViewNet->makeNonCurrent();
1465 if (selectingUsingRectangle) {
1470 glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
1472 glVertex2d(selectionCorner1.x(), selectionCorner1.y());
1473 glVertex2d(selectionCorner1.x(), selectionCorner2.y());
1474 glVertex2d(selectionCorner2.x(), selectionCorner2.y());
1475 glVertex2d(selectionCorner2.x(), selectionCorner1.y());
1484 if (myViewNet->makeCurrent()) {
1485 std::set<std::pair<std::string, GNEAttributeCarrier*> > ACsInBoundary = myViewNet->getAttributeCarriersInBoundary(boundary);
1487 std::set<std::pair<std::string, GNEAttributeCarrier*> > ACsInBoundaryFiltered;
1488 for (
const auto& AC : ACsInBoundary) {
1489 if (myViewNet->myEditModes.isCurrentSupermodeNetwork()) {
1490 if (AC.second->getTagProperty().isNetworkElement() || AC.second->getTagProperty().isAdditionalElement() ||
1491 AC.second->getTagProperty().isTAZElement() || AC.second->getTagProperty().isShape()) {
1492 ACsInBoundaryFiltered.insert(AC);
1494 }
else if (myViewNet->myEditModes.isCurrentSupermodeDemand() && AC.second->getTagProperty().isDemandElement()) {
1495 ACsInBoundaryFiltered.insert(AC);
1496 }
else if (myViewNet->myEditModes.isCurrentSupermodeData() && AC.second->getTagProperty().isGenericData()) {
1497 ACsInBoundaryFiltered.insert(AC);
1501 std::vector<GNEAttributeCarrier*> ACToSelect;
1502 std::vector<GNEAttributeCarrier*> ACToUnselect;
1504 ACToSelect.reserve(ACsInBoundaryFiltered.size());
1505 ACToUnselect.reserve(ACsInBoundaryFiltered.size());
1510 std::vector<GNEAttributeCarrier*> selectedAC = myViewNet->getNet()->getSelectedAttributeCarriers(
false);
1512 for (
auto i : selectedAC) {
1513 ACToUnselect.push_back(i);
1517 for (
auto i : ACsInBoundaryFiltered) {
1518 switch (myViewNet->myViewParent->getSelectorFrame()->getModificationModeModul()->getModificationMode()) {
1520 ACToUnselect.push_back(i.second);
1523 if (std::find(ACToUnselect.begin(), ACToUnselect.end(), i.second) != ACToUnselect.end()) {
1524 ACToSelect.push_back(i.second);
1528 ACToSelect.push_back(i.second);
1534 std::vector<GNEEdge*> edgesToSelect;
1536 for (
auto i : ACToSelect) {
1538 edgesToSelect.push_back(
dynamic_cast<GNEEdge*
>(i));
1542 for (
auto i : edgesToSelect) {
1544 ACToSelect.push_back(i->getParentJunctions().front());
1545 for (
auto j : i->getParentJunctions().front()->getGNEConnections()) {
1546 ACToSelect.push_back(j);
1548 for (
auto j : i->getParentJunctions().front()->getGNECrossings()) {
1549 ACToSelect.push_back(j);
1552 ACToSelect.push_back(i->getParentJunctions().back());
1553 for (
auto j : i->getParentJunctions().back()->getGNEConnections()) {
1554 ACToSelect.push_back(j);
1556 for (
auto j : i->getParentJunctions().back()->getGNECrossings()) {
1557 ACToSelect.push_back(j);
1562 if ((ACToSelect.size() + ACToUnselect.size()) > 0) {
1564 myViewNet->myUndoList->p_begin(
"selection using rectangle");
1565 for (
auto i : ACToUnselect) {
1568 for (
auto i : ACToSelect) {
1569 if (i->getTagProperty().isSelectable()) {
1573 myViewNet->myUndoList->p_end();
1575 myViewNet->makeNonCurrent();
1585 myTestingEnabled(
OptionsCont::getOptions().getBool(
"gui-testing")),
1587 myTestingHeight(0) {
1597 if ((windowSize.size() == 2) && GNEAttributeCarrier::canParse<int>(windowSize[0]) && GNEAttributeCarrier::canParse<int>(windowSize[1])) {
1598 myTestingWidth = GNEAttributeCarrier::parse<int>(windowSize[0]);
1599 myTestingHeight = GNEAttributeCarrier::parse<int>(windowSize[1]);
1601 WRITE_ERROR(
"Invalid windows size-format: " +
toString(windowSize) +
"for option 'window-size'");
1610 if (myTestingEnabled) {
1612 if (myTestingWidth > 0 && ((myViewNet->getWidth() != myTestingWidth) || (myViewNet->getHeight() != myTestingHeight))) {
1615 mainWindow->resize(myTestingWidth + myTestingWidth - myViewNet->getWidth(), myTestingHeight + myTestingHeight - myViewNet->getHeight());
1622 const double size = myViewNet->p2m(32);
1623 Position center = myViewNet->screenPos2NetPos(8, 8);
1626 glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
1629 glVertex2d(0, -size);
1630 glVertex2d(size, -size);
1631 glVertex2d(size, 0);
1636 Position posRelative = myViewNet->screenPos2NetPos(myViewNet->getWidth() - 40, myViewNet->getHeight() - 20);
1646 return myTestingEnabled;
1654 saveNetwork(nullptr),
1655 saveAdditionalElements(nullptr),
1656 saveDemandElements(nullptr),
1657 saveDataElements(nullptr),
1658 myViewNet(viewNet) {
1665 saveNetwork =
new FXButton(myViewNet->getViewParent()->getGNEAppWindows()->getToolbarsGrip().saveElements,
1668 saveNetwork->create();
1670 saveAdditionalElements =
new FXButton(myViewNet->getViewParent()->getGNEAppWindows()->getToolbarsGrip().saveElements,
1673 saveAdditionalElements->create();
1675 saveDemandElements =
new FXButton(myViewNet->getViewParent()->getGNEAppWindows()->getToolbarsGrip().saveElements,
1678 saveDemandElements->create();
1680 saveDataElements =
new FXButton(myViewNet->getViewParent()->getGNEAppWindows()->getToolbarsGrip().saveElements,
1683 saveDataElements->create();
1685 myViewNet->getViewParent()->getGNEAppWindows()->getToolbarsGrip().saveElements->recalc();
1687 myViewNet->getViewParent()->getGNEAppWindows()->getToolbarsGrip().saveElements->show();
1698 networkButton(nullptr),
1699 demandButton(nullptr),
1700 dataButton(nullptr),
1710 myViewNet->getViewParent()->getGNEAppWindows()->getToolbarsGrip().superModes,
"Network\t\tSet mode for edit network elements. (F2)",
1712 networkButton->create();
1715 myViewNet->getViewParent()->getGNEAppWindows()->getToolbarsGrip().superModes,
"Demand\t\tSet mode for edit traffic demand. (F3)",
1717 demandButton->create();
1720 myViewNet->getViewParent()->getGNEAppWindows()->getToolbarsGrip().superModes,
"Data\t\tSet mode for edit data demand. (F4)",
1722 dataButton->create();
1724 myViewNet->getViewParent()->getGNEAppWindows()->getToolbarsGrip().modes->recalc();
1726 myViewNet->getViewParent()->getGNEAppWindows()->getToolbarsGrip().modes->show();
1732 if (!force && (supermode == myCurrentSupermode)) {
1733 myViewNet->setStatusBarText(
"Mode already selected");
1734 if (myViewNet->myCurrentFrame !=
nullptr) {
1735 myViewNet->myCurrentFrame->focusUpperElement();
1738 myViewNet->setStatusBarText(
"");
1740 myViewNet->abortOperation(
false);
1742 myCurrentSupermode = supermode;
1746 networkButton->setChecked(
true);
1747 demandButton->setChecked(
false);
1748 dataButton->setChecked(
false);
1750 myViewNet->myNetworkCheckableButtons.showNetworkCheckableButtons();
1752 myViewNet->myDemandCheckableButtons.hideDemandCheckableButtons();
1754 myViewNet->myDataCheckableButtons.hideDataCheckableButtons();
1756 setNetworkEditMode(networkEditMode,
true);
1759 networkButton->setChecked(
false);
1760 demandButton->setChecked(
true);
1761 dataButton->setChecked(
false);
1763 myViewNet->myNetworkCheckableButtons.hideNetworkCheckableButtons();
1765 myViewNet->myDemandCheckableButtons.showDemandCheckableButtons();
1767 myViewNet->myDataCheckableButtons.hideDataCheckableButtons();
1769 setDemandEditMode(demandEditMode,
true);
1772 networkButton->setChecked(
false);
1773 demandButton->setChecked(
false);
1774 dataButton->setChecked(
true);
1776 myViewNet->myNetworkCheckableButtons.hideNetworkCheckableButtons();
1778 myViewNet->myDemandCheckableButtons.hideDemandCheckableButtons();
1780 myViewNet->myDataCheckableButtons.showDataCheckableButtons();
1782 setDataEditMode(dataEditMode,
true);
1785 networkButton->update();
1786 demandButton->update();
1787 dataButton->update();
1789 myViewNet->myViewParent->getGNEAppWindows()->updateSuperModeMenuCommands(myCurrentSupermode);
1796 if ((mode == networkEditMode) && !force) {
1797 myViewNet->setStatusBarText(
"Network mode already selected");
1798 if (myViewNet->myCurrentFrame !=
nullptr) {
1799 myViewNet->myCurrentFrame->focusUpperElement();
1802 myViewNet->setStatusBarText(
"Save modifications in TLS before change mode");
1803 myViewNet->myCurrentFrame->focusUpperElement();
1805 myViewNet->setStatusBarText(
"");
1806 myViewNet->abortOperation(
false);
1808 myViewNet->myEditNetworkElementShapes.stopEditCustomShape();
1810 networkEditMode = mode;
1830 myViewNet->myNet->computeNetwork(myViewNet->myViewParent->getGNEAppWindows());
1836 myViewNet->updateNetworkModeSpecificControls();
1843 if ((mode == demandEditMode) && !force) {
1844 myViewNet->setStatusBarText(
"Demand mode already selected");
1845 if (myViewNet->myCurrentFrame !=
nullptr) {
1846 myViewNet->myCurrentFrame->focusUpperElement();
1849 myViewNet->setStatusBarText(
"");
1850 myViewNet->abortOperation(
false);
1852 myViewNet->myEditNetworkElementShapes.stopEditCustomShape();
1854 demandEditMode = mode;
1869 myViewNet->myNet->computeNetwork(myViewNet->myViewParent->getGNEAppWindows());
1871 myViewNet->myNet->getPathCalculator()->updatePathCalculator();
1873 myViewNet->updateDemandModeSpecificControls();
1880 if ((mode == dataEditMode) && !force) {
1881 myViewNet->setStatusBarText(
"Data mode already selected");
1882 if (myViewNet->myCurrentFrame !=
nullptr) {
1883 myViewNet->myCurrentFrame->focusUpperElement();
1886 myViewNet->setStatusBarText(
"");
1887 myViewNet->abortOperation(
false);
1889 myViewNet->myEditNetworkElementShapes.stopEditCustomShape();
1891 dataEditMode = mode;
1904 myViewNet->myNet->computeNetwork(myViewNet->myViewParent->getGNEAppWindows());
1906 myViewNet->myNet->getPathCalculator()->updatePathCalculator();
1908 for (
const auto& dataSet : myViewNet->getNet()->getAttributeCarriers()->getDataSets()) {
1909 dataSet.second->updateAttributeColors();
1912 myViewNet->updateDataModeSpecificControls();
1939 menuCheckShowGrid(nullptr),
1940 menuCheckDrawSpreadVehicles(nullptr),
1941 menuCheckShowDemandElements(nullptr),
1942 menuCheckSelectEdges(nullptr),
1943 menuCheckShowConnections(nullptr),
1944 menuCheckHideConnections(nullptr),
1945 menuCheckExtendSelection(nullptr),
1946 menuCheckChangeAllPhases(nullptr),
1947 menuCheckWarnAboutMerge(nullptr),
1948 menuCheckShowJunctionBubble(nullptr),
1949 menuCheckMoveElevation(nullptr),
1950 menuCheckChainEdges(nullptr),
1951 menuCheckAutoOppositeEdge(nullptr),
1952 myViewNet(viewNet) {
1959 menuCheckShowGrid =
new MFXCheckableButton(
false, myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modes,
1960 (
"\t\tShow grid and restrict movement to the grid - define grid size in visualization options (Ctrl+G)"),
1963 menuCheckShowGrid->setChecked(
false);
1964 menuCheckShowGrid->create();
1966 menuCheckDrawSpreadVehicles =
new MFXCheckableButton(
false, myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modes,
1967 (
"\t\tDraw vehicles spread in lane or in depart position"),
1970 menuCheckDrawSpreadVehicles->setChecked(
false);
1971 menuCheckDrawSpreadVehicles->create();
1973 menuCheckShowDemandElements =
new MFXCheckableButton(
false, myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modes,
1974 (
"\t\tToggle show demand elements"),
1977 menuCheckShowDemandElements->setChecked(
false);
1978 menuCheckShowDemandElements->create();
1980 menuCheckSelectEdges =
new MFXCheckableButton(
false, myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modes,
1981 (
"\t\tToggle whether clicking should select edges or lanes"),
1984 menuCheckSelectEdges->setChecked(
true);
1985 menuCheckSelectEdges->create();
1987 menuCheckShowConnections =
new MFXCheckableButton(
false, myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modes,
1988 (
"\t\tToggle show connections over junctions"),
1991 menuCheckShowConnections->setChecked(myViewNet->getVisualisationSettings().showLane2Lane);
1992 menuCheckShowConnections->create();
1994 menuCheckHideConnections =
new MFXCheckableButton(
false, myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modes,
1995 (
"\t\tHide connections"),
1998 menuCheckHideConnections->setChecked(
false);
1999 menuCheckHideConnections->create();
2001 menuCheckExtendSelection =
new MFXCheckableButton(
false, myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modes,
2002 (
"\t\tToggle whether selecting multiple edges should automatically select their junctions"),
2005 menuCheckExtendSelection->setChecked(
false);
2006 menuCheckExtendSelection->create();
2008 menuCheckChangeAllPhases =
new MFXCheckableButton(
false, myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modes,
2009 (
"\t\tToggle whether clicking should apply state changes to all phases of the current TLS plan"),
2012 menuCheckChangeAllPhases->setChecked(
false);
2013 menuCheckChangeAllPhases->create();
2015 menuCheckWarnAboutMerge =
new MFXCheckableButton(
false, myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modes,
2016 (
"\t\tAsk for confirmation before merging junction."),
2019 menuCheckWarnAboutMerge->setChecked(
true);
2020 menuCheckWarnAboutMerge->create();
2022 menuCheckShowJunctionBubble =
new MFXCheckableButton(
false, myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modes,
2023 (
"\t\tShow bubbles over junction's shapes."),
2026 menuCheckShowJunctionBubble->setChecked(
false);
2027 menuCheckShowJunctionBubble->create();
2029 menuCheckMoveElevation =
new MFXCheckableButton(
false, myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modes,
2030 (
"\t\tApply mouse movement to elevation instead of x,y position"),
2033 menuCheckMoveElevation->setChecked(
false);
2034 menuCheckMoveElevation->create();
2036 menuCheckChainEdges =
new MFXCheckableButton(
false, myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modes,
2037 (
"\t\tCreate consecutive edges with a single click (hit ESC to cancel chain)."),
2040 menuCheckChainEdges->setChecked(
false);
2041 menuCheckChainEdges->create();
2043 menuCheckAutoOppositeEdge =
new MFXCheckableButton(
false, myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modes,
2044 (
"\t\tAutomatically create an edge in the opposite direction"),
2047 menuCheckAutoOppositeEdge->setChecked(
false);
2048 menuCheckAutoOppositeEdge->create();
2051 myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modes->recalc();
2057 menuCheckShowGrid->hide();
2058 menuCheckDrawSpreadVehicles->hide();
2059 menuCheckShowDemandElements->hide();
2060 menuCheckSelectEdges->hide();
2061 menuCheckShowConnections->hide();
2062 menuCheckHideConnections->hide();
2063 menuCheckExtendSelection->hide();
2064 menuCheckChangeAllPhases->hide();
2065 menuCheckWarnAboutMerge->hide();
2066 menuCheckShowJunctionBubble->hide();
2067 menuCheckMoveElevation->hide();
2068 menuCheckChainEdges->hide();
2069 menuCheckAutoOppositeEdge->hide();
2071 myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modes->show();
2078 if (menuCheckShowGrid->shown()) {
2079 commands.push_back(menuCheckShowGrid);
2081 if (menuCheckDrawSpreadVehicles->shown()) {
2082 commands.push_back(menuCheckDrawSpreadVehicles);
2084 if (menuCheckShowDemandElements->shown()) {
2085 commands.push_back(menuCheckShowDemandElements);
2087 if (menuCheckSelectEdges->shown()) {
2088 commands.push_back(menuCheckSelectEdges);
2090 if (menuCheckShowConnections->shown()) {
2091 commands.push_back(menuCheckShowConnections);
2093 if (menuCheckHideConnections->shown()) {
2094 commands.push_back(menuCheckHideConnections);
2096 if (menuCheckExtendSelection->shown()) {
2097 commands.push_back(menuCheckExtendSelection);
2099 if (menuCheckChangeAllPhases->shown()) {
2100 commands.push_back(menuCheckChangeAllPhases);
2102 if (menuCheckWarnAboutMerge->shown()) {
2103 commands.push_back(menuCheckWarnAboutMerge);
2105 if (menuCheckShowJunctionBubble->shown()) {
2106 commands.push_back(menuCheckShowJunctionBubble);
2108 if (menuCheckMoveElevation->shown()) {
2109 commands.push_back(menuCheckMoveElevation);
2111 if (menuCheckChainEdges->shown()) {
2112 commands.push_back(menuCheckChainEdges);
2114 if (menuCheckAutoOppositeEdge->shown()) {
2115 commands.push_back(menuCheckAutoOppositeEdge);
2122 return (menuCheckDrawSpreadVehicles->amChecked() == TRUE);
2128 if (menuCheckShowDemandElements->shown()) {
2129 return (menuCheckShowDemandElements->amChecked() == TRUE);
2139 if (menuCheckSelectEdges->shown()) {
2140 return (menuCheckSelectEdges->amChecked() == TRUE);
2152 return (menuCheckHideConnections->amChecked() == FALSE);
2155 }
else if (menuCheckShowConnections->shown() ==
false) {
2158 return (myViewNet->getVisualisationSettings().showLane2Lane);
2165 if (menuCheckMoveElevation->shown()) {
2166 return (menuCheckMoveElevation->amChecked() == TRUE);
2177 menuCheckShowGrid(nullptr),
2178 menuCheckDrawSpreadVehicles(nullptr),
2179 menuCheckHideShapes(nullptr),
2180 menuCheckHideNonInspectedDemandElements(nullptr),
2181 menuCheckShowAllPersonPlans(nullptr),
2182 menuCheckLockPerson(nullptr),
2184 myLockedPerson(nullptr) {
2191 menuCheckShowGrid =
new MFXCheckableButton(
false, myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modes,
2192 (
"\t\tShow grid and restrict movement to the grid - define grid size in visualization options (Ctrl+G)"),
2195 menuCheckShowGrid->setChecked(
false);
2196 menuCheckShowGrid->create();
2198 menuCheckDrawSpreadVehicles =
new MFXCheckableButton(
false, myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modes,
2199 (
"\t\tDraw vehicles spread in lane or in depart position"),
2202 menuCheckDrawSpreadVehicles->setChecked(
false);
2203 menuCheckDrawSpreadVehicles->create();
2205 menuCheckHideShapes =
new MFXCheckableButton(
false, myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modes,
2206 (
"\t\tToggle show shapes (Polygons and POIs)"),
2209 menuCheckHideShapes->setChecked(
false);
2210 menuCheckHideShapes->create();
2212 menuCheckHideNonInspectedDemandElements =
new MFXCheckableButton(
false, myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modes,
2213 (
"\t\tToggle show non-inspected demand elements"),
2216 menuCheckHideNonInspectedDemandElements->setChecked(
false);
2217 menuCheckHideNonInspectedDemandElements->create();
2219 menuCheckShowAllPersonPlans =
new MFXCheckableButton(
false, myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modes,
2220 (
"\t\tShow all person plans"),
2223 menuCheckShowAllPersonPlans->setChecked(
false);
2224 menuCheckShowAllPersonPlans->create();
2226 menuCheckLockPerson =
new MFXCheckableButton(
false, myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modes,
2227 (
"\t\tLock selected person"),
2230 menuCheckLockPerson->setChecked(
false);
2231 menuCheckLockPerson->create();
2234 myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modes->recalc();
2240 menuCheckShowGrid->hide();
2241 menuCheckDrawSpreadVehicles->hide();
2242 menuCheckHideShapes->hide();
2243 menuCheckHideNonInspectedDemandElements->hide();
2244 menuCheckShowAllPersonPlans->hide();
2245 menuCheckLockPerson->hide();
2247 myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modes->show();
2254 if (menuCheckShowGrid->shown()) {
2255 commands.push_back(menuCheckShowGrid);
2257 if (menuCheckDrawSpreadVehicles->shown()) {
2258 commands.push_back(menuCheckDrawSpreadVehicles);
2260 if (menuCheckHideShapes->shown()) {
2261 commands.push_back(menuCheckHideShapes);
2263 if (menuCheckHideNonInspectedDemandElements->shown()) {
2264 commands.push_back(menuCheckHideNonInspectedDemandElements);
2266 if (menuCheckShowAllPersonPlans->shown() && menuCheckShowAllPersonPlans->isEnabled()) {
2267 commands.push_back(menuCheckShowAllPersonPlans);
2269 if (menuCheckLockPerson->shown() && menuCheckLockPerson->isEnabled()) {
2270 commands.push_back(menuCheckLockPerson);
2277 return (menuCheckDrawSpreadVehicles->amChecked() == TRUE);
2283 if (menuCheckHideNonInspectedDemandElements->shown()) {
2285 if ((menuCheckHideNonInspectedDemandElements->amChecked() == FALSE) || (myViewNet->getInspectedAttributeCarriers().empty())) {
2288 }
else if (myViewNet->getInspectedAttributeCarriers().front()->getTagProperty().isDemandElement()) {
2289 if (myViewNet->isAttributeCarrierInspected(demandElement)) {
2295 if (myViewNet->isAttributeCarrierInspected(i)) {
2301 if (myViewNet->isAttributeCarrierInspected(i)) {
2321 if (menuCheckHideShapes->shown()) {
2322 return (menuCheckHideShapes->amChecked() == FALSE);
2331 if (menuCheckShowAllPersonPlans->shown() && menuCheckShowAllPersonPlans->isEnabled()) {
2332 return (menuCheckShowAllPersonPlans->amChecked() == TRUE);
2341 myLockedPerson = person;
2347 myLockedPerson =
nullptr;
2353 return myLockedPerson;
2361 menuCheckShowAdditionals(nullptr),
2362 menuCheckShowShapes(nullptr),
2363 menuCheckShowDemandElements(nullptr),
2364 myViewNet(viewNet) {
2371 menuCheckShowAdditionals =
new MFXCheckableButton(
false, myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modes,
2372 (
"\t\tToggle show additionals"),
2375 menuCheckShowAdditionals->setChecked(
false);
2376 menuCheckShowAdditionals->create();
2378 menuCheckShowShapes =
new MFXCheckableButton(
false, myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modes,
2379 (
"\t\tToggle show shapes (Polygons and POIs)"),
2382 menuCheckShowShapes->setChecked(
false);
2383 menuCheckShowShapes->create();
2385 menuCheckShowDemandElements =
new MFXCheckableButton(
false, myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modes,
2386 (
"\t\tToggle show demand elements"),
2389 menuCheckShowDemandElements->setChecked(
false);
2390 menuCheckShowDemandElements->create();
2393 myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modes->recalc();
2399 menuCheckShowAdditionals->hide();
2400 menuCheckShowShapes->hide();
2401 menuCheckShowDemandElements->hide();
2403 myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modes->show();
2410 if (menuCheckShowAdditionals->shown()) {
2411 commands.push_back(menuCheckShowAdditionals);
2413 if (menuCheckShowShapes->shown()) {
2414 commands.push_back(menuCheckShowShapes);
2416 if (menuCheckShowDemandElements->shown()) {
2417 commands.push_back(menuCheckShowDemandElements);
2424 if (menuCheckShowAdditionals->shown()) {
2425 return (menuCheckShowAdditionals->amChecked() == TRUE);
2434 if (menuCheckShowShapes->shown()) {
2435 return (menuCheckShowShapes->amChecked() == TRUE);
2444 if (menuCheckShowDemandElements->shown()) {
2445 return (menuCheckShowDemandElements->amChecked() == TRUE);
2457 myIntervalBarUpdate(true),
2458 myGenericDataTypesComboBox(nullptr),
2459 myDataSetsComboBox(nullptr),
2460 myLimitByIntervalCheckBox(nullptr),
2461 myBeginTextField(nullptr),
2462 myEndTextField(nullptr),
2463 myFilteredAttributesComboBox(nullptr),
2464 myNoGenericDatas(
"<no types>"),
2465 myAllGenericDatas(
"<all types>"),
2466 myNoDataSets(
"<no dataSets>"),
2467 myAllDataSets(
"<all dataSets>"),
2468 myAllAttributes(
"<all attributes>") {
2475 FXLabel* genericDataLabel =
new FXLabel(myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().intervalBar,
2477 genericDataLabel->create();
2479 myGenericDataTypesComboBox =
new FXComboBox(myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().intervalBar,
2481 myGenericDataTypesComboBox->create();
2482 FXLabel* dataSetLabel =
new FXLabel(myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().intervalBar,
2484 dataSetLabel->create();
2486 myDataSetsComboBox =
new FXComboBox(myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().intervalBar,
2488 myDataSetsComboBox->create();
2490 myLimitByIntervalCheckBox =
new FXCheckButton(myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().intervalBar,
2492 myLimitByIntervalCheckBox->create();
2494 myBeginTextField =
new FXTextField(myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().intervalBar,
2496 myBeginTextField->create();
2498 myEndTextField =
new FXTextField(myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().intervalBar,
2500 myEndTextField->create();
2502 FXLabel* attributeLabel =
new FXLabel(myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().intervalBar,
2504 attributeLabel->create();
2506 myFilteredAttributesComboBox =
new FXComboBox(myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().intervalBar,
2508 myFilteredAttributesComboBox->create();
2510 myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().intervalBar->recalc();
2517 myGenericDataTypesComboBox->enable();
2518 myDataSetsComboBox->enable();
2519 myLimitByIntervalCheckBox->enable();
2520 if (myLimitByIntervalCheckBox->getCheck() == TRUE) {
2521 myBeginTextField->enable();
2522 myEndTextField->enable();
2524 myBeginTextField->disable();
2525 myEndTextField->disable();
2527 myFilteredAttributesComboBox->enable();
2534 myGenericDataTypesComboBox->disable();
2535 myDataSetsComboBox->disable();
2536 myLimitByIntervalCheckBox->disable();
2537 myBeginTextField->disable();
2538 myEndTextField->disable();
2539 myFilteredAttributesComboBox->disable();
2545 myIntervalBarUpdate =
true;
2547 updateIntervalBar();
2553 myIntervalBarUpdate =
false;
2560 if (myBeginTextField->getText().empty()) {
2563 if (myEndTextField->getText().empty()) {
2567 updateIntervalBar();
2569 myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().intervalBar->show();
2576 myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().intervalBar->hide();
2582 if (myIntervalBarUpdate) {
2584 const std::string previousDataSet = myDataSetsComboBox->getNumItems() > 0 ? myDataSetsComboBox->getItem(myDataSetsComboBox->getCurrentItem()).text() :
"";
2586 myDataSetsComboBox->clearItems();
2587 myGenericDataTypesComboBox->clearItems();
2588 if (myViewNet->getNet()) {
2590 const auto dataSets = myViewNet->getNet()->retrieveDataSets();
2591 if (dataSets.empty()) {
2592 myGenericDataTypesComboBox->appendItem(myNoGenericDatas);
2593 myDataSetsComboBox->appendItem(myNoDataSets);
2595 disableIntervalBar();
2598 int previousDataSetIndex = 0;
2600 enableIntervalBar();
2602 myGenericDataTypesComboBox->appendItem(myAllGenericDatas);
2603 myDataSetsComboBox->appendItem(myAllDataSets);
2607 for (
const auto& dataTag : genericDataTags) {
2608 myGenericDataTypesComboBox->appendItem(dataTag.second.c_str());
2610 myGenericDataTypesComboBox->setNumVisible(myGenericDataTypesComboBox->getNumItems());
2612 for (
const auto& dataSet : dataSets) {
2614 if (dataSet->getID() == previousDataSet) {
2615 previousDataSetIndex = myDataSetsComboBox->getNumItems();
2617 myDataSetsComboBox->appendItem(dataSet->getID().c_str());
2620 if (myDataSetsComboBox->getNumItems() < 10) {
2621 myDataSetsComboBox->setNumVisible(myDataSetsComboBox->getNumItems());
2623 myDataSetsComboBox->setNumVisible(10);
2626 myDataSetsComboBox->setCurrentItem(previousDataSetIndex);
2637 if (myGenericDataTypesComboBox->isEnabled() && (myGenericDataTypesComboBox->getText() == myAllGenericDatas)) {
2640 return myGenericDataTypesComboBox->getText().text();
2647 if (myDataSetsComboBox->isEnabled() && (myDataSetsComboBox->getText() == myAllDataSets)) {
2650 return myDataSetsComboBox->getText().text();
2657 if (myBeginTextField->isEnabled() && GNEAttributeCarrier::canParse<double>(myBeginTextField->getText().text())) {
2658 return myBeginTextField->getText().text();
2667 if (myEndTextField->isEnabled() && GNEAttributeCarrier::canParse<double>(myEndTextField->getText().text())) {
2668 return myEndTextField->getText().text();
2677 if (myFilteredAttributesComboBox->isEnabled() &&
2678 ((myFilteredAttributesComboBox->getText() == myAllAttributes) || (myFilteredAttributesComboBox->getTextColor() != FXRGB(0, 0, 0)))) {
2681 return myFilteredAttributesComboBox->getText().text();
2689 if (myGenericDataTypesComboBox->getText() == myAllGenericDatas) {
2690 myGenericDataTypesComboBox->setTextColor(FXRGB(0, 0, 0));
2691 }
else if (myGenericDataTypesComboBox->getText().empty()) {
2692 myGenericDataTypesComboBox->setTextColor(FXRGB(0, 0, 0));
2693 myGenericDataTypesComboBox->setText(myAllGenericDatas);
2698 myGenericDataTypesComboBox->setTextColor(FXRGB(255, 0, 0));
2700 for (
const auto& genericDataTag : genericDataTags) {
2701 if (genericDataTag.second == myGenericDataTypesComboBox->getText().text()) {
2702 myGenericDataTypesComboBox->setTextColor(FXRGB(0, 0, 0));
2707 updateComboBoxAttributes();
2709 myViewNet->updateViewNet();
2716 if (myDataSetsComboBox->getText() == myAllDataSets) {
2717 myDataSetsComboBox->setTextColor(FXRGB(0, 0, 0));
2718 }
else if (myDataSetsComboBox->getText().empty()) {
2719 myDataSetsComboBox->setTextColor(FXRGB(0, 0, 0));
2720 myDataSetsComboBox->setText(myAllDataSets);
2721 }
else if (myViewNet->getNet()->retrieveDataSet(myDataSetsComboBox->getText().text(),
false)) {
2722 myDataSetsComboBox->setTextColor(FXRGB(0, 0, 0));
2724 myDataSetsComboBox->setTextColor(FXRGB(255, 0, 0));
2727 updateComboBoxAttributes();
2729 myViewNet->updateViewNet();
2736 if (myLimitByIntervalCheckBox->isEnabled() && (myLimitByIntervalCheckBox->getCheck() == TRUE)) {
2737 myBeginTextField->enable();
2738 myEndTextField->enable();
2740 myBeginTextField->disable();
2741 myEndTextField->disable();
2744 updateComboBoxAttributes();
2746 myViewNet->updateViewNet();
2752 if (myBeginTextField->getText().empty()) {
2753 myBeginTextField->setText(
toString(myViewNet->getNet()->getDataSetIntervalMinimumBegin()).c_str());
2754 myBeginTextField->setTextColor(FXRGB(0, 0, 0));
2755 }
else if (GNEAttributeCarrier::canParse<double>(myBeginTextField->getText().text())) {
2756 myBeginTextField->setTextColor(FXRGB(0, 0, 0));
2758 myBeginTextField->setTextColor(FXRGB(255, 0, 0));
2761 updateComboBoxAttributes();
2763 myViewNet->updateViewNet();
2769 if (myEndTextField->getText().empty()) {
2770 myEndTextField->setText(
toString(myViewNet->getNet()->getDataSetIntervalMaximumEnd()).c_str());
2771 myEndTextField->setTextColor(FXRGB(0, 0, 0));
2772 }
else if (GNEAttributeCarrier::canParse<double>(myEndTextField->getText().text())) {
2773 myEndTextField->setTextColor(FXRGB(0, 0, 0));
2775 myEndTextField->setTextColor(FXRGB(255, 0, 0));
2778 updateComboBoxAttributes();
2780 myViewNet->updateViewNet();
2793 myFilteredAttributes = myViewNet->getNet()->retrieveGenericDataParameters(getDataSetStr(),
2794 getGenericDataTypeStr(), getBeginStr(), getEndStr());
2796 myFilteredAttributesComboBox->clearItems();
2798 if (myDataSetsComboBox->isEnabled()) {
2800 myFilteredAttributesComboBox->appendItem(myAllAttributes);
2802 for (
const auto& attribute : myFilteredAttributes) {
2803 myFilteredAttributesComboBox->appendItem(attribute.c_str());
2806 if (myFilteredAttributesComboBox->getNumItems() < 10) {
2807 myFilteredAttributesComboBox->setNumVisible(myFilteredAttributesComboBox->getNumItems());
2809 myFilteredAttributesComboBox->setNumVisible(10);
2813 myFilteredAttributesComboBox->appendItem(myNoDataSets);
2822 inspectButton(nullptr),
2823 deleteButton(nullptr),
2824 selectButton(nullptr),
2825 myViewNet(viewNet) {
2832 inspectButton =
new MFXCheckableButton(
false, myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modes,
2833 "\tset inspect mode\tMode for inspect elements and change their attributes. (I)",
2835 inspectButton->create();
2837 deleteButton =
new MFXCheckableButton(
false, myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modes,
2838 "\tset delete mode\tMode for delete elements. (D)",
2840 deleteButton->create();
2842 selectButton =
new MFXCheckableButton(
false, myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modes,
2843 "\tset select mode\tMode for select elements. (S)",
2845 selectButton->create();
2847 myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modes->recalc();
2853 inspectButton->show();
2854 deleteButton->show();
2855 selectButton->show();
2861 inspectButton->hide();
2862 deleteButton->hide();
2863 selectButton->hide();
2869 inspectButton->setChecked(
false);
2870 deleteButton->setChecked(
false);
2871 selectButton->setChecked(
false);
2877 inspectButton->update();
2878 deleteButton->update();
2879 selectButton->update();
2887 moveNetworkElementsButton(nullptr),
2888 createEdgeButton(nullptr),
2889 connectionButton(nullptr),
2890 trafficLightButton(nullptr),
2891 additionalButton(nullptr),
2892 crossingButton(nullptr),
2894 shapeButton(nullptr),
2895 prohibitionButton(nullptr),
2896 myViewNet(viewNet) {
2903 moveNetworkElementsButton =
new MFXCheckableButton(
false, myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modes,
2904 "\tset move mode\tMode for move elements. (M)",
2906 moveNetworkElementsButton->create();
2908 createEdgeButton =
new MFXCheckableButton(
false, myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modes,
2909 "\tset create edge mode\tMode for creating junction and edges. (E)",
2911 createEdgeButton->create();
2913 connectionButton =
new MFXCheckableButton(
false, myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modes,
2914 "\tset connection mode\tMode for edit connections between lanes. (C)",
2916 connectionButton->create();
2918 prohibitionButton =
new MFXCheckableButton(
false, myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modes,
2919 "\tset prohibition mode\tMode for editing connection prohibitions. (W)",
2921 prohibitionButton->create();
2923 trafficLightButton =
new MFXCheckableButton(
false, myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modes,
2924 "\tset traffic light mode\tMode for edit traffic lights over junctions. (T)",
2926 trafficLightButton->create();
2928 additionalButton =
new MFXCheckableButton(
false, myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modes,
2929 "\tset additional mode\tMode for adding additional elements. (A)",
2931 additionalButton->create();
2933 crossingButton =
new MFXCheckableButton(
false, myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modes,
2934 "\tset crossing mode\tMode for creating crossings between edges. (R)",
2936 crossingButton->create();
2938 TAZButton =
new MFXCheckableButton(
false, myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modes,
2939 "\tset TAZ mode\tMode for creating Traffic Assignment Zones. (Z)",
2941 TAZButton->create();
2943 shapeButton =
new MFXCheckableButton(
false, myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modes,
2944 "\tset polygon mode\tMode for creating polygons and POIs. (P)",
2946 shapeButton->create();
2948 myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modes->recalc();
2954 moveNetworkElementsButton->show();
2955 createEdgeButton->show();
2956 connectionButton->show();
2957 trafficLightButton->show();
2958 additionalButton->show();
2959 crossingButton->show();
2961 shapeButton->show();
2962 prohibitionButton->show();
2968 moveNetworkElementsButton->hide();
2969 createEdgeButton->hide();
2970 connectionButton->hide();
2971 trafficLightButton->hide();
2972 additionalButton->hide();
2973 crossingButton->hide();
2975 shapeButton->hide();
2976 prohibitionButton->hide();
2982 moveNetworkElementsButton->setChecked(
false);
2983 createEdgeButton->setChecked(
false);
2984 connectionButton->setChecked(
false);
2985 trafficLightButton->setChecked(
false);
2986 additionalButton->setChecked(
false);
2987 crossingButton->setChecked(
false);
2988 TAZButton->setChecked(
false);
2989 shapeButton->setChecked(
false);
2990 prohibitionButton->setChecked(
false);
2996 moveNetworkElementsButton->update();
2997 createEdgeButton->update();
2998 connectionButton->update();
2999 trafficLightButton->update();
3000 additionalButton->update();
3001 crossingButton->update();
3002 TAZButton->update();
3003 shapeButton->update();
3004 prohibitionButton->update();
3012 moveDemandElementsButton(nullptr),
3013 routeButton(nullptr),
3014 vehicleButton(nullptr),
3015 vehicleTypeButton(nullptr),
3016 stopButton(nullptr),
3017 personTypeButton(nullptr),
3018 personButton(nullptr),
3019 personPlanButton(nullptr),
3020 myViewNet(viewNet) {
3027 moveDemandElementsButton =
new MFXCheckableButton(
false, myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modes,
3028 "\tset move mode\tMode for move elements.",
3030 moveDemandElementsButton->create();
3032 routeButton =
new MFXCheckableButton(
false, myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modes,
3033 "\tcreate route mode\tMode for creating routes.",
3035 routeButton->create();
3037 vehicleButton =
new MFXCheckableButton(
false, myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modes,
3038 "\tcreate vehicle mode\tMode for creating vehicles.",
3040 vehicleButton->create();
3042 vehicleTypeButton =
new MFXCheckableButton(
false, myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modes,
3043 "\tcreate vehicle type mode\tMode for creating vehicle types.",
3045 vehicleTypeButton->create();
3047 stopButton =
new MFXCheckableButton(
false, myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modes,
3048 "\tcreate stop mode\tMode for creating stops.",
3050 stopButton->create();
3052 personTypeButton =
new MFXCheckableButton(
false, myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modes,
3053 "\tcreate person type mode\tMode for creating person types.",
3055 personTypeButton->create();
3057 personButton =
new MFXCheckableButton(
false, myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modes,
3058 "\tcreate person mode\tMode for creating persons.",
3060 personButton->create();
3062 personPlanButton =
new MFXCheckableButton(
false, myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modes,
3063 "\tcreate person plan mode\tMode for creating person plans.",
3065 personPlanButton->create();
3067 myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modes->recalc();
3073 moveDemandElementsButton->show();
3074 routeButton->show();
3075 vehicleButton->show();
3076 vehicleTypeButton->show();
3078 personTypeButton->show();
3079 personButton->show();
3080 personPlanButton->show();
3086 moveDemandElementsButton->hide();
3087 routeButton->hide();
3088 vehicleButton->hide();
3089 vehicleTypeButton->hide();
3091 personTypeButton->hide();
3092 personButton->hide();
3093 personPlanButton->hide();
3099 moveDemandElementsButton->setChecked(
false);
3100 routeButton->setChecked(
false);
3101 vehicleButton->setChecked(
false);
3102 vehicleTypeButton->setChecked(
false);
3103 stopButton->setChecked(
false);
3104 personTypeButton->setChecked(
false);
3105 personButton->setChecked(
false);
3106 personPlanButton->setChecked(
false);
3112 moveDemandElementsButton->update();
3113 routeButton->update();
3114 vehicleButton->update();
3115 vehicleTypeButton->update();
3116 stopButton->update();
3117 personTypeButton->update();
3118 personButton->update();
3119 personPlanButton->update();
3127 edgeDataButton(nullptr),
3128 edgeRelDataButton(nullptr),
3129 TAZRelDataButton(nullptr),
3130 myViewNet(viewNet) {
3137 edgeDataButton =
new MFXCheckableButton(
false, myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modes,
3138 "\tcreate edge data mode\tMode for creating edge datas.",
3140 edgeDataButton->create();
3142 edgeRelDataButton =
new MFXCheckableButton(
false, myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modes,
3143 "\tcreate edge relation data mode\tMode for creating edge relation datas.",
3145 edgeRelDataButton->create();
3147 TAZRelDataButton =
new MFXCheckableButton(
false, myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modes,
3148 "\tcreate TAZ relation data mode\tMode for creating TAZ relation datas.",
3151 TAZRelDataButton->create();
3153 myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modes->recalc();
3159 edgeDataButton->show();
3160 edgeRelDataButton->show();
3161 TAZRelDataButton->show();
3167 edgeDataButton->hide();
3168 edgeRelDataButton->hide();
3169 TAZRelDataButton->hide();
3175 edgeDataButton->setChecked(
false);
3176 edgeRelDataButton->setChecked(
false);
3177 TAZRelDataButton->setChecked(
false);
3183 edgeDataButton->update();
3184 edgeRelDataButton->update();
3185 TAZRelDataButton->update();
3194 myEditedNetworkElement(nullptr),
3201 if (element && (myEditedNetworkElement ==
nullptr)) {
3203 myPreviousNetworkEditMode = myViewNet->myEditModes.networkEditMode;
3207 myEditedNetworkElement = element;
3211 myViewNet->updateViewNet();
3219 if (myEditedNetworkElement !=
nullptr) {
3221 myEditedNetworkElement->setShapeEdited(
false);
3223 myEditedNetworkElement =
nullptr;
3225 if (myViewNet->myEditModes.networkEditMode != myPreviousNetworkEditMode) {
3226 myViewNet->myEditModes.setNetworkEditMode(myPreviousNetworkEditMode);
3235 if (myEditedNetworkElement !=
nullptr) {
3240 stopEditCustomShape();
3247 return myEditedNetworkElement;
3256 const double exaggeration,
const double offsetx,
const double offsety,
const bool overlane,
const double size) {
3258 if (checkDrawing(AC, exaggeration) && (geometry.
getShape().size() > 0)) {
3267 }
else if (geometry.
getShape().size() > 1) {
3271 const GUIGlID lockTexture = getLockIcon(AC);
3275 glTranslated(pos.
x(), pos.
y(), 0.1);
3281 glRotated(180, 0, 0, 1);
3286 glTranslated(offsetx, offsety, 0);
3303 if (exaggeration == 0) {
3307 if (s.drawForPositionSelection || s.drawForRectangleSelection) {
3311 if (!s.drawDetail(s.detailSettings.lockIcon, exaggeration)) {
3354 const std::vector<RGBColor>&
3379 }
else if (value >= max) {
3383 const double procent = ((value - min) * 100) / (max - min);
3387 }
else if (procent >= 100) {
DataEditMode
@brie enum for data edit modes
@ DATA_SELECT
mode for selecting data elements
@ DATA_INSPECT
mode for inspecting data elements
@ DATA_DELETE
mode for deleting data elements
Supermode
@brie enum for supermodes
@ NETWORK
Network mode (Edges, junctions, etc..)
@ DATA
Data mode (edgeData, LaneData etc..)
@ DEMAND
Demand mode (Routes, Vehicles etc..)
NetworkEditMode
@brie enum for network edit modes
@ NETWORK_DELETE
mode for deleting network elements
@ NETWORK_MOVE
mode for moving network elements
@ NETWORK_TLS
mode for editing tls
@ NETWORK_SELECT
mode for selecting network elements
@ NETWORK_INSPECT
mode for inspecting network elements
@ NETWORK_PROHIBITION
Mode for editing connection prohibitions.
@ NETWORK_NONE
empty Network mode
@ NETWORK_CONNECT
mode for connecting lanes
DemandEditMode
@brie enum for demand edit modes
@ DEMAND_INSPECT
mode for inspecting demand elements
@ DEMAND_DELETE
mode for deleting demand elements
@ DEMAND_SELECT
mode for selecting demand elements
@ DEMAND_MOVE
mode for moving demand elements
@ MID_GNE_NETWORKVIEWOPTIONS_AUTOOPPOSITEEDGES
automatically create opposite edge
@ MID_HOTKEY_CTRL_SHIFT_B_SAVEDATAELEMENTS
save Data Elements
@ MID_HOTKEY_F3_SUPERMODE_DEMAND
select demand supermode in NETEDIT
@ MID_GNE_DEMANDVIEWOPTIONS_SHOWALLPERSONPLANS
show all person plans
@ MID_GNE_NETWORKVIEWOPTIONS_SHOWGRID
show grid
@ MID_HOTKEY_T_MODES_TLS_VTYPE
hotkey for mode editing TLS AND Vehicle Types
@ MID_GNE_NETWORKVIEWOPTIONS_DRAWSPREADVEHICLES
Draw vehicles in begin position or spread in lane.
@ MID_GNE_NETWORKVIEWOPTIONS_MOVEELEVATION
move elevation instead of x,y
@ MID_HOTKEY_S_MODES_SELECT
hotkey for mode selecting objects
@ MID_GNE_NETWORKVIEWOPTIONS_HIDECONNECTIONS
hide connections
@ MID_GNE_NETWORKVIEWOPTIONS_SHOWCONNECTIONS
show connections
@ MID_GNE_INTERVALBAR_BEGIN
begin changed in InterbalBar
@ MID_GNE_DEMANDVIEWOPTIONS_LOCKPERSON
lock person
@ MID_HOTKEY_V_MODES_VEHICLE
hotkey for mode create vehicles
@ MID_HOTKEY_E_MODES_EDGE_EDGEDATA
hotkey for mode adding edges AND edgeDatas
@ MID_GNE_INTERVALBAR_ATTRIBUTE
attribute changed in InterbalBar
@ MID_GNE_NETWORKVIEWOPTIONS_ASKFORMERGE
ask before merging junctions
@ MID_GNE_DEMANDVIEWOPTIONS_SHOWGRID
show grid
@ MID_HOTKEY_CTRL_SHIFT_D_SAVEDEMANDELEMENTS
Save Demand Elements.
@ MID_HOTKEY_CTRL_S_STOPSIMULATION_SAVENETWORK
Stop the simulation in SUMO and save network in NETEDIT.
@ MID_HOTKEY_W_MODES_PROHIBITION_PERSONTYPE
hotkey for mode editing connection prohibitions AND person types
@ MID_GNE_NETWORKVIEWOPTIONS_CHAINEDGES
create edges in chain mode
@ MID_HOTKEY_R_MODES_CROSSING_ROUTE_EDGERELDATA
hotkey for mode editing crossing, routes and edge rel datas
@ MID_GNE_DATAVIEWOPTIONS_SHOWDEMANDELEMENTS
show demand elements
@ MID_HOTKEY_I_MODES_INSPECT
hotkey for mode inspecting object attributes
@ MID_GNE_DEMANDVIEWOPTIONS_HIDESHAPES
hide shapes
@ MID_HOTKEY_P_MODES_POLYGON_PERSON
hotkey for mode creating polygons
@ MID_GNE_DATAVIEWOPTIONS_SHOWADDITIONALS
show additionals
@ MID_GNE_NETWORKVIEWOPTIONS_SHOWBUBBLES
show junctions as bubbles
@ MID_GNE_INTERVALBAR_END
end changed in InterbalBar
@ MID_HOTKEY_Z_MODES_TAZ_TAZREL
hotkey for mode editing TAZ and TAZRel
@ MID_HOTKEY_M_MODES_MOVE
hotkey for mode moving element
@ MID_GNE_NETWORKVIEWOPTIONS_EXTENDSELECTION
extend selection
@ MID_HOTKEY_F4_SUPERMODE_DATA
select data supermode in NETEDIT
@ MID_HOTKEY_A_MODES_ADDITIONAL_STOP
hotkey for mode editing additionals AND stops
@ MID_GNE_NETWORKVIEWOPTIONS_SHOWDEMANDELEMENTS
show demand elements
@ MID_GNE_DEMANDVIEWOPTIONS_HIDENONINSPECTED
hide non-inspected demand element
@ MID_HOTKEY_C_MODES_CONNECT_PERSONPLAN
hotkey for mode connecting lanes
@ MID_HOTKEY_CTRL_SHIFT_A_SAVEADDITIONALS
Save Additional Elements.
@ MID_GNE_INTERVALBAR_GENERICDATATYPE
generic data selected
@ MID_GNE_NETWORKVIEWOPTIONS_CHANGEALLPHASES
change all phases
@ MID_GNE_DATAVIEWOPTIONS_SHOWSHAPES
show shapes
@ MID_GNE_DEMANDVIEWOPTIONS_DRAWSPREADVEHICLES
Draw vehicles in begin position or spread in lane.
@ MID_GNE_INTERVALBAR_DATASET
data set selected
@ MID_HOTKEY_F2_SUPERMODE_NETWORK
select network supermode in NETEDIT
@ MID_HOTKEY_D_MODES_DELETE
hotkey for mode deleting things
@ MID_GNE_NETWORKVIEWOPTIONS_SELECTEDGES
select edges
@ MID_GNE_INTERVALBAR_LIMITED
enable/disable show data elements by interval
#define GUIDesignMFXCheckableButton
#define GUIDesignComboBoxWidth180
comboBox with thick frame, width 180 (Used in GNEVehicleType)
#define GUIDesignComboBoxNCol
number of column of every combo box
#define GUIDesignLabelAttribute
label extended over the matrix column with thick frame
#define GUIDesignButtonToolbar
little button with icon placed in navigation toolbar
#define GUIDesignTextFieldNCol
Num of column of text field.
#define GUIDesignTextFielWidth50Real
text field with thick frame and width 50 and limited to doubles
#define GUIDesignMFXCheckableButtonSupermode
checkable button with icon placed in navigation toolbar for supermodes
#define GUIDesignCheckButtonAttribute
checkButton without thick extended over the frame used for attributes
#define GUIDesignComboBoxWidth120
comboBox with thick frame, width 120
@ GLO_EDGERELDATA
edge relation data
@ GLO_TESTELEMENT
test element (used in NETEDIT)
@ GLO_TAZ
Traffic Assignment Zones (TAZs)
@ GLO_CONNECTION
a connection
@ GLO_NETWORK
The network - empty.
@ GLO_RECTANGLESELECTION
rectangle selection shape (used in NETEDIT)
@ GLO_NETWORKELEMENT
reserved GLO type to pack all network elements
@ DATAMODE_CHECKBOX_SHOWADDITIONALS
@ NETWORKMODE_CHECKBOX_BUBBLES
@ DEMANDMODE_CHECKBOX_HIDENONINSPECTEDDEMANDELEMENTS
@ NETWORKMODE_CHECKBOX_HIDECONNECTIONS
@ DATAMODE_CHECKBOX_SHOWSHAPES
@ NETWORKMODE_CHECKBOX_SELECTEDGES
@ COMMONMODE_CHECKBOX_SHOWDEMANDELEMENTS
@ DEMANDMODE_CHECKBOX_LOCKPERSON
@ NETWORKMODE_CHECKBOX_APPLYTOALLPHASES
@ NETWORKMODE_CHECKBOX_AUTOSELECTJUNCTIONS
@ NETWORKMODE_CHECKBOX_SHOWCONNECTIONS
@ DEMANDMODE_CHECKBOX_SHOWPERSONPLANS
@ DEMANDMODE_CHECKBOX_HIDESHAPES
@ COMMONMODE_CHECKBOX_GRID
@ NETWORKMODE_CHECKBOX_ELEVATION
@ COMMONMODE_CHECKBOX_SPREADVEHICLE
@ NETWORKMODE_CHECKBOX_CHAIN
@ NETWORKMODE_CHECKBOX_ASKFORMERGE
@ NETWORKMODE_CHECKBOX_TWOWAY
@ GNETEXTURE_EMPTYSELECTED
@ GNETEXTURE_NOTMOVINGSELECTED
@ GNETEXTURE_LOCKSELECTED
@ SUMO_TAG_LANE
begin/end of the description of a single lane
@ SUMO_TAG_EDGE
begin/end of the description of an edge
@ GNE_ATTR_BLOCK_MOVEMENT
block movement of a graphic element
@ GNE_ATTR_PARENT
parent of an additional element
@ GNE_ATTR_SELECTED
element is selected
#define UNUSED_PARAMETER(x)
std::string toString(const T &t, std::streamsize accuracy=gPrecision)
A class that stores a 2D geometrical boundary.
void add(double x, double y, double z=0)
Makes the boundary include the given coordinate.
static void drawTextBox(const std::string &text, const Position &pos, const double layer, const double size, const RGBColor &txtColor=RGBColor::BLACK, const RGBColor &bgColor=RGBColor::WHITE, const RGBColor &borderColor=RGBColor::BLACK, const double angle=0, const double relBorder=0.05, const double relMargin=0.5, const int align=0)
draw Text box with given parameters
static void setColor(const RGBColor &c)
Sets the gl-color to this value.
An Element which don't belongs to GNENet but has influency in the simulation.
virtual const std::string & getID() const =0
return ID of object
virtual GUIGlObject * getGUIGlObject()=0
get GUIGlObject associated with this AttributeCarrier
const GNETagProperties & getTagProperty() const
get Tag Property assigned to this object
bool drawUsingSelectColor() const
check if attribute carrier must be drawn using selecting color.
static std::vector< std::pair< SumoXMLTag, const std::string > > getAllowedTagsByCategory(const int tagPropertyCategory, const bool onlyDrawables)
get tags of all editable element types using TagProperty Type (NetworkEditMode::NETWORKELEMENT,...
GNENet * getNet() const
get pointer to net
virtual std::string getAttribute(SumoXMLAttr key) const =0
This object is responsible for drawing a shape and for supplying a a popup menu. Messages are routete...
An Element which don't belongs to GNENet but has influency in the simulation.
An Element which don't belongs to GNENet but has influency in the simulation.
A road/street connecting two junctions (netedit-version)
NBEdge * getNBEdge() const
returns the internal NBEdge
An Element which don't belongs to GNENet but has influency in the simulation.
An Element which don't belongs to GNENet but has influency in the simulation.
class for NETEDIT geometries over lanes
const std::vector< double > & getShapeRotations() const
The rotations of the single shape parts.
const PositionVector & getShape() const
The shape of the additional element.
const std::vector< GNEDemandElement * > & getChildDemandElements() const
return child demand elements
const std::vector< GNEDemandElement * > & getParentDemandElements() const
get parent demand elements
This object is responsible for drawing a shape and for supplying a a popup menu. Messages are routete...
This lane is powered by an underlying GNEEdge and basically knows how to draw itself.
virtual GNEMoveOperation * getMoveOperation(const double shapeOffset)=0
get move operation for the given shapeOffset
static void commitMove(const GNEViewNet *viewNet, GNEMoveOperation *moveOperation, const Position &offset, GNEUndoList *undoList)
commit move element for the given offset
static void moveElement(const GNEViewNet *viewNet, GNEMoveOperation *moveOperation, const Position &offset)
move element the for given offset (note: offset can be X-Y-0, 0-0-Z or X-Y-Z)
GNEViewNet * getViewNet() const
get view net
void setShapeEdited(const bool value)
set shape edited
An Element which don't belongs to GNENet but has influency in the simulation.
bool isShape() const
return true if tag correspond to a shape
bool canBlockMovement() const
return true if tag correspond to an element that can block their movement
bool isTAZElement() const
return true if tag correspond to a TAZ element
bool isGenericData() const
return true if tag correspond to a generic data element
bool isNetworkElement() const
return true if tag correspond to a network element
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
std::string getAttributeStr() const
set attribute
void enableIntervalBarUpdate()
enable interval bar update
void setDataSet()
set dataSet
std::string getDataSetStr() const
get dataSet
std::string getBeginStr() const
get begin
void hideIntervalBar()
hide all options menu checks
void setGenericDataType()
set generic data type
void showIntervalBar()
show interval option bar
void disableIntervalBar()
disable interval bar
void updateIntervalBar()
update interval bar
void updateComboBoxAttributes()
update combo box attributes
void disableIntervalBarUpdate()
enable interval bar update
void buildIntervalBarElements()
build interval bar elements
std::string getGenericDataTypeStr() const
get generic data type
IntervalBar(GNEViewNet *viewNet)
default constructor
std::string getEndStr() const
get end
void enableIntervalBar()
enable interval bar
void setInterval()
update limit by interval
void setAttribute()
set attribute
ObjectsContainer()
constructor
std::vector< GNEEdgeRelData * > edgeRelDatas
vector with the clicked edge relation datas
std::vector< GNENetworkElement * > networkElements
vector with the clicked network elements
std::vector< GNEEdge * > edges
vector with the clicked edges
std::vector< GNEGenericData * > genericDatas
vector with the clicked generic datas
std::vector< GNEJunction * > junctions
vector with the clicked junctions
std::vector< GNEConnection * > connections
vector with the clicked connections
std::vector< GNEEdgeData * > edgeDatas
vector with the clicked edge datas
std::vector< GNECrossing * > crossings
vector with the clicked crossings
std::vector< GNEPOI * > POIs
vector with the clicked POIs
std::vector< GNETAZElement * > TAZElements
vector with the clicked TAZ elements
std::vector< GNEDemandElement * > demandElements
vector with the clicked demand elements
std::vector< GNEAttributeCarrier * > attributeCarriers
vector with the clicked attribute carriers
std::vector< GNEPoly * > polys
vector with the clicked polys
std::vector< GNELane * > lanes
vector with the clicked lanes
std::vector< GNEInternalLane * > internalLanes
vector with the clicked internal lanes
std::vector< GNETAZ * > TAZs
vector with the clicked TAZ elements
std::vector< GNEAdditional * > additionals
vector with the clicked additional elements
std::vector< GUIGlObject * > GUIGlObjects
vector with the clicked GUIGlObjects
std::vector< GNEShape * > shapes
vector with the clicked shape elements (Poly and POIs)
void clearElements()
clear elements
GNEPoly * getPolyFront() const
get front Poly or a pointer to nullptr
void updateObjectUnderCursor(const std::vector< GUIGlObject * > &GUIGlObjects)
update objects under cursor (Called only in onLeftBtnPress(...) function)
void updateNetworkElements(ObjectsContainer &container, GNEAttributeCarrier *AC)
update network elements
void sortGUIGlObjects(const std::vector< GUIGlObject * > &GUIGlObjects)
sort by altitude and update GUIGlObjects
GUIGlID getGlIDFront() const
get front GUI GL ID or a pointer to nullptr
void updateAdditionalElements(ObjectsContainer &container, GNEAttributeCarrier *AC)
update additional elements
GNEGenericData * getGenericDataElementFront() const
get generic data element or a pointer to nullptr
void swapLane2Edge()
swap lane to edge
GNENetworkElement * getNetworkElementFront() const
get front network element or a pointer to nullptr
GNEAttributeCarrier * getAttributeCarrierFront() const
get front attribute carrier or a pointer to nullptr
GNEInternalLane * getInternalLaneFront() const
get front internal lane or a pointer to nullptr
GNECrossing * getCrossingFront() const
get front crossing or a pointer to nullptr
void updateShapeElements(ObjectsContainer &container, GNEAttributeCarrier *AC)
update shape elements
void updateTAZElements(ObjectsContainer &container, GNEAttributeCarrier *AC)
update TAZ elements
GNELane * getLaneFront() const
get front lane or a pointer to nullptr
GNETAZElement * getTAZElementFront() const
get front TAZElement or a pointer to nullptr
void updateGenericDataElements(ObjectsContainer &container, GNEAttributeCarrier *AC)
update generic data elements
void updateGUIGlObjects(ObjectsContainer &container)
updateGUIGlObjects
GNEEdgeData * getEdgeDataElementFront() const
get edge data element or a pointer to nullptr
void updateDemandElements(ObjectsContainer &container, GNEAttributeCarrier *AC)
update demand elements
GNEAdditional * getAdditionalFront() const
get front additional element or a pointer to nullptr
GUIGlObjectType getGlTypeFront() const
get front GUI GL object type or a pointer to nullptr
GNEJunction * getJunctionFront() const
get front junction or a pointer to nullptr
GNEDemandElement * getDemandElementFront() const
get front demand element or a pointer to nullptr
void updateAttributeCarriers(ObjectsContainer &container, GNEAttributeCarrier *AC)
update attribute carrier elements
GNEShape * getShapeFront() const
get front shape element or a pointer to nullptr
GNEEdge * getEdgeFront() const
get front edge or a pointer to nullptr
ObjectsUnderCursor()
default constructor
GUIGlObject * getGUIGlObjectFront() const
get front attribute carrier or a pointer to nullptr
GNETAZ * getTAZFront() const
get front TAZ or a pointer to nullptr
const std::vector< GNEAttributeCarrier * > & getClickedAttributeCarriers() const
get vector with clicked ACs
GNEEdgeRelData * getEdgeRelDataElementFront() const
get edge rel data element or a pointer to nullptr
GNEConnection * getConnectionFront() const
get front connection or a pointer to nullptr
GNEPOI * getPOIFront() const
get front POI or a pointer to nullptr
bool showLockIcon() const
check if lock icon should be visible
GUIGlObjectType getType() const
Returns the type of the object as coded in GUIGlObjectType.
static FXIcon * getIcon(const GUIIcon which)
returns a icon previously defined in the enum GUIIcon
GUIVisualizationSettings & getVisualisationSettings() const
get visualization settings
static GUIGlID getTexture(GUITexture which)
returns a texture previously defined in the enum GUITexture
static void drawTexturedBox(int which, double size)
Draws a named texture as a box with the given size.
const PositionVector & getGeometry() const
Returns the geometry of the edge.
A storage for options typed value containers)
const StringVector & getStringVector(const std::string &name) const
Returns the list of string-value of the named option (only for Option_StringVector)
static OptionsCont & getOptions()
Retrieves the options.
A point in 2D or 3D with translation and scaling methods.
double x() const
Returns the x-position.
void setz(double z)
set position z
double y() const
Returns the y-position.
double length2D() const
Returns the length.
double rotationDegreeAtOffset(double pos) const
Returns the rotation at the given length.
double distance2D(const Position &p, bool perpendicular=false) const
closest 2D-distance to point p (or -1 if perpendicular is true and the point is beyond this vector)
double nearest_offset_to_point2D(const Position &p, bool perpendicular=true) const
return the nearest offest to point 2D
Boundary getBoxBoundary() const
Returns a boundary enclosing this list of lines.
Position positionAtOffset2D(double pos, double lateralOffset=0) const
Returns the position at the given length.
static const RGBColor WHITE
static const RGBColor BLACK
static const RGBColor MAGENTA
static void rotateOverLane(const double rot)
rotate over lane (used by Lock icons, detector logos, etc.)
DataViewOptions(GNEViewNet *viewNet)
default constructor
void hideDataViewOptionsMenuChecks()
hide all options menu checks
bool showAdditionals() const
check if additionals has to be drawn
bool showDemandElements() const
check if show demand elements checkbox is enabled
void buildDataViewOptionsMenuChecks()
build menu checks
void getVisibleDataMenuCommands(std::vector< MFXCheckableButton * > &commands) const
get visible demand menu commands
bool showShapes() const
check if shapes has to be drawn
void lockPerson(const GNEDemandElement *person)
lock person
bool showAllPersonPlans() const
check all person plans has to be show
void buildDemandViewOptionsMenuChecks()
build menu checks
const GNEDemandElement * getLockedPerson() const
get locked person
bool showShapes() const
check if shapes has to be drawn
void hideDemandViewOptionsMenuChecks()
hide all options menu checks
void unlockPerson()
unlock person
bool drawSpreadVehicles() const
check if vehicles must be drawn spread
bool showNonInspectedDemandElements(const GNEDemandElement *demandElement) const
check if non inspected element has to be hidden
DemandViewOptions(GNEViewNet *viewNet)
default constructor
void getVisibleDemandMenuCommands(std::vector< MFXCheckableButton * > &commands) const
get visible demand menu commands
void buildSuperModeButtons()
build checkable buttons
bool isCurrentSupermodeDemand() const
@check if current supermode is Demand
void setDemandEditMode(DemandEditMode demandMode, const bool force=false)
set Demand edit mode
bool isCurrentSupermodeData() const
@check if current supermode is Data
bool isCurrentSupermodeNetwork() const
@check if current supermode is Network
void setSupermode(Supermode supermode, const bool force)
set supermode
void setNetworkEditMode(NetworkEditMode networkMode, const bool force=false)
set Network edit mode
EditModes(GNEViewNet *viewNet)
default constructor
void setDataEditMode(DataEditMode dataMode, const bool force=false)
set Data edit mode
GNENetworkElement * getEditedNetworkElement() const
pointer to edited network element
void stopEditCustomShape()
edit edit shape
EditNetworkElementShapes(GNEViewNet *viewNet)
default constructor
void commitEditedShape()
save edited shape
void startEditCustomShape(GNENetworkElement *element)
start edit custom shape
static void drawLockIcon(const GNEAttributeCarrier *AC, const GNEGeometry::Geometry &geometry, const double exaggeration, const double offsetx, const double offsety, const bool overlane, const double size=0.5)
draw lock icon
static GUIGlID getLockIcon(const GNEAttributeCarrier *AC)
get lock icon
static bool checkDrawing(const GNEAttributeCarrier *AC, const double exaggeration)
check drawing
void calculateJunctionSelection()
calculate junction selection
MoveMultipleElementValues(GNEViewNet *viewNet)
constructor
Position calculateOffset() const
calculate offset
void moveSelection(const bool mouseLeftButtonPressed)
move selection
void beginMoveSelection()
begin move selection
bool isMovingSelection() const
check if currently there is element being moved
void finishMoveSelection()
finish moving selection
void calculateEdgeSelection(const GNEEdge *clickedEdge)
calculate edge selection
void finishMoveSingleElement()
finish moving single elements in Network AND Demand mode
void moveSingleElement(const bool mouseLeftButtonPressed)
move single element in Network AND Demand mode
MoveSingleElementValues(GNEViewNet *viewNet)
constructor
bool beginMoveSingleElementNetworkMode()
begin move single element in Network mode
bool beginMoveNetworkElementShape()
begin move network elementshape
bool calculateMoveOperationShape(GNEMoveElement *moveElement, const PositionVector &shape, const double radius)
calculate move operation for shape
Position calculateOffset() const
calculate offset
bool beginMoveSingleElementDemandMode()
begin move single element in Demand mode
bool showConnections() const
check if select show connections checkbox is enabled
bool drawSpreadVehicles() const
check if vehicles must be drawn spread
bool editingElevation() const
check if we're editing elevation
void getVisibleNetworkMenuCommands(std::vector< MFXCheckableButton * > &commands) const
get visible network menu commands
bool showDemandElements() const
check if show demand elements checkbox is enabled
bool selectEdges() const
check if select edges checkbox is enabled
NetworkViewOptions(GNEViewNet *viewNet)
default constructor
void hideNetworkViewOptionsMenuChecks()
hide all options menu checks
void buildNetworkViewOptionsMenuChecks()
build menu checks
SaveElements(GNEViewNet *viewNet)
default constructor
void buildSaveElementsButtons()
build save buttons
void finishRectangleSelection()
finish rectangle selection
void drawRectangleSelection(const RGBColor &color) const
draw rectangle selection
void beginRectangleSelection()
begin rectangle selection
void moveRectangleSelection()
move rectangle selection
void processBoundarySelection(const Boundary &boundary)
Process boundary Selection.
void processShapeSelection(const PositionVector &shape)
process shape selection
void processRectangleSelection()
process rectangle Selection
std::vector< GNEEdge * > processEdgeRectangleSelection()
process rectangle Selection (only limited to Edges)
SelectingArea(GNEViewNet *viewNet)
default constructor
bool isTestingEnabled() const
check if testing mode is enabled
void drawTestingElements(GUIMainWindow *mainWindow)
draw testing element
TestingMode(GNEViewNet *viewNet)
default constructor
void initTestingMode()
init testing mode
void buildVehicleOptionsMenuChecks()
build menu checks
VehicleOptions(GNEViewNet *viewNet)
constructor
void hideVehicleOptionsMenuChecks()
hide all options menu checks
VehicleTypeOptions(GNEViewNet *viewNet)
constructor
void buildVehicleTypeOptionsMenuChecks()
build menu checks
void hideVehicleTypeOptionsMenuChecks()
hide all options menu checks
static std::vector< RGBColor > myRainbowScaledColors
scale (rainbow) colors
static const RGBColor & getRainbowScaledColor(const double min, const double max, const double value)
get rainbow scaled color
static const std::vector< RGBColor > & getRainbowScaledColors()
get scaled rainbow colors