60 myAttributeCarriers.clear();
61 myNetElements.clear();
62 myAdditionals.clear();
64 myDemandElements.clear();
69 myConnections.clear();
74 sortGUIGlObjectsByAltitude(GUIGlObjects);
76 for (
const auto& i : myGUIGlObjects) {
82 if (myAttributeCarriers.back()) {
84 if (editedPolyShape !=
nullptr) {
85 if (myAttributeCarriers.back() == editedPolyShape) {
87 myPolys.push_back(
dynamic_cast<GNEPoly*
>(myAttributeCarriers.back()));
91 const auto& tagValue = myAttributeCarriers.back()->getTagProperty();
93 if (tagValue.isNetElement()) {
95 myNetElements.push_back(
dynamic_cast<GNENetElement*
>(myAttributeCarriers.back()));
96 }
else if (tagValue.isDemandElement()) {
98 myDemandElements.push_back(
dynamic_cast<GNEDemandElement*
>(myAttributeCarriers.back()));
99 }
else if (tagValue.isAdditional()) {
101 myAdditionals.push_back(
dynamic_cast<GNEAdditional*
>(myAttributeCarriers.back()));
102 }
else if (tagValue.isShape()) {
104 myShapes.push_back(
dynamic_cast<GNEShape*
>(myAttributeCarriers.back()));
105 }
else if (tagValue.isTAZ()) {
107 myTAZs.push_back(
dynamic_cast<GNETAZ*
>(myAttributeCarriers.back()));
110 switch (i->getType()) {
112 myJunctions.push_back(
dynamic_cast<GNEJunction*
>(myAttributeCarriers.back()));
116 GNEEdge* edge =
dynamic_cast<GNEEdge*
>(myAttributeCarriers.back());
118 if (std::find(myEdges.begin(), myEdges.end(), edge) == myEdges.end()) {
119 myEdges.push_back(edge);
124 myLanes.push_back(
dynamic_cast<GNELane*
>(myAttributeCarriers.back()));
126 if (std::find(myEdges.begin(), myEdges.end(), myLanes.back()->getParentEdge()) == myEdges.end()) {
127 myEdges.push_back(myLanes.back()->getParentEdge());
132 myCrossings.push_back(
dynamic_cast<GNECrossing*
>(myAttributeCarriers.back()));
135 myConnections.push_back(
dynamic_cast<GNEConnection*
>(myAttributeCarriers.back()));
138 myPOIs.push_back(
dynamic_cast<GNEPOI*
>(myAttributeCarriers.back()));
141 myPolys.push_back(
dynamic_cast<GNEPoly*
>(myAttributeCarriers.back()));
148 myAttributeCarriers.pop_back();
154 ", AttributeCarriers: " +
toString(myAttributeCarriers.size()) +
155 ", NetElements: " +
toString(myNetElements.size()) +
156 ", Additionals: " +
toString(myAdditionals.size()) +
157 ", DemandElements: " +
toString(myDemandElements.size()) +
158 ", Shapes: " +
toString(myShapes.size()) +
159 ", Junctions: " +
toString(myJunctions.size()) +
160 ", Edges: " +
toString(myEdges.size()) +
161 ", Lanes: " +
toString(myLanes.size()) +
162 ", Crossings: " +
toString(myCrossings.size()) +
163 ", Connections: " +
toString(myConnections.size()) +
164 ", TAZs: " +
toString(myTAZs.size()) +
165 ", POIs: " +
toString(myPOIs.size()) +
166 ", Polys: " +
toString(myPolys.size()));
173 myGUIGlObjects.clear();
174 myAttributeCarriers.clear();
175 myNetElements.clear();
177 for (
const auto& i : myEdges) {
178 myGUIGlObjects.push_back(i);
179 myAttributeCarriers.push_back(i);
180 myNetElements.push_back(i);
183 WRITE_DEBUG(
"ObjectsUnderCursor: swapped Lanes to edges")
189 if (myGUIGlObjects.size() > 0) {
190 return myGUIGlObjects.front()->getGlID();
199 if (myGUIGlObjects.size() > 0) {
200 return myGUIGlObjects.front()->getType();
209 if (myAttributeCarriers.size() > 0) {
210 return myAttributeCarriers.front();
219 if (myNetElements.size() > 0) {
220 return myNetElements.front();
229 if (myAdditionals.size() > 0) {
230 return myAdditionals.front();
239 if (myShapes.size() > 0) {
240 return myShapes.front();
249 if (myDemandElements.size() > 0) {
250 return myDemandElements.front();
259 if (myJunctions.size() > 0) {
260 return myJunctions.front();
269 if (myEdges.size() > 0) {
270 return myEdges.front();
279 if (myLanes.size() > 0) {
280 return myLanes.front();
289 if (myCrossings.size() > 0) {
290 return myCrossings.front();
299 if (myConnections.size() > 0) {
300 return myConnections.front();
309 if (myTAZs.size() > 0) {
310 return myTAZs.front();
319 if (myPOIs.size() > 0) {
320 return myPOIs.front();
329 if (myPolys.size() > 0) {
330 return myPolys.front();
337 const std::vector<GNEAttributeCarrier*>&
339 return myAttributeCarriers;
346 myGUIGlObjects.clear();
348 std::map<GUIGlObjectType, std::vector<GUIGlObject*> > mySortedGUIGlObjects;
349 for (
const auto& i : GUIGlObjects) {
350 mySortedGUIGlObjects[i->getType()].push_back(i);
353 for (std::map<
GUIGlObjectType, std::vector<GUIGlObject*> >::reverse_iterator i = mySortedGUIGlObjects.rbegin(); i != mySortedGUIGlObjects.rend(); i++) {
354 for (
const auto& j : i->second) {
355 myGUIGlObjects.push_back(j);
365 myEventInfo(nullptr) {
371 myEventInfo = (FXEvent*) eventData;
378 return (myEventInfo->state & SHIFTMASK) != 0;
388 return (myEventInfo->state & CONTROLMASK) != 0;
399 movingIndexShape(-1),
401 myMovingStartPos(false),
402 myMovingEndPos(false),
403 myJunctionToMove(nullptr),
404 myEdgeToMove(nullptr),
405 myPolyToMove(nullptr),
406 myPOIToMove(nullptr),
407 myAdditionalToMove(nullptr),
408 myDemandElementToMove(nullptr),
409 myTAZToMove(nullptr) {
416 myRelativeClickedPosition = myViewNet->getPositionInformation();
418 if (myViewNet->myObjectsUnderCursor.getPolyFront()) {
420 return calculatePolyValues();
421 }
else if (myViewNet->myObjectsUnderCursor.getPOIFront()) {
423 myPOIToMove = myViewNet->myObjectsUnderCursor.getPOIFront();
425 originalPositionInView = myPOIToMove->getPositionInView();
428 }
else if (myViewNet->myObjectsUnderCursor.getAdditionalFront()) {
430 myAdditionalToMove = myViewNet->myObjectsUnderCursor.getAdditionalFront();
432 originalPositionInView = myAdditionalToMove->getPositionInView();
434 myAdditionalToMove->startGeometryMoving();
437 }
else if (myViewNet->myObjectsUnderCursor.getTAZFront()) {
439 return calculateTAZValues();
440 }
else if (myViewNet->myObjectsUnderCursor.getJunctionFront()) {
442 myJunctionToMove = myViewNet->myObjectsUnderCursor.getJunctionFront();
444 originalPositionInView = myJunctionToMove->getPositionInView();
446 myJunctionToMove->startGeometryMoving();
449 }
else if (myViewNet->myObjectsUnderCursor.getEdgeFront() || myViewNet->myObjectsUnderCursor.getLaneFront()) {
451 return calculateEdgeValues();
462 myRelativeClickedPosition = myViewNet->getPositionInformation();
464 if (myViewNet->myObjectsUnderCursor.getDemandElementFront()) {
466 myDemandElementToMove = myViewNet->myObjectsUnderCursor.getDemandElementFront();
468 originalPositionInView = myDemandElementToMove->getPositionInView();
470 myDemandElementToMove->startGeometryMoving();
484 Position offsetMovement = myViewNet->getPositionInformation() - myViewNet->myMoveSingleElementValues.myRelativeClickedPosition;
486 if (myViewNet->myNetworkViewOptions.menuCheckMoveElevation->shown() && myViewNet->myNetworkViewOptions.menuCheckMoveElevation->getCheck() == TRUE) {
488 offsetMovement =
Position(0, 0, offsetMovement.
y());
491 offsetMovement.
setz(0);
496 if (myPolyToMove->isPolygonBlocked()) {
498 myPolyToMove->moveEntireShape(originalShapeBeforeMoving, offsetMovement);
501 movingIndexShape = myPolyToMove->moveVertexShape(movingIndexShape, originalPositionInView, offsetMovement);
503 }
else if (myPOIToMove) {
505 myPOIToMove->moveGeometry(originalPositionInView, offsetMovement);
506 }
else if (myJunctionToMove) {
508 myJunctionToMove->moveGeometry(originalPositionInView, offsetMovement);
509 }
else if (myEdgeToMove) {
511 if (myMovingStartPos) {
512 myEdgeToMove->moveShapeStart(originalPositionInView, offsetMovement);
513 }
else if (myMovingEndPos) {
514 myEdgeToMove->moveShapeEnd(originalPositionInView, offsetMovement);
517 movingIndexShape = myEdgeToMove->moveVertexShape(movingIndexShape, originalPositionInView, offsetMovement);
519 }
else if (myAdditionalToMove && (myAdditionalToMove->isAdditionalBlocked() ==
false)) {
521 myAdditionalToMove->moveGeometry(offsetMovement);
522 }
else if (myDemandElementToMove) {
524 myDemandElementToMove->moveGeometry(offsetMovement);
525 }
else if (myTAZToMove) {
527 if (myTAZToMove->isShapeBlocked()) {
529 myTAZToMove->moveEntireShape(originalShapeBeforeMoving, offsetMovement);
532 movingIndexShape = myTAZToMove->moveVertexShape(movingIndexShape, originalPositionInView, offsetMovement);
543 myPolyToMove->commitShapeChange(originalShapeBeforeMoving, myViewNet->getUndoList());
544 myPolyToMove =
nullptr;
545 }
else if (myPOIToMove) {
546 myPOIToMove->commitGeometryMoving(originalPositionInView, myViewNet->getUndoList());
547 myPOIToMove =
nullptr;
548 }
else if (myJunctionToMove) {
550 if (!myViewNet->mergeJunctions(myJunctionToMove, originalPositionInView)) {
551 myJunctionToMove->commitGeometryMoving(originalPositionInView, myViewNet->getUndoList());
553 myJunctionToMove =
nullptr;
554 }
else if (myEdgeToMove) {
556 if (myMovingStartPos) {
557 myEdgeToMove->commitShapeStartChange(originalPositionInView, myViewNet->getUndoList());
558 myMovingStartPos =
false;
559 }
else if (myMovingEndPos) {
560 myEdgeToMove->commitShapeEndChange(originalPositionInView, myViewNet->getUndoList());
561 myMovingEndPos =
false;
563 myEdgeToMove->commitShapeChange(originalShapeBeforeMoving, myViewNet->getUndoList());
565 myEdgeToMove =
nullptr;
566 }
else if (myAdditionalToMove) {
567 myAdditionalToMove->commitGeometryMoving(myViewNet->getUndoList());
568 myAdditionalToMove->endGeometryMoving();
569 myAdditionalToMove =
nullptr;
570 }
else if (myDemandElementToMove) {
571 myDemandElementToMove->commitGeometryMoving(myViewNet->getUndoList());
572 myDemandElementToMove->endGeometryMoving();
573 myDemandElementToMove =
nullptr;
574 }
else if (myTAZToMove) {
575 myTAZToMove->commitShapeChange(originalShapeBeforeMoving, myViewNet->getUndoList());
576 myTAZToMove =
nullptr;
584 myPolyToMove = myViewNet->myObjectsUnderCursor.getPolyFront();
586 if (myViewNet->myNetworkViewOptions.menuCheckMoveElevation->shown() && myViewNet->myNetworkViewOptions.menuCheckMoveElevation->getCheck() == TRUE) {
588 int existentIndex = myPolyToMove->getVertexIndex(myViewNet->getPositionInformation(),
false,
false);
589 if (existentIndex != -1) {
591 myViewNet->myMoveSingleElementValues.originalShapeBeforeMoving = myPolyToMove->getShape();
593 myViewNet->myMoveSingleElementValues.movingIndexShape = existentIndex;
594 myViewNet->myMoveSingleElementValues.originalPositionInView = myPolyToMove->getShape()[existentIndex];
599 myPolyToMove =
nullptr;
605 myViewNet->myMoveSingleElementValues.originalShapeBeforeMoving = myPolyToMove->getShape();
607 myViewNet->myMoveSingleElementValues.originalPositionInView = myViewNet->getPositionInformation();
609 if ((myPolyToMove->isPolygonBlocked() ==
false) && (myPolyToMove->isMovementBlocked() ==
false)) {
611 if (myViewNet->myKeyPressed.shiftKeyPressed()) {
613 myViewNet->myMoveSingleElementValues.movingIndexShape = myPolyToMove->getVertexIndex(myViewNet->myMoveSingleElementValues.originalPositionInView,
false,
false);
614 if (myViewNet->myMoveSingleElementValues.movingIndexShape != -1) {
615 myPolyToMove->deleteGeometryPoint(myViewNet->myMoveSingleElementValues.originalPositionInView);
617 myPolyToMove =
nullptr;
625 myViewNet->myMoveSingleElementValues.movingIndexShape = myPolyToMove->getVertexIndex(myViewNet->myMoveSingleElementValues.originalPositionInView,
false,
false);
627 if (myViewNet->myMoveSingleElementValues.movingIndexShape == -1) {
628 if (myPolyToMove->getShape().distance2D(myViewNet->myMoveSingleElementValues.originalPositionInView) <= 0.8) {
630 myViewNet->myMoveSingleElementValues.movingIndexShape = myPolyToMove->getVertexIndex(myViewNet->myMoveSingleElementValues.originalPositionInView,
true,
true);
637 myViewNet->myMoveSingleElementValues.originalPositionInView.setz(myPolyToMove->getShape()[myViewNet->myMoveSingleElementValues.movingIndexShape].z());
642 myViewNet->myMoveSingleElementValues.movingIndexShape = -1;
644 return (myPolyToMove->isMovementBlocked() ==
false);
652 if (myViewNet->myKeyPressed.shiftKeyPressed()) {
654 myViewNet->myObjectsUnderCursor.getEdgeFront()->editEndpoint(myViewNet->getPositionInformation(), myViewNet->myUndoList);
659 myEdgeToMove = myViewNet->myObjectsUnderCursor.getEdgeFront();
661 if (myEdgeToMove->clickedOverShapeStart(myViewNet->getPositionInformation())) {
663 myViewNet->myMoveSingleElementValues.originalPositionInView = myEdgeToMove->getNBEdge()->getGeometry().front();
664 myViewNet->myMoveSingleElementValues.myMovingStartPos =
true;
666 myEdgeToMove->startGeometryMoving();
669 }
else if (myEdgeToMove->clickedOverShapeEnd(myViewNet->getPositionInformation())) {
671 myViewNet->myMoveSingleElementValues.originalPositionInView = myEdgeToMove->getNBEdge()->getGeometry().back();
672 myViewNet->myMoveSingleElementValues.myMovingEndPos =
true;
674 myEdgeToMove->startGeometryMoving();
679 if (myViewNet->myNetworkViewOptions.menuCheckMoveElevation->shown() && myViewNet->myNetworkViewOptions.menuCheckMoveElevation->getCheck() == TRUE) {
681 int existentIndex = myEdgeToMove->getVertexIndex(myViewNet->getPositionInformation(),
false,
false);
682 if (existentIndex != -1) {
683 myViewNet->myMoveSingleElementValues.movingIndexShape = existentIndex;
684 myViewNet->myMoveSingleElementValues.originalPositionInView = myEdgeToMove->getNBEdge()->getInnerGeometry()[existentIndex];
686 myEdgeToMove->startGeometryMoving();
691 myEdgeToMove =
nullptr;
697 myViewNet->myMoveSingleElementValues.originalShapeBeforeMoving = myEdgeToMove->getNBEdge()->getInnerGeometry();
699 myViewNet->myMoveSingleElementValues.movingIndexShape = myEdgeToMove->getVertexIndex(myViewNet->getPositionInformation(),
false,
false);
701 if (myViewNet->myMoveSingleElementValues.movingIndexShape == -1) {
702 myViewNet->myMoveSingleElementValues.movingIndexShape = myEdgeToMove->getVertexIndex(myViewNet->getPositionInformation(),
true,
true);
705 if (myViewNet->myMoveSingleElementValues.movingIndexShape != -1) {
706 myViewNet->myMoveSingleElementValues.originalPositionInView = myEdgeToMove->getNBEdge()->getInnerGeometry()[myViewNet->myMoveSingleElementValues.movingIndexShape];
708 myEdgeToMove->startGeometryMoving();
724 myTAZToMove = myViewNet->myObjectsUnderCursor.getTAZFront();
726 myViewNet->myMoveSingleElementValues.originalShapeBeforeMoving = myTAZToMove->getTAZShape();
728 myViewNet->myMoveSingleElementValues.originalPositionInView = myViewNet->getPositionInformation();
730 if ((myTAZToMove->isShapeBlocked() ==
false) && (myTAZToMove->isAdditionalBlocked() ==
false)) {
732 if (myViewNet->myKeyPressed.shiftKeyPressed()) {
734 myViewNet->myMoveSingleElementValues.movingIndexShape = myTAZToMove->getVertexIndex(myViewNet->myMoveSingleElementValues.originalPositionInView,
false,
false);
735 if (myViewNet->myMoveSingleElementValues.movingIndexShape != -1) {
736 myTAZToMove->deleteGeometryPoint(myViewNet->myMoveSingleElementValues.originalPositionInView);
738 myTAZToMove =
nullptr;
746 myViewNet->myMoveSingleElementValues.movingIndexShape = myTAZToMove->getVertexIndex(myViewNet->myMoveSingleElementValues.originalPositionInView,
false,
false);
747 if (myViewNet->myMoveSingleElementValues.movingIndexShape == -1) {
749 myViewNet->myMoveSingleElementValues.movingIndexShape = myTAZToMove->getVertexIndex(myViewNet->myMoveSingleElementValues.originalPositionInView,
true,
true);
756 myViewNet->myMoveSingleElementValues.movingIndexShape = -1;
758 return (myTAZToMove->isAdditionalBlocked() ==
false);
768 myMovingSelection(false) {
775 myMovingSelection =
true;
777 myClickedPosition = myViewNet->getPositionInformation();
779 std::vector<GNEJunction*> selectedJunctions = myViewNet->getNet()->retrieveJunctions(
true);
780 std::vector<GNEEdge*> selectedEdges = myViewNet->getNet()->retrieveEdges(
true);
782 for (
auto i : selectedJunctions) {
784 myMovedJunctionOriginPositions[i] = i->getPositionInView();
786 i->startGeometryMoving();
791 for (
auto i : selectedEdges) {
793 myMovedEdgesOriginShape[i] = i->getNBEdge()->getInnerGeometry();
795 i->startGeometryMoving();
803 for (
auto i : selectedEdges) {
807 i->startGeometryMoving();
811 std::vector<GNEEdge*> noJunctionsSelected;
812 std::vector<GNEEdge*> originJunctionSelected;
813 std::vector<GNEEdge*> destinyJunctionSelected;
815 for (
auto i : selectedEdges) {
816 bool originSelected = myMovedJunctionOriginPositions.count(i->getGNEJunctionSource()) > 0;
817 bool destinySelected = myMovedJunctionOriginPositions.count(i->getGNEJunctionDestiny()) > 0;
819 if (!originSelected && !destinySelected) {
820 noJunctionsSelected.push_back(i);
821 }
else if (originSelected && !destinySelected) {
822 originJunctionSelected.push_back(i);
823 }
else if (!originSelected && destinySelected) {
824 destinyJunctionSelected.push_back(i);
825 }
else if (!originSelected && !destinySelected) {
827 myMovedEdgesOriginShape[i] = i->getNBEdge()->getInnerGeometry();
829 i->startGeometryMoving();
833 for (
auto i : noJunctionsSelected) {
836 myMovedEgdesGeometryPoints[i]->originalShapeBeforeMoving = i->getNBEdge()->getInnerGeometry();
838 i->startGeometryMoving();
841 int index = clickedEdge->
getVertexIndex(myViewNet->getPositionInformation(),
true,
true);
845 for (
auto i : myMovedJunctionOriginPositions) {
846 i.first->endGeometryMoving();
849 for (
auto i : myMovedEdgesOriginShape) {
850 i.first->endGeometryMoving();
853 for (
auto i : myMovedEgdesGeometryPoints) {
854 i.first->endGeometryMoving();
857 myMovingSelection =
false;
859 myMovedJunctionOriginPositions.clear();
860 myMovedEdgesOriginShape.clear();
862 for (
const auto& i : myMovedEgdesGeometryPoints) {
865 myMovedEgdesGeometryPoints.clear();
869 myMovedEgdesGeometryPoints[clickedEdge]->movingIndexShape = index;
870 myMovedEgdesGeometryPoints[clickedEdge]->originalPositionInView = myViewNet->getPositionInformation();
874 for (
auto i : noJunctionsSelected) {
875 if (i != clickedEdge) {
878 myMovedEgdesGeometryPoints[i]->movingIndexShape = i->getVertexIndex(myViewNet->getPositionInformation(),
true,
true);
880 if (i->getOppositeEdge() == clickedEdge) {
881 myMovedEgdesGeometryPoints[i]->originalPositionInView = myViewNet->getPositionInformation();
883 myMovedEgdesGeometryPoints[i]->originalPositionInView = i->getNBEdge()->getInnerGeometry()[myMovedEgdesGeometryPoints[i]->movingIndexShape];
886 i->startGeometryMoving();
898 Position offsetMovement = myViewNet->getPositionInformation() - myClickedPosition;
900 if (myViewNet->myNetworkViewOptions.menuCheckMoveElevation->shown() && myViewNet->myNetworkViewOptions.menuCheckMoveElevation->getCheck() == TRUE) {
902 offsetMovement =
Position(0, 0, offsetMovement.
y());
905 offsetMovement.
setz(0);
908 for (
auto i : myMovedJunctionOriginPositions) {
909 i.first->moveGeometry(i.second, offsetMovement);
912 for (
auto i : myMovedEdgesOriginShape) {
913 i.first->moveEntireShape(i.second, offsetMovement);
916 for (
auto i : myMovedEgdesGeometryPoints) {
917 i.first->moveVertexShape(i.second->movingIndexShape, i.second->originalPositionInView, offsetMovement);
927 myViewNet->getUndoList()->p_begin(
"position of selected elements");
929 for (
auto i : myMovedJunctionOriginPositions) {
930 i.first->commitGeometryMoving(i.second, myViewNet->getUndoList());
933 for (
auto i : myMovedEdgesOriginShape) {
934 i.first->commitShapeChange(i.second, myViewNet->getUndoList());
937 for (
auto i : myMovedEgdesGeometryPoints) {
938 i.first->commitShapeChange(i.second->originalShapeBeforeMoving, myViewNet->getUndoList());
941 myViewNet->getUndoList()->p_end();
943 myMovingSelection =
false;
945 myMovedJunctionOriginPositions.clear();
946 myMovedEdgesOriginShape.clear();
948 for (
const auto& i : myMovedEgdesGeometryPoints) {
951 myMovedEgdesGeometryPoints.clear();
957 return myMovingSelection;
1007 selectingUsingRectangle(false),
1008 startDrawing(false),
1009 myViewNet(viewNet) {
1015 selectingUsingRectangle =
true;
1016 selectionCorner1 = myViewNet->getPositionInformation();
1017 selectionCorner2 = selectionCorner1;
1024 startDrawing =
true;
1026 selectionCorner2 = myViewNet->getPositionInformation();
1028 myViewNet->setStatusBarText(
"Selection width:" +
toString(fabs(selectionCorner1.x() - selectionCorner2.x()))
1029 +
" height:" +
toString(fabs(selectionCorner1.y() - selectionCorner2.y()))
1030 +
" diagonal:" +
toString(selectionCorner1.distanceTo2D(selectionCorner2)));
1032 myViewNet->update();
1039 selectingUsingRectangle =
false;
1040 startDrawing =
false;
1047 if ((abs(selectionCorner1.x() - selectionCorner2.x()) > 0.01) &&
1048 (abs(selectionCorner1.y() - selectionCorner2.y()) > 0.01) &&
1049 myViewNet->myKeyPressed.shiftKeyPressed()) {
1052 rectangleBoundary.
add(selectionCorner1);
1053 rectangleBoundary.
add(selectionCorner2);
1055 processBoundarySelection(rectangleBoundary);
1060 std::vector<GNEEdge*>
1063 std::vector<GNEEdge*> result;
1065 if ((abs(selectionCorner1.x() - selectionCorner2.x()) > 0.01) &&
1066 (abs(selectionCorner1.y() - selectionCorner2.y()) > 0.01) &&
1067 myViewNet->myKeyPressed.shiftKeyPressed()) {
1070 rectangleBoundary.
add(selectionCorner1);
1071 rectangleBoundary.
add(selectionCorner2);
1072 if (myViewNet->makeCurrent()) {
1074 std::set<std::pair<std::string, GNEAttributeCarrier*> > ACsInBoundary = myViewNet->getAttributeCarriersInBoundary(rectangleBoundary);
1076 for (
auto i : ACsInBoundary) {
1078 result.push_back(
dynamic_cast<GNEEdge*
>(i.second));
1081 myViewNet->makeNonCurrent();
1096 if (selectingUsingRectangle) {
1098 glTranslated(0, 0,
GLO_MAX - 1);
1101 glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
1103 glVertex2d(selectionCorner1.x(), selectionCorner1.y());
1104 glVertex2d(selectionCorner1.x(), selectionCorner2.y());
1105 glVertex2d(selectionCorner2.x(), selectionCorner2.y());
1106 glVertex2d(selectionCorner2.x(), selectionCorner1.y());
1115 if (myViewNet->makeCurrent()) {
1116 std::set<std::pair<std::string, GNEAttributeCarrier*> > ACsInBoundary = myViewNet->getAttributeCarriersInBoundary(boundary);
1118 std::set<std::pair<std::string, GNEAttributeCarrier*> > ACsInBoundaryFiltered;
1119 for (
const auto& i : ACsInBoundary) {
1120 if (((myViewNet->myEditModes.currentSupermode ==
GNE_SUPERMODE_NETWORK) && !i.second->getTagProperty().isDemandElement()) ||
1121 ((myViewNet->myEditModes.currentSupermode ==
GNE_SUPERMODE_DEMAND) && i.second->getTagProperty().isDemandElement())) {
1122 ACsInBoundaryFiltered.insert(i);
1126 std::vector<GNEAttributeCarrier*> ACToSelect;
1127 std::vector<GNEAttributeCarrier*> ACToUnselect;
1129 ACToSelect.reserve(ACsInBoundaryFiltered.size());
1130 ACToUnselect.reserve(ACsInBoundaryFiltered.size());
1135 std::vector<GNEAttributeCarrier*> selectedAC = myViewNet->getNet()->getSelectedAttributeCarriers(
false);
1137 for (
auto i : selectedAC) {
1138 ACToUnselect.push_back(i);
1142 for (
auto i : ACsInBoundaryFiltered) {
1143 switch (myViewNet->myViewParent->getSelectorFrame()->getModificationModeModul()->getModificationMode()) {
1145 ACToUnselect.push_back(i.second);
1148 if (std::find(ACToUnselect.begin(), ACToUnselect.end(), i.second) != ACToUnselect.end()) {
1149 ACToSelect.push_back(i.second);
1153 ACToSelect.push_back(i.second);
1159 std::vector<GNEEdge*> edgesToSelect;
1161 for (
auto i : ACToSelect) {
1163 edgesToSelect.push_back(
dynamic_cast<GNEEdge*
>(i));
1167 for (
auto i : edgesToSelect) {
1169 ACToSelect.push_back(i->getGNEJunctionSource());
1170 for (
auto j : i->getGNEJunctionSource()->getGNEConnections()) {
1171 ACToSelect.push_back(j);
1173 for (
auto j : i->getGNEJunctionSource()->getGNECrossings()) {
1174 ACToSelect.push_back(j);
1177 ACToSelect.push_back(i->getGNEJunctionDestiny());
1178 for (
auto j : i->getGNEJunctionDestiny()->getGNEConnections()) {
1179 ACToSelect.push_back(j);
1181 for (
auto j : i->getGNEJunctionDestiny()->getGNECrossings()) {
1182 ACToSelect.push_back(j);
1187 if ((ACToSelect.size() + ACToUnselect.size()) > 0) {
1189 myViewNet->myUndoList->p_begin(
"selection using rectangle");
1190 for (
auto i : ACToUnselect) {
1193 for (
auto i : ACToSelect) {
1194 if (i->getTagProperty().isSelectable()) {
1198 myViewNet->myUndoList->p_end();
1200 myViewNet->makeNonCurrent();
1210 myTestingEnabled(
OptionsCont::getOptions().getBool(
"gui-testing")),
1212 myTestingHeight(0) {
1222 if ((windowSize.size() == 2) && GNEAttributeCarrier::canParse<int>(windowSize[0]) && GNEAttributeCarrier::canParse<int>(windowSize[1])) {
1223 myTestingWidth = GNEAttributeCarrier::parse<int>(windowSize[0]);
1224 myTestingHeight = GNEAttributeCarrier::parse<int>(windowSize[1]);
1226 WRITE_ERROR(
"Invalid windows size-format: " +
toString(windowSize) +
"for option 'window-size'");
1235 if (myTestingEnabled) {
1237 if (myTestingWidth > 0 && ((myViewNet->getWidth() != myTestingWidth) || (myViewNet->getHeight() != myTestingHeight))) {
1240 mainWindow->resize(myTestingWidth + myTestingWidth - myViewNet->getWidth(), myTestingHeight + myTestingHeight - myViewNet->getHeight());
1247 const double size = myViewNet->p2m(32);
1248 Position center = myViewNet->screenPos2NetPos(8, 8);
1250 glTranslated(center.
x(), center.
y(),
GLO_MAX - 1);
1251 glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
1254 glVertex2d(0, -size);
1255 glVertex2d(size, -size);
1256 glVertex2d(size, 0);
1261 Position posRelative = myViewNet->screenPos2NetPos(myViewNet->getWidth() - 40, myViewNet->getHeight() - 20);
1271 return myTestingEnabled;
1282 networkButton(nullptr),
1283 demandButton(nullptr),
1284 myViewNet(viewNet) {
1291 networkButton =
new MFXCheckableButton(
false, myViewNet->getViewParent()->getGNEAppWindows()->getToolbarsGrip().superModes,
"Network\t\tSet mode for edit network elements.",
1293 networkButton->create();
1295 demandButton =
new MFXCheckableButton(
false, myViewNet->getViewParent()->getGNEAppWindows()->getToolbarsGrip().superModes,
"Demand\t\tSet mode for edit traffic demand.",
1297 demandButton->create();
1300 myViewNet->getViewParent()->getGNEAppWindows()->getToolbarsGrip().modes->recalc();
1302 myViewNet->getViewParent()->getGNEAppWindows()->getToolbarsGrip().modes->show();
1308 if (supermode == currentSupermode) {
1309 myViewNet->setStatusBarText(
"Mode already selected");
1310 if (myViewNet->myCurrentFrame !=
nullptr) {
1311 myViewNet->myCurrentFrame->focusUpperElement();
1314 myViewNet->setStatusBarText(
"");
1316 myViewNet->abortOperation(
false);
1318 currentSupermode = supermode;
1322 networkButton->setChecked(
true);
1323 demandButton->setChecked(
false);
1325 myViewNet->myNetworkCheckableButtons.showNetworkCheckableButtons();
1327 myViewNet->myDemandCheckableButtons.hideDemandCheckableButtons();
1329 setNetworkEditMode(networkEditMode,
true);
1332 networkButton->setChecked(
false);
1333 demandButton->setChecked(
true);
1335 myViewNet->myNetworkCheckableButtons.hideNetworkCheckableButtons();
1337 myViewNet->myDemandCheckableButtons.showDemandCheckableButtons();
1339 setDemandEditMode(demandEditMode,
true);
1342 networkButton->update();
1343 demandButton->update();
1345 myViewNet->myViewParent->getGNEAppWindows()->updateSuperModeMenuCommands(currentSupermode);
1352 if ((mode == networkEditMode) && !force) {
1353 myViewNet->setStatusBarText(
"Network mode already selected");
1354 if (myViewNet->myCurrentFrame !=
nullptr) {
1355 myViewNet->myCurrentFrame->focusUpperElement();
1357 }
else if (networkEditMode ==
GNE_NMODE_TLS && !myViewNet->myViewParent->getTLSEditorFrame()->isTLSSaved()) {
1358 myViewNet->setStatusBarText(
"save modifications in TLS before change mode");
1359 myViewNet->myCurrentFrame->focusUpperElement();
1361 myViewNet->setStatusBarText(
"");
1362 myViewNet->abortOperation(
false);
1364 myViewNet->myEditShapes.stopEditCustomShape();
1366 networkEditMode = mode;
1383 myViewNet->myNet->computeNetwork(myViewNet->myViewParent->getGNEAppWindows());
1389 myViewNet->updateNetworkModeSpecificControls();
1396 if ((mode == demandEditMode) && !force) {
1397 myViewNet->setStatusBarText(
"Demand mode already selected");
1398 if (myViewNet->myCurrentFrame !=
nullptr) {
1399 myViewNet->myCurrentFrame->focusUpperElement();
1402 myViewNet->setStatusBarText(
"");
1403 myViewNet->abortOperation(
false);
1405 myViewNet->myEditShapes.stopEditCustomShape();
1407 demandEditMode = mode;
1419 myViewNet->myNet->computeNetwork(myViewNet->myViewParent->getGNEAppWindows());
1423 myViewNet->updateDemandModeSpecificControls();
1433 menuCheckShowGrid(nullptr),
1434 myViewNet(viewNet) {
1441 menuCheckShowGrid =
new FXMenuCheck(myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modeOptions,
1442 (
"Grid\t\tshow grid and restrict movement to the grid (size defined in visualization options)"),
1444 menuCheckShowGrid->setHeight(23);
1445 menuCheckShowGrid->setCheck(
false);
1446 menuCheckShowGrid->create();
1453 menuCheckShowGrid->hide();
1460 if (menuCheckShowGrid->shown()) {
1461 commands.push_back(menuCheckShowGrid);
1470 myViewNet(viewNet) {
1476 menuCheckShowDemandElements =
new FXMenuCheck(myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modeOptions,
1477 (
"Show demand elements\t\tToggle show demand elements"),
1479 menuCheckShowDemandElements->setHeight(23);
1480 menuCheckShowDemandElements->setCheck(
false);
1481 menuCheckShowDemandElements->create();
1483 menuCheckSelectEdges =
new FXMenuCheck(myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modeOptions,
1486 menuCheckSelectEdges->setHeight(23);
1487 menuCheckSelectEdges->setCheck(
true);
1488 menuCheckSelectEdges->create();
1490 menuCheckShowConnections =
new FXMenuCheck(myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modeOptions,
1493 menuCheckShowConnections->setHeight(23);
1494 menuCheckShowConnections->setCheck(myViewNet->getVisualisationSettings()->showLane2Lane);
1495 menuCheckShowConnections->create();
1497 menuCheckHideConnections =
new FXMenuCheck(myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modeOptions,
1500 menuCheckHideConnections->setHeight(23);
1501 menuCheckHideConnections->setCheck(
false);
1502 menuCheckHideConnections->create();
1504 menuCheckExtendSelection =
new FXMenuCheck(myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modeOptions,
1507 menuCheckExtendSelection->setHeight(23);
1508 menuCheckExtendSelection->setCheck(
false);
1509 menuCheckExtendSelection->create();
1511 menuCheckChangeAllPhases =
new FXMenuCheck(myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modeOptions,
1512 (
"Apply change to all phases\t\tToggle whether clicking should apply state changes to all phases of the current " +
toString(
SUMO_TAG_TRAFFIC_LIGHT) +
" plan").c_str(),
1514 menuCheckChangeAllPhases->setHeight(23);
1515 menuCheckChangeAllPhases->setCheck(
false);
1516 menuCheckChangeAllPhases->create();
1518 menuCheckWarnAboutMerge =
new FXMenuCheck(myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modeOptions,
1521 menuCheckWarnAboutMerge->setHeight(23);
1522 menuCheckWarnAboutMerge->setCheck(
true);
1523 menuCheckWarnAboutMerge->create();
1525 menuCheckShowJunctionBubble =
new FXMenuCheck(myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modeOptions,
1528 menuCheckShowJunctionBubble->setHeight(23);
1529 menuCheckShowJunctionBubble->setCheck(
false);
1530 menuCheckShowJunctionBubble->create();
1532 menuCheckMoveElevation =
new FXMenuCheck(myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modeOptions,
1533 (
"Elevation\t\tApply mouse movement to elevation instead of x,y position"),
1535 menuCheckMoveElevation->setHeight(23);
1536 menuCheckMoveElevation->setCheck(
false);
1537 menuCheckMoveElevation->create();
1539 menuCheckChainEdges =
new FXMenuCheck(myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modeOptions,
1540 (
"Chain\t\tCreate consecutive " +
toString(
SUMO_TAG_EDGE) +
"s with a single click (hit ESC to cancel chain).").c_str(),
1542 menuCheckChainEdges->setHeight(23);
1543 menuCheckChainEdges->setCheck(
false);
1544 menuCheckChainEdges->create();
1546 menuCheckAutoOppositeEdge =
new FXMenuCheck(myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modeOptions,
1547 (
"Two-way\t\tAutomatically create an " +
toString(
SUMO_TAG_EDGE) +
" in the opposite direction").c_str(),
1549 menuCheckAutoOppositeEdge->setHeight(23);
1550 menuCheckAutoOppositeEdge->setCheck(
false);
1551 menuCheckAutoOppositeEdge->create();
1554 myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modeOptions->recalc();
1560 menuCheckShowDemandElements->hide();
1561 menuCheckSelectEdges->hide();
1562 menuCheckShowConnections->hide();
1563 menuCheckHideConnections->hide();
1564 menuCheckExtendSelection->hide();
1565 menuCheckChangeAllPhases->hide();
1566 menuCheckWarnAboutMerge->hide();
1567 menuCheckShowJunctionBubble->hide();
1568 menuCheckMoveElevation->hide();
1569 menuCheckChainEdges->hide();
1570 menuCheckAutoOppositeEdge->hide();
1572 myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modeOptions->show();
1579 if (menuCheckShowDemandElements->shown()) {
1580 commands.push_back(menuCheckShowDemandElements);
1582 if (menuCheckSelectEdges->shown()) {
1583 commands.push_back(menuCheckSelectEdges);
1585 if (menuCheckShowConnections->shown()) {
1586 commands.push_back(menuCheckShowConnections);
1588 if (menuCheckHideConnections->shown()) {
1589 commands.push_back(menuCheckHideConnections);
1591 if (menuCheckExtendSelection->shown()) {
1592 commands.push_back(menuCheckExtendSelection);
1594 if (menuCheckChangeAllPhases->shown()) {
1595 commands.push_back(menuCheckChangeAllPhases);
1597 if (menuCheckWarnAboutMerge->shown()) {
1598 commands.push_back(menuCheckWarnAboutMerge);
1600 if (menuCheckShowJunctionBubble->shown()) {
1601 commands.push_back(menuCheckShowJunctionBubble);
1603 if (menuCheckMoveElevation->shown()) {
1604 commands.push_back(menuCheckMoveElevation);
1606 if (menuCheckChainEdges->shown()) {
1607 commands.push_back(menuCheckChainEdges);
1609 if (menuCheckAutoOppositeEdge->shown()) {
1610 commands.push_back(menuCheckAutoOppositeEdge);
1617 if (menuCheckShowDemandElements->shown()) {
1618 return (menuCheckShowDemandElements->getCheck() == TRUE);
1628 if (menuCheckSelectEdges->shown()) {
1629 return (menuCheckSelectEdges->getCheck() == TRUE);
1641 return (menuCheckHideConnections->getCheck() == FALSE);
1644 }
else if (menuCheckShowConnections->shown() ==
false) {
1647 return (myViewNet->getVisualisationSettings()->showLane2Lane);
1654 if (menuCheckMoveElevation->shown()) {
1655 return (menuCheckMoveElevation->getCheck() == TRUE);
1666 menuCheckHideShapes(nullptr),
1667 menuCheckHideNonInspectedDemandElements(nullptr),
1668 menuCheckShowAllPersonPlans(nullptr),
1669 menuCheckLockPerson(nullptr),
1671 myLockedPerson(nullptr) {
1678 menuCheckHideShapes =
new FXMenuCheck(myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modeOptions,
1679 (
"Hide shapes\t\tToggle show shapes (Polygons and POIs)"),
1681 menuCheckHideShapes->setHeight(23);
1682 menuCheckHideShapes->setCheck(
false);
1683 menuCheckHideShapes->create();
1685 menuCheckHideNonInspectedDemandElements =
new FXMenuCheck(myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modeOptions,
1686 (
"Hide non-inspected elements\t\tToggle show non-inspected demand elements"),
1688 menuCheckHideNonInspectedDemandElements->setHeight(23);
1689 menuCheckHideNonInspectedDemandElements->setCheck(
false);
1690 menuCheckHideNonInspectedDemandElements->create();
1692 menuCheckShowAllPersonPlans =
new FXMenuCheck(myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modeOptions,
1693 (
"Show all person plans\t\tshow all person plans"),
1695 menuCheckShowAllPersonPlans->setHeight(23);
1696 menuCheckShowAllPersonPlans->setCheck(
false);
1697 menuCheckShowAllPersonPlans->create();
1699 menuCheckLockPerson =
new FXMenuCheck(myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modeOptions,
1700 (
"Lock person\t\tLock selected person"),
1702 menuCheckLockPerson->setHeight(23);
1703 menuCheckLockPerson->setCheck(
false);
1704 menuCheckLockPerson->create();
1707 myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modeOptions->recalc();
1713 menuCheckHideShapes->hide();
1714 menuCheckHideNonInspectedDemandElements->hide();
1715 menuCheckShowAllPersonPlans->hide();
1716 menuCheckLockPerson->hide();
1718 myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modeOptions->show();
1725 if (menuCheckHideShapes->shown()) {
1726 commands.push_back(menuCheckHideShapes);
1728 if (menuCheckHideNonInspectedDemandElements->shown()) {
1729 commands.push_back(menuCheckHideNonInspectedDemandElements);
1731 if (menuCheckShowAllPersonPlans->shown() && menuCheckShowAllPersonPlans->isEnabled()) {
1732 commands.push_back(menuCheckShowAllPersonPlans);
1734 if (menuCheckLockPerson->shown() && menuCheckLockPerson->isEnabled()) {
1735 commands.push_back(menuCheckLockPerson);
1742 if (menuCheckHideNonInspectedDemandElements->shown()) {
1744 if ((menuCheckHideNonInspectedDemandElements->getCheck() == FALSE) || (myViewNet->getDottedAC() ==
nullptr)) {
1747 }
else if (myViewNet->getDottedAC()->getTagProperty().isDemandElement()) {
1748 if (myViewNet->getDottedAC() == demandElement) {
1754 if (i == myViewNet->getDottedAC()) {
1760 if (i == myViewNet->getDottedAC()) {
1780 if (menuCheckHideShapes->shown()) {
1781 return (menuCheckHideShapes->getCheck() == FALSE);
1790 if (menuCheckShowAllPersonPlans->shown() && menuCheckShowAllPersonPlans->isEnabled()) {
1791 return (menuCheckShowAllPersonPlans->getCheck() == TRUE);
1800 myLockedPerson = person;
1806 myLockedPerson =
nullptr;
1812 return myLockedPerson;
1820 inspectButton(nullptr),
1821 deleteButton(nullptr),
1822 selectButton(nullptr),
1823 moveButton(nullptr),
1824 myViewNet(viewNet) {
1831 inspectButton =
new MFXCheckableButton(
false, myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modes,
"\tset inspect mode\tMode for inspect elements and change their attributes.",
1833 inspectButton->create();
1835 deleteButton =
new MFXCheckableButton(
false, myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modes,
"\tset delete mode\tMode for delete elements.",
1837 deleteButton->create();
1839 selectButton =
new MFXCheckableButton(
false, myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modes,
"\tset select mode\tMode for select elements.",
1841 selectButton->create();
1843 moveButton =
new MFXCheckableButton(
false, myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modes,
"\tset move mode\tMode for move elements.",
1845 moveButton->create();
1847 myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modes->recalc();
1853 inspectButton->show();
1854 deleteButton->show();
1855 selectButton->show();
1862 inspectButton->hide();
1863 deleteButton->hide();
1864 selectButton->hide();
1871 inspectButton->setChecked(
false);
1872 deleteButton->setChecked(
false);
1873 selectButton->setChecked(
false);
1874 moveButton->setChecked(
false);
1880 inspectButton->update();
1881 deleteButton->update();
1882 selectButton->update();
1883 moveButton->update();
1891 createEdgeButton(nullptr),
1892 connectionButton(nullptr),
1893 trafficLightButton(nullptr),
1894 additionalButton(nullptr),
1895 crossingButton(nullptr),
1897 shapeButton(nullptr),
1898 prohibitionButton(nullptr),
1899 myViewNet(viewNet) {
1906 createEdgeButton =
new MFXCheckableButton(
false, myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modes,
"\tset create edge mode\tMode for creating junction and edges.",
1908 createEdgeButton->create();
1910 connectionButton =
new MFXCheckableButton(
false, myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modes,
"\tset connection mode\tMode for edit connections between lanes.",
1912 connectionButton->create();
1914 prohibitionButton =
new MFXCheckableButton(
false, myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modes,
"\tset prohibition mode\tMode for editing connection prohibitions.",
1916 prohibitionButton->create();
1918 trafficLightButton =
new MFXCheckableButton(
false, myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modes,
"\tset traffic light mode\tMode for edit traffic lights over junctions.",
1920 trafficLightButton->create();
1922 additionalButton =
new MFXCheckableButton(
false, myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modes,
"\tset additional mode\tMode for adding additional elements.",
1924 additionalButton->create();
1926 crossingButton =
new MFXCheckableButton(
false, myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modes,
"\tset crossing mode\tMode for creating crossings between edges.",
1928 crossingButton->create();
1930 TAZButton =
new MFXCheckableButton(
false, myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modes,
"\tset TAZ mode\tMode for creating Traffic Assignment Zones.",
1932 TAZButton->create();
1934 shapeButton =
new MFXCheckableButton(
false, myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modes,
"\tset polygon mode\tMode for creating polygons and POIs.",
1936 shapeButton->create();
1938 myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modes->recalc();
1944 createEdgeButton->show();
1945 connectionButton->show();
1946 trafficLightButton->show();
1947 additionalButton->show();
1948 crossingButton->show();
1950 shapeButton->show();
1951 prohibitionButton->show();
1957 createEdgeButton->hide();
1958 connectionButton->hide();
1959 trafficLightButton->hide();
1960 additionalButton->hide();
1961 crossingButton->hide();
1963 shapeButton->hide();
1964 prohibitionButton->hide();
1970 createEdgeButton->setChecked(
false);
1971 connectionButton->setChecked(
false);
1972 trafficLightButton->setChecked(
false);
1973 additionalButton->setChecked(
false);
1974 crossingButton->setChecked(
false);
1975 TAZButton->setChecked(
false);
1976 shapeButton->setChecked(
false);
1977 prohibitionButton->setChecked(
false);
1983 createEdgeButton->update();
1984 connectionButton->update();
1985 trafficLightButton->update();
1986 additionalButton->update();
1987 crossingButton->update();
1988 TAZButton->update();
1989 shapeButton->update();
1990 prohibitionButton->update();
1998 routeButton(nullptr),
1999 vehicleButton(nullptr),
2000 vehicleTypeButton(nullptr),
2001 stopButton(nullptr),
2002 personTypeButton(nullptr),
2003 personButton(nullptr),
2004 personPlanButton(nullptr),
2005 myViewNet(viewNet) {
2012 routeButton =
new MFXCheckableButton(
false, myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modes,
"\tcreate route mode\tMode for creating routes.",
2014 routeButton->create();
2016 vehicleButton =
new MFXCheckableButton(
false, myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modes,
"\tcreate vehicle mode\tMode for creating vehicles.",
2018 vehicleButton->create();
2020 vehicleTypeButton =
new MFXCheckableButton(
false, myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modes,
"\tcreate vehicle type mode\tMode for creating vehicle types.",
2022 vehicleTypeButton->create();
2024 stopButton =
new MFXCheckableButton(
false, myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modes,
"\tcreate stop mode\tMode for creating stops.",
2026 stopButton->create();
2028 personTypeButton =
new MFXCheckableButton(
false, myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modes,
"\tcreate person type mode\tMode for creating person types.",
2030 personTypeButton->create();
2032 personButton =
new MFXCheckableButton(
false, myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modes,
"\tcreate person mode\tMode for creating persons.",
2034 personButton->create();
2036 personPlanButton =
new MFXCheckableButton(
false, myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modes,
"\tcreate person plan mode\tMode for creating person plans.",
2038 personPlanButton->create();
2040 myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modes->recalc();
2046 routeButton->show();
2047 vehicleButton->show();
2048 vehicleTypeButton->show();
2050 personTypeButton->show();
2051 personButton->show();
2052 personPlanButton->show();
2058 routeButton->hide();
2059 vehicleButton->hide();
2060 vehicleTypeButton->hide();
2062 personTypeButton->hide();
2063 personButton->hide();
2064 personPlanButton->hide();
2070 routeButton->setChecked(
false);
2071 vehicleButton->setChecked(
false);
2072 vehicleTypeButton->setChecked(
false);
2073 stopButton->setChecked(
false);
2074 personTypeButton->setChecked(
false);
2075 personButton->setChecked(
false);
2076 personPlanButton->setChecked(
false);
2082 routeButton->update();
2083 vehicleButton->update();
2084 vehicleTypeButton->update();
2085 stopButton->update();
2086 personTypeButton->update();
2087 personButton->update();
2088 personPlanButton->update();
2096 editedShapePoly(nullptr),
2097 editingNetElementShapes(false),
2098 myViewNet(viewNet) {
2104 if ((editedShapePoly ==
nullptr) && (element !=
nullptr) && (shape.size() > 1)) {
2106 myPreviousNetworkEditMode = myViewNet->myEditModes.networkEditMode;
2108 editingNetElementShapes =
true;
2110 editingNetElementShapes =
false;
2115 RGBColor col = myViewNet->getVisualisationSettings()->junctionColorer.getSchemes()[0].getColor(3);
2116 editedShapePoly = myViewNet->myNet->addPolygonForEditShapes(element, shape, fill, col);
2118 myViewNet->update();
2126 if (editedShapePoly !=
nullptr) {
2127 myViewNet->myNet->removePolygonForEditShapes(editedShapePoly);
2128 editedShapePoly =
nullptr;
2130 if (myViewNet->myEditModes.networkEditMode != myPreviousNetworkEditMode) {
2131 myViewNet->myEditModes.setNetworkEditMode(myPreviousNetworkEditMode);
2140 if (editedShapePoly !=
nullptr) {
2141 myViewNet->myUndoList->p_begin(
"custom " + editedShapePoly->getShapeEditedElement()->getTagStr() +
" shape");
2143 if (editedShapePoly->getShapeEditedElement()->getTagProperty().hasAttribute(
SUMO_ATTR_CUSTOMSHAPE)) {
2146 editedShapePoly->getShapeEditedElement()->setAttribute(attr,
toString(editedShapePoly->getShape()), myViewNet->myUndoList);
2147 myViewNet->myUndoList->p_end();
2148 stopEditCustomShape();
2149 myViewNet->update();