61 myAttributeCarriers.clear();
62 myNetElements.clear();
63 myAdditionals.clear();
65 myDemandElements.clear();
70 myConnections.clear();
75 sortGUIGlObjectsByAltitude(GUIGlObjects);
77 for (
const auto& i : myGUIGlObjects) {
81 myAttributeCarriers.push_back(dynamic_cast<GNEAttributeCarrier*>(i));
83 if (myAttributeCarriers.back()) {
85 if (editedPolyShape !=
nullptr) {
86 if (myAttributeCarriers.back() == editedPolyShape) {
88 myPolys.push_back(dynamic_cast<GNEPoly*>(myAttributeCarriers.back()));
92 const auto& tagValue = myAttributeCarriers.back()->getTagProperty();
94 if (tagValue.isNetElement()) {
96 myNetElements.push_back(dynamic_cast<GNENetElement*>(myAttributeCarriers.back()));
97 }
else if (tagValue.isDemandElement()) {
99 myDemandElements.push_back(dynamic_cast<GNEDemandElement*>(myAttributeCarriers.back()));
100 }
else if (tagValue.isAdditional()) {
102 myAdditionals.push_back(dynamic_cast<GNEAdditional*>(myAttributeCarriers.back()));
103 }
else if (tagValue.isShape()) {
105 myShapes.push_back(dynamic_cast<GNEShape*>(myAttributeCarriers.back()));
106 }
else if (tagValue.isTAZ()) {
108 myTAZs.push_back(dynamic_cast<GNETAZ*>(myAttributeCarriers.back()));
111 switch (i->getType()) {
113 myJunctions.push_back(dynamic_cast<GNEJunction*>(myAttributeCarriers.back()));
117 GNEEdge* edge = dynamic_cast<GNEEdge*>(myAttributeCarriers.back());
119 if (std::find(myEdges.begin(), myEdges.end(), edge) == myEdges.end()) {
120 myEdges.push_back(edge);
125 myLanes.push_back(dynamic_cast<GNELane*>(myAttributeCarriers.back()));
127 if (std::find(myEdges.begin(), myEdges.end(), &myLanes.back()->getParentEdge()) == myEdges.end()) {
128 myEdges.push_back(&myLanes.back()->getParentEdge());
133 myCrossings.push_back(dynamic_cast<GNECrossing*>(myAttributeCarriers.back()));
136 myConnections.push_back(dynamic_cast<GNEConnection*>(myAttributeCarriers.back()));
139 myPOIs.push_back(dynamic_cast<GNEPOI*>(myAttributeCarriers.back()));
142 myPolys.push_back(dynamic_cast<GNEPoly*>(myAttributeCarriers.back()));
149 myAttributeCarriers.pop_back();
155 ", AttributeCarriers: " +
toString(myAttributeCarriers.size()) +
156 ", NetElements: " +
toString(myNetElements.size()) +
157 ", Additionals: " +
toString(myAdditionals.size()) +
158 ", DemandElements: " +
toString(myDemandElements.size()) +
159 ", Shapes: " +
toString(myShapes.size()) +
160 ", Junctions: " +
toString(myJunctions.size()) +
161 ", Edges: " +
toString(myEdges.size()) +
162 ", Lanes: " +
toString(myLanes.size()) +
163 ", Crossings: " +
toString(myCrossings.size()) +
164 ", Connections: " +
toString(myConnections.size()) +
165 ", TAZs: " +
toString(myTAZs.size()) +
166 ", POIs: " +
toString(myPOIs.size()) +
167 ", Polys: " +
toString(myPolys.size()));
174 myGUIGlObjects.clear();
175 myAttributeCarriers.clear();
176 myNetElements.clear();
178 for (
const auto& i : myEdges) {
179 myGUIGlObjects.push_back(i);
180 myAttributeCarriers.push_back(i);
181 myNetElements.push_back(i);
184 WRITE_DEBUG(
"ObjectsUnderCursor: swapped Lanes to edges")
190 if (myJunctions.size() > 0) {
191 myJunctions.front() = junction;
193 myJunctions.push_back(junction);
200 if (myGUIGlObjects.size() > 0) {
201 return myGUIGlObjects.front()->getGlID();
210 if (myGUIGlObjects.size() > 0) {
211 return myGUIGlObjects.front()->getType();
220 if (myAttributeCarriers.size() > 0) {
221 return myAttributeCarriers.front();
230 if (myNetElements.size() > 0) {
231 return myNetElements.front();
240 if (myAdditionals.size() > 0) {
241 return myAdditionals.front();
250 if (myShapes.size() > 0) {
251 return myShapes.front();
260 if (myDemandElements.size() > 0) {
261 return myDemandElements.front();
270 if (myJunctions.size() > 0) {
271 return myJunctions.front();
280 if (myEdges.size() > 0) {
281 return myEdges.front();
290 if (myLanes.size() > 0) {
291 return myLanes.front();
300 if (myCrossings.size() > 0) {
301 return myCrossings.front();
310 if (myConnections.size() > 0) {
311 return myConnections.front();
320 if (myTAZs.size() > 0) {
321 return myTAZs.front();
330 if (myPOIs.size() > 0) {
331 return myPOIs.front();
340 if (myPolys.size() > 0) {
341 return myPolys.front();
348 const std::vector<GNEAttributeCarrier*>&
350 return myAttributeCarriers;
357 myGUIGlObjects.clear();
359 std::map<GUIGlObjectType, std::vector<GUIGlObject*> > mySortedGUIGlObjects;
360 for (
const auto& i : GUIGlObjects) {
361 mySortedGUIGlObjects[i->getType()].push_back(i);
364 for (std::map<
GUIGlObjectType, std::vector<GUIGlObject*> >::reverse_iterator i = mySortedGUIGlObjects.rbegin(); i != mySortedGUIGlObjects.rend(); i++) {
365 for (
const auto& j : i->second) {
366 myGUIGlObjects.push_back(j);
376 myEventInfo(nullptr) {
382 myEventInfo = (FXEvent*) eventData;
389 return (myEventInfo->state & SHIFTMASK) != 0;
399 return (myEventInfo->state & CONTROLMASK) != 0;
410 movingIndexShape(-1),
412 myMovingStartPos(false),
413 myMovingEndPos(false),
414 myJunctionToMove(nullptr),
415 myEdgeToMove(nullptr),
416 myPolyToMove(nullptr),
417 myPOIToMove(nullptr),
418 myAdditionalToMove(nullptr),
419 myDemandElementToMove(nullptr),
420 myTAZToMove(nullptr) {
427 myRelativeClickedPosition = myViewNet->getPositionInformation();
429 if (myViewNet->myObjectsUnderCursor.getPolyFront()) {
431 return calculatePolyValues();
432 }
else if (myViewNet->myObjectsUnderCursor.getPOIFront()) {
434 myPOIToMove = myViewNet->myObjectsUnderCursor.getPOIFront();
436 originalPositionInView = myPOIToMove->getPositionInView();
439 }
else if (myViewNet->myObjectsUnderCursor.getAdditionalFront()) {
441 myAdditionalToMove = myViewNet->myObjectsUnderCursor.getAdditionalFront();
443 originalPositionInView = myAdditionalToMove->getPositionInView();
445 myAdditionalToMove->startGeometryMoving();
448 }
else if (myViewNet->myObjectsUnderCursor.getTAZFront()) {
450 return calculateTAZValues();
451 }
else if (myViewNet->myObjectsUnderCursor.getJunctionFront()) {
453 myJunctionToMove = myViewNet->myObjectsUnderCursor.getJunctionFront();
455 originalPositionInView = myJunctionToMove->getPositionInView();
457 myJunctionToMove->startGeometryMoving();
460 }
else if (myViewNet->myObjectsUnderCursor.getEdgeFront() || myViewNet->myObjectsUnderCursor.getLaneFront()) {
462 return calculateEdgeValues();
473 myRelativeClickedPosition = myViewNet->getPositionInformation();
475 if (myViewNet->myObjectsUnderCursor.getDemandElementFront()) {
477 myDemandElementToMove = myViewNet->myObjectsUnderCursor.getDemandElementFront();
479 originalPositionInView = myDemandElementToMove->getPositionInView();
481 myDemandElementToMove->startGeometryMoving();
495 Position offsetMovement = myViewNet->getPositionInformation() - myViewNet->myMoveSingleElementValues.myRelativeClickedPosition;
497 if (myViewNet->myNetworkViewOptions.menuCheckMoveElevation->shown() && myViewNet->myNetworkViewOptions.menuCheckMoveElevation->getCheck() == TRUE) {
499 offsetMovement =
Position(0, 0, offsetMovement.
y());
502 offsetMovement.
setz(0);
507 if (myPolyToMove->isPolygonBlocked()) {
509 myPolyToMove->moveEntireShape(originalShapeBeforeMoving, offsetMovement);
512 movingIndexShape = myPolyToMove->moveVertexShape(movingIndexShape, originalPositionInView, offsetMovement);
514 }
else if (myPOIToMove) {
516 myPOIToMove->moveGeometry(originalPositionInView, offsetMovement);
517 }
else if (myJunctionToMove) {
519 myJunctionToMove->moveGeometry(originalPositionInView, offsetMovement);
520 }
else if (myEdgeToMove) {
522 if (myMovingStartPos) {
523 myEdgeToMove->moveShapeStart(originalPositionInView, offsetMovement);
524 }
else if (myMovingEndPos) {
525 myEdgeToMove->moveShapeEnd(originalPositionInView, offsetMovement);
528 movingIndexShape = myEdgeToMove->moveVertexShape(movingIndexShape, originalPositionInView, offsetMovement);
530 }
else if (myAdditionalToMove && (myAdditionalToMove->isAdditionalBlocked() ==
false)) {
532 myAdditionalToMove->moveGeometry(offsetMovement);
533 }
else if (myDemandElementToMove) {
535 myDemandElementToMove->moveGeometry(offsetMovement);
536 }
else if (myTAZToMove) {
538 if (myTAZToMove->isShapeBlocked()) {
540 myTAZToMove->moveEntireShape(originalShapeBeforeMoving, offsetMovement);
543 movingIndexShape = myTAZToMove->moveVertexShape(movingIndexShape, originalPositionInView, offsetMovement);
554 myPolyToMove->commitShapeChange(originalShapeBeforeMoving, myViewNet->getUndoList());
555 myPolyToMove =
nullptr;
556 }
else if (myPOIToMove) {
557 myPOIToMove->commitGeometryMoving(originalPositionInView, myViewNet->getUndoList());
558 myPOIToMove =
nullptr;
559 }
else if (myJunctionToMove) {
561 if (!myViewNet->mergeJunctions(myJunctionToMove, originalPositionInView)) {
562 myJunctionToMove->commitGeometryMoving(originalPositionInView, myViewNet->getUndoList());
564 myJunctionToMove =
nullptr;
565 }
else if (myEdgeToMove) {
567 if (myMovingStartPos) {
568 myEdgeToMove->commitShapeStartChange(originalPositionInView, myViewNet->getUndoList());
569 myMovingStartPos =
false;
570 }
else if (myMovingEndPos) {
571 myEdgeToMove->commitShapeEndChange(originalPositionInView, myViewNet->getUndoList());
572 myMovingEndPos =
false;
574 myEdgeToMove->commitShapeChange(originalShapeBeforeMoving, myViewNet->getUndoList());
576 myEdgeToMove =
nullptr;
577 }
else if (myAdditionalToMove) {
578 myAdditionalToMove->commitGeometryMoving(myViewNet->getUndoList());
579 myAdditionalToMove->endGeometryMoving();
580 myAdditionalToMove =
nullptr;
581 }
else if (myDemandElementToMove) {
582 myDemandElementToMove->commitGeometryMoving(myViewNet->getUndoList());
583 myDemandElementToMove->endGeometryMoving();
584 myDemandElementToMove =
nullptr;
585 }
else if (myTAZToMove) {
586 myTAZToMove->commitShapeChange(originalShapeBeforeMoving, myViewNet->getUndoList());
587 myTAZToMove =
nullptr;
595 myPolyToMove = myViewNet->myObjectsUnderCursor.getPolyFront();
597 if (myViewNet->myNetworkViewOptions.menuCheckMoveElevation->shown() && myViewNet->myNetworkViewOptions.menuCheckMoveElevation->getCheck() == TRUE) {
599 int existentIndex = myPolyToMove->getVertexIndex(myViewNet->getPositionInformation(),
false,
false);
600 if (existentIndex != -1) {
602 myViewNet->myMoveSingleElementValues.originalShapeBeforeMoving = myPolyToMove->getShape();
604 myViewNet->myMoveSingleElementValues.movingIndexShape = existentIndex;
605 myViewNet->myMoveSingleElementValues.originalPositionInView = myPolyToMove->getShape()[existentIndex];
610 myPolyToMove =
nullptr;
616 myViewNet->myMoveSingleElementValues.originalShapeBeforeMoving = myPolyToMove->getShape();
618 myViewNet->myMoveSingleElementValues.originalPositionInView = myViewNet->getPositionInformation();
620 if ((myPolyToMove->isPolygonBlocked() ==
false) && (myPolyToMove->isMovementBlocked() ==
false)) {
622 if (myViewNet->myKeyPressed.shiftKeyPressed()) {
624 myViewNet->myMoveSingleElementValues.movingIndexShape = myPolyToMove->getVertexIndex(myViewNet->myMoveSingleElementValues.originalPositionInView,
false,
false);
625 if (myViewNet->myMoveSingleElementValues.movingIndexShape != -1) {
626 myPolyToMove->deleteGeometryPoint(myViewNet->myMoveSingleElementValues.originalPositionInView);
628 myPolyToMove =
nullptr;
636 myViewNet->myMoveSingleElementValues.movingIndexShape = myPolyToMove->getVertexIndex(myViewNet->myMoveSingleElementValues.originalPositionInView,
false,
false);
637 if (myViewNet->myMoveSingleElementValues.movingIndexShape == -1) {
639 myViewNet->myMoveSingleElementValues.movingIndexShape = myPolyToMove->getVertexIndex(myViewNet->myMoveSingleElementValues.originalPositionInView,
true,
true);
645 myViewNet->myMoveSingleElementValues.movingIndexShape = -1;
655 if (myViewNet->myKeyPressed.shiftKeyPressed()) {
657 myViewNet->myObjectsUnderCursor.getEdgeFront()->editEndpoint(myViewNet->getPositionInformation(), myViewNet->myUndoList);
662 myEdgeToMove = myViewNet->myObjectsUnderCursor.getEdgeFront();
664 if (myEdgeToMove->clickedOverShapeStart(myViewNet->getPositionInformation())) {
666 myViewNet->myMoveSingleElementValues.originalPositionInView = myEdgeToMove->getNBEdge()->getGeometry().front();
667 myViewNet->myMoveSingleElementValues.myMovingStartPos =
true;
669 myEdgeToMove->startGeometryMoving();
672 }
else if (myEdgeToMove->clickedOverShapeEnd(myViewNet->getPositionInformation())) {
674 myViewNet->myMoveSingleElementValues.originalPositionInView = myEdgeToMove->getNBEdge()->getGeometry().back();
675 myViewNet->myMoveSingleElementValues.myMovingEndPos =
true;
677 myEdgeToMove->startGeometryMoving();
682 if (myViewNet->myNetworkViewOptions.menuCheckMoveElevation->shown() && myViewNet->myNetworkViewOptions.menuCheckMoveElevation->getCheck() == TRUE) {
684 int existentIndex = myEdgeToMove->getVertexIndex(myViewNet->getPositionInformation(),
false,
false);
685 if (existentIndex != -1) {
686 myViewNet->myMoveSingleElementValues.movingIndexShape = existentIndex;
687 myViewNet->myMoveSingleElementValues.originalPositionInView = myEdgeToMove->getNBEdge()->getInnerGeometry()[existentIndex];
689 myEdgeToMove->startGeometryMoving();
694 myEdgeToMove =
nullptr;
700 myViewNet->myMoveSingleElementValues.originalShapeBeforeMoving = myEdgeToMove->getNBEdge()->getInnerGeometry();
702 myViewNet->myMoveSingleElementValues.movingIndexShape = myEdgeToMove->getVertexIndex(myViewNet->getPositionInformation(),
false,
false);
704 if (myViewNet->myMoveSingleElementValues.movingIndexShape == -1) {
705 myViewNet->myMoveSingleElementValues.movingIndexShape = myEdgeToMove->getVertexIndex(myViewNet->getPositionInformation(),
true,
true);
708 if (myViewNet->myMoveSingleElementValues.movingIndexShape != -1) {
709 myViewNet->myMoveSingleElementValues.originalPositionInView = myEdgeToMove->getNBEdge()->getInnerGeometry()[myViewNet->myMoveSingleElementValues.movingIndexShape];
711 myEdgeToMove->startGeometryMoving();
727 myTAZToMove = myViewNet->myObjectsUnderCursor.getTAZFront();
729 myViewNet->myMoveSingleElementValues.originalShapeBeforeMoving = myTAZToMove->getShape();
731 myViewNet->myMoveSingleElementValues.originalPositionInView = myViewNet->getPositionInformation();
733 if ((myTAZToMove->isShapeBlocked() ==
false) && (myTAZToMove->isAdditionalBlocked() ==
false)) {
735 if (myViewNet->myKeyPressed.shiftKeyPressed()) {
737 myViewNet->myMoveSingleElementValues.movingIndexShape = myTAZToMove->getVertexIndex(myViewNet->myMoveSingleElementValues.originalPositionInView,
false,
false);
738 if (myViewNet->myMoveSingleElementValues.movingIndexShape != -1) {
739 myTAZToMove->deleteGeometryPoint(myViewNet->myMoveSingleElementValues.originalPositionInView);
741 myTAZToMove =
nullptr;
749 myViewNet->myMoveSingleElementValues.movingIndexShape = myTAZToMove->getVertexIndex(myViewNet->myMoveSingleElementValues.originalPositionInView,
false,
false);
750 if (myViewNet->myMoveSingleElementValues.movingIndexShape == -1) {
752 myViewNet->myMoveSingleElementValues.movingIndexShape = myTAZToMove->getVertexIndex(myViewNet->myMoveSingleElementValues.originalPositionInView,
true,
true);
759 myViewNet->myMoveSingleElementValues.movingIndexShape = -1;
771 myMovingSelection(false) {
778 myMovingSelection =
true;
780 myClickedPosition = myViewNet->getPositionInformation();
782 std::vector<GNEJunction*> selectedJunctions = myViewNet->getNet()->retrieveJunctions(
true);
783 std::vector<GNEEdge*> selectedEdges = myViewNet->getNet()->retrieveEdges(
true);
785 for (
auto i : selectedJunctions) {
787 myMovedJunctionOriginPositions[i] = i->getPositionInView();
789 i->startGeometryMoving();
794 for (
auto i : selectedEdges) {
796 myMovedEdgesOriginShape[i] = i->getNBEdge()->getInnerGeometry();
798 i->startGeometryMoving();
802 GNEEdge* clickedEdge = dynamic_cast<GNEEdge*>(originAC);
806 for (
auto i : selectedEdges) {
808 myMovedEdgesOriginShape[i] = i->getNBEdge()->getInnerGeometry();
810 i->startGeometryMoving();
814 std::vector<GNEEdge*> noJunctionsSelected;
815 std::vector<GNEEdge*> originJunctionSelected;
816 std::vector<GNEEdge*> destinyJunctionSelected;
818 for (
auto i : selectedEdges) {
819 bool originSelected = myMovedJunctionOriginPositions.count(i->getGNEJunctionSource()) > 0;
820 bool destinySelected = myMovedJunctionOriginPositions.count(i->getGNEJunctionDestiny()) > 0;
822 if (!originSelected && !destinySelected) {
823 noJunctionsSelected.push_back(i);
824 }
else if (originSelected && !destinySelected) {
825 originJunctionSelected.push_back(i);
826 }
else if (!originSelected && destinySelected) {
827 destinyJunctionSelected.push_back(i);
828 }
else if (!originSelected && !destinySelected) {
830 myMovedEdgesOriginShape[i] = i->getNBEdge()->getInnerGeometry();
832 i->startGeometryMoving();
836 for (
auto i : noJunctionsSelected) {
839 myMovedEgdesGeometryPoints[i]->originalShapeBeforeMoving = i->getNBEdge()->getInnerGeometry();
841 i->startGeometryMoving();
844 int index = clickedEdge->
getVertexIndex(myViewNet->getPositionInformation(),
true,
true);
848 for (
auto i : myMovedJunctionOriginPositions) {
849 i.first->endGeometryMoving();
852 for (
auto i : myMovedEdgesOriginShape) {
853 i.first->endGeometryMoving();
856 for (
auto i : myMovedEgdesGeometryPoints) {
857 i.first->endGeometryMoving();
860 myMovingSelection =
false;
862 myMovedJunctionOriginPositions.clear();
863 myMovedEdgesOriginShape.clear();
865 for (
const auto& i : myMovedEgdesGeometryPoints) {
868 myMovedEgdesGeometryPoints.clear();
872 myMovedEgdesGeometryPoints[clickedEdge]->movingIndexShape = index;
873 myMovedEgdesGeometryPoints[clickedEdge]->originalPositionInView = myViewNet->getPositionInformation();
877 for (
auto i : noJunctionsSelected) {
878 if (i != clickedEdge) {
881 myMovedEgdesGeometryPoints[i]->movingIndexShape = i->getVertexIndex(myViewNet->getPositionInformation(),
true,
true);
883 if (i->getOppositeEdge() == clickedEdge) {
884 myMovedEgdesGeometryPoints[i]->originalPositionInView = myViewNet->getPositionInformation();
886 myMovedEgdesGeometryPoints[i]->originalPositionInView = i->getNBEdge()->getInnerGeometry()[myMovedEgdesGeometryPoints[i]->movingIndexShape];
889 i->startGeometryMoving();
901 Position offsetMovement = myViewNet->getPositionInformation() - myClickedPosition;
903 if (myViewNet->myNetworkViewOptions.menuCheckMoveElevation->shown() && myViewNet->myNetworkViewOptions.menuCheckMoveElevation->getCheck() == TRUE) {
905 offsetMovement =
Position(0, 0, offsetMovement.
y());
908 offsetMovement.
setz(0);
911 for (
auto i : myMovedJunctionOriginPositions) {
912 i.first->moveGeometry(i.second, offsetMovement);
915 for (
auto i : myMovedEdgesOriginShape) {
916 i.first->moveEntireShape(i.second, offsetMovement);
919 for (
auto i : myMovedEgdesGeometryPoints) {
920 i.first->moveVertexShape(i.second->movingIndexShape, i.second->originalPositionInView, offsetMovement);
930 myViewNet->getUndoList()->p_begin(
"position of selected elements");
932 for (
auto i : myMovedJunctionOriginPositions) {
933 i.first->commitGeometryMoving(i.second, myViewNet->getUndoList());
936 for (
auto i : myMovedEdgesOriginShape) {
937 i.first->commitShapeChange(i.second, myViewNet->getUndoList());
940 for (
auto i : myMovedEgdesGeometryPoints) {
941 i.first->commitShapeChange(i.second->originalShapeBeforeMoving, myViewNet->getUndoList());
944 myViewNet->getUndoList()->p_end();
946 myMovingSelection =
false;
948 myMovedJunctionOriginPositions.clear();
949 myMovedEdgesOriginShape.clear();
951 for (
const auto& i : myMovedEgdesGeometryPoints) {
954 myMovedEgdesGeometryPoints.clear();
960 return myMovingSelection;
1010 selectingUsingRectangle(false),
1011 startDrawing(false),
1012 myViewNet(viewNet) {
1018 selectingUsingRectangle =
true;
1019 selectionCorner1 = myViewNet->getPositionInformation();
1020 selectionCorner2 = selectionCorner1;
1027 startDrawing =
true;
1029 selectionCorner2 = myViewNet->getPositionInformation();
1031 myViewNet->setStatusBarText(
"Selection width:" +
toString(fabs(selectionCorner1.x() - selectionCorner2.x()))
1032 +
" height:" +
toString(fabs(selectionCorner1.y() - selectionCorner2.y()))
1033 +
" diagonal:" +
toString(selectionCorner1.distanceTo2D(selectionCorner2)));
1035 myViewNet->update();
1042 selectingUsingRectangle =
false;
1043 startDrawing =
false;
1050 if ((abs(selectionCorner1.x() - selectionCorner2.x()) > 0.01) &&
1051 (abs(selectionCorner1.y() - selectionCorner2.y()) > 0.01) &&
1052 myViewNet->myKeyPressed.shiftKeyPressed()) {
1055 rectangleBoundary.
add(selectionCorner1);
1056 rectangleBoundary.
add(selectionCorner2);
1058 processBoundarySelection(rectangleBoundary);
1063 std::vector<GNEEdge*>
1066 std::vector<GNEEdge*> result;
1068 if ((abs(selectionCorner1.x() - selectionCorner2.x()) > 0.01) &&
1069 (abs(selectionCorner1.y() - selectionCorner2.y()) > 0.01) &&
1070 myViewNet->myKeyPressed.shiftKeyPressed()) {
1073 rectangleBoundary.
add(selectionCorner1);
1074 rectangleBoundary.
add(selectionCorner2);
1075 if (myViewNet->makeCurrent()) {
1077 std::set<std::pair<std::string, GNEAttributeCarrier*> > ACsInBoundary = myViewNet->getAttributeCarriersInBoundary(rectangleBoundary);
1079 for (
auto i : ACsInBoundary) {
1081 result.push_back(dynamic_cast<GNEEdge*>(i.second));
1084 myViewNet->makeNonCurrent();
1099 if (selectingUsingRectangle) {
1101 glTranslated(0, 0,
GLO_MAX - 1);
1104 glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
1106 glVertex2d(selectionCorner1.x(), selectionCorner1.y());
1107 glVertex2d(selectionCorner1.x(), selectionCorner2.y());
1108 glVertex2d(selectionCorner2.x(), selectionCorner2.y());
1109 glVertex2d(selectionCorner2.x(), selectionCorner1.y());
1118 if (myViewNet->makeCurrent()) {
1119 std::set<std::pair<std::string, GNEAttributeCarrier*> > ACsInBoundary = myViewNet->getAttributeCarriersInBoundary(boundary);
1121 std::set<std::pair<std::string, GNEAttributeCarrier*> > ACsInBoundaryFiltered;
1122 for (
const auto& i : ACsInBoundary) {
1123 if (((myViewNet->myEditModes.currentSupermode ==
GNE_SUPERMODE_NETWORK) && !i.second->getTagProperty().isDemandElement()) ||
1124 ((myViewNet->myEditModes.currentSupermode ==
GNE_SUPERMODE_DEMAND) && i.second->getTagProperty().isDemandElement())) {
1125 ACsInBoundaryFiltered.insert(i);
1129 std::vector<GNEAttributeCarrier*> ACToSelect;
1130 std::vector<GNEAttributeCarrier*> ACToUnselect;
1132 ACToSelect.reserve(ACsInBoundaryFiltered.size());
1133 ACToUnselect.reserve(ACsInBoundaryFiltered.size());
1138 std::vector<GNEAttributeCarrier*> selectedAC = myViewNet->getNet()->getSelectedAttributeCarriers(
false);
1140 for (
auto i : selectedAC) {
1141 ACToUnselect.push_back(i);
1145 for (
auto i : ACsInBoundaryFiltered) {
1146 switch (myViewNet->myViewParent->getSelectorFrame()->getModificationModeModul()->getModificationMode()) {
1148 ACToUnselect.push_back(i.second);
1151 if (std::find(ACToUnselect.begin(), ACToUnselect.end(), i.second) != ACToUnselect.end()) {
1152 ACToSelect.push_back(i.second);
1156 ACToSelect.push_back(i.second);
1162 std::vector<GNEEdge*> edgesToSelect;
1164 for (
auto i : ACToSelect) {
1166 edgesToSelect.push_back(dynamic_cast<GNEEdge*>(i));
1170 for (
auto i : edgesToSelect) {
1172 ACToSelect.push_back(i->getGNEJunctionSource());
1173 for (
auto j : i->getGNEJunctionSource()->getGNEConnections()) {
1174 ACToSelect.push_back(j);
1176 for (
auto j : i->getGNEJunctionSource()->getGNECrossings()) {
1177 ACToSelect.push_back(j);
1180 ACToSelect.push_back(i->getGNEJunctionDestiny());
1181 for (
auto j : i->getGNEJunctionDestiny()->getGNEConnections()) {
1182 ACToSelect.push_back(j);
1184 for (
auto j : i->getGNEJunctionDestiny()->getGNECrossings()) {
1185 ACToSelect.push_back(j);
1190 if ((ACToSelect.size() + ACToUnselect.size()) > 0) {
1192 myViewNet->myUndoList->p_begin(
"selection using rectangle");
1193 for (
auto i : ACToUnselect) {
1196 for (
auto i : ACToSelect) {
1197 if (i->getTagProperty().isSelectable()) {
1201 myViewNet->myUndoList->p_end();
1203 myViewNet->makeNonCurrent();
1213 myTestingEnabled(
OptionsCont::getOptions().getBool(
"gui-testing")),
1215 myTestingHeight(0) {
1225 if ((windowSize.size() == 2) && GNEAttributeCarrier::canParse<int>(windowSize[0]) && GNEAttributeCarrier::canParse<int>(windowSize[1])) {
1226 myTestingWidth = GNEAttributeCarrier::parse<int>(windowSize[0]);
1227 myTestingHeight = GNEAttributeCarrier::parse<int>(windowSize[1]);
1229 WRITE_ERROR(
"Invalid windows size-format: " +
toString(windowSize) +
"for option 'window-size'");
1238 if (myTestingEnabled) {
1240 if (myTestingWidth > 0 && ((myViewNet->getWidth() != myTestingWidth) || (myViewNet->getHeight() != myTestingHeight))) {
1243 mainWindow->resize(myTestingWidth + myTestingWidth - myViewNet->getWidth(), myTestingHeight + myTestingHeight - myViewNet->getHeight());
1250 const double size = myViewNet->p2m(32);
1251 Position center = myViewNet->screenPos2NetPos(8, 8);
1253 glTranslated(center.
x(), center.
y(),
GLO_MAX - 1);
1254 glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
1257 glVertex2d(0, -size);
1258 glVertex2d(size, -size);
1259 glVertex2d(size, 0);
1264 Position posRelative = myViewNet->screenPos2NetPos(myViewNet->getWidth() - 40, myViewNet->getHeight() - 20);
1279 networkButton(nullptr),
1280 demandButton(nullptr),
1281 myViewNet(viewNet) {
1288 networkButton =
new MFXCheckableButton(
false, myViewNet->getViewParent()->getGNEAppWindows()->getToolbarsGrip().superModes,
"Network\t\tSet mode for edit network elements.",
1290 networkButton->create();
1292 demandButton =
new MFXCheckableButton(
false, myViewNet->getViewParent()->getGNEAppWindows()->getToolbarsGrip().superModes,
"Demand\t\tSet mode for edit traffic demand.",
1294 demandButton->create();
1297 myViewNet->getViewParent()->getGNEAppWindows()->getToolbarsGrip().modes->recalc();
1299 myViewNet->getViewParent()->getGNEAppWindows()->getToolbarsGrip().modes->show();
1305 if (supermode == currentSupermode) {
1306 myViewNet->setStatusBarText(
"Mode already selected");
1307 if (myViewNet->myCurrentFrame !=
nullptr) {
1308 myViewNet->myCurrentFrame->focusUpperElement();
1311 myViewNet->setStatusBarText(
"");
1313 myViewNet->abortOperation(
false);
1315 currentSupermode = supermode;
1319 networkButton->setChecked(
true);
1320 demandButton->setChecked(
false);
1322 myViewNet->myNetworkCheckableButtons.showNetworkCheckableButtons();
1324 myViewNet->myDemandCheckableButtons.hideDemandCheckableButtons();
1326 setNetworkEditMode(networkEditMode,
true);
1329 networkButton->setChecked(
false);
1330 demandButton->setChecked(
true);
1332 myViewNet->myNetworkCheckableButtons.hideNetworkCheckableButtons();
1334 myViewNet->myDemandCheckableButtons.showDemandCheckableButtons();
1336 setDemandEditMode(demandEditMode,
true);
1339 networkButton->update();
1340 demandButton->update();
1342 myViewNet->myViewParent->getGNEAppWindows()->updateSuperModeMenuCommands(currentSupermode);
1349 if ((mode == networkEditMode) && !force) {
1350 myViewNet->setStatusBarText(
"Network mode already selected");
1351 if (myViewNet->myCurrentFrame !=
nullptr) {
1352 myViewNet->myCurrentFrame->focusUpperElement();
1354 }
else if (networkEditMode ==
GNE_NMODE_TLS && !myViewNet->myViewParent->getTLSEditorFrame()->isTLSSaved()) {
1355 myViewNet->setStatusBarText(
"save modifications in TLS before change mode");
1356 myViewNet->myCurrentFrame->focusUpperElement();
1358 myViewNet->setStatusBarText(
"");
1359 myViewNet->abortOperation(
false);
1361 myViewNet->myEditShapes.stopEditCustomShape();
1363 networkEditMode = mode;
1380 myViewNet->myNet->computeNetwork(myViewNet->myViewParent->getGNEAppWindows());
1386 myViewNet->updateNetworkModeSpecificControls();
1393 if ((mode == demandEditMode) && !force) {
1394 myViewNet->setStatusBarText(
"Demand mode already selected");
1395 if (myViewNet->myCurrentFrame !=
nullptr) {
1396 myViewNet->myCurrentFrame->focusUpperElement();
1399 myViewNet->setStatusBarText(
"");
1400 myViewNet->abortOperation(
false);
1402 myViewNet->myEditShapes.stopEditCustomShape();
1404 demandEditMode = mode;
1416 myViewNet->myNet->computeNetwork(myViewNet->myViewParent->getGNEAppWindows());
1422 myViewNet->updateDemandModeSpecificControls();
1432 menuCheckShowGrid(nullptr),
1433 myViewNet(viewNet) {
1440 menuCheckShowGrid =
new FXMenuCheck(myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modeOptions,
1441 (
"Grid\t\tshow grid and restrict movement to the grid (size defined in visualization options)"),
1443 menuCheckShowGrid->setHeight(23);
1444 menuCheckShowGrid->setCheck(
false);
1445 menuCheckShowGrid->create();
1452 menuCheckShowGrid->hide();
1459 if (menuCheckShowGrid->shown()) {
1460 commands.push_back(menuCheckShowGrid);
1469 myViewNet(viewNet) {
1475 menuCheckShowDemandElements =
new FXMenuCheck(myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modeOptions,
1476 (
"Show demand elements\t\tToggle show demand elements"),
1478 menuCheckShowDemandElements->setHeight(23);
1479 menuCheckShowDemandElements->setCheck(
false);
1480 menuCheckShowDemandElements->create();
1482 menuCheckSelectEdges =
new FXMenuCheck(myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modeOptions,
1485 menuCheckSelectEdges->setHeight(23);
1486 menuCheckSelectEdges->setCheck(
true);
1487 menuCheckSelectEdges->create();
1489 menuCheckShowConnections =
new FXMenuCheck(myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modeOptions,
1492 menuCheckShowConnections->setHeight(23);
1493 menuCheckShowConnections->setCheck(myViewNet->getVisualisationSettings()->showLane2Lane);
1494 menuCheckShowConnections->create();
1496 menuCheckHideConnections =
new FXMenuCheck(myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modeOptions,
1499 menuCheckHideConnections->setHeight(23);
1500 menuCheckHideConnections->setCheck(
false);
1501 menuCheckHideConnections->create();
1503 menuCheckExtendSelection =
new FXMenuCheck(myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modeOptions,
1506 menuCheckExtendSelection->setHeight(23);
1507 menuCheckExtendSelection->setCheck(
false);
1508 menuCheckExtendSelection->create();
1510 menuCheckChangeAllPhases =
new FXMenuCheck(myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modeOptions,
1511 (
"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(),
1513 menuCheckChangeAllPhases->setHeight(23);
1514 menuCheckChangeAllPhases->setCheck(
false);
1515 menuCheckChangeAllPhases->create();
1517 menuCheckWarnAboutMerge =
new FXMenuCheck(myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modeOptions,
1520 menuCheckWarnAboutMerge->setHeight(23);
1521 menuCheckWarnAboutMerge->setCheck(
true);
1522 menuCheckWarnAboutMerge->create();
1524 menuCheckShowJunctionBubble =
new FXMenuCheck(myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modeOptions,
1527 menuCheckShowJunctionBubble->setHeight(23);
1528 menuCheckShowJunctionBubble->setCheck(
false);
1529 menuCheckShowJunctionBubble->create();
1531 menuCheckMoveElevation =
new FXMenuCheck(myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modeOptions,
1532 (
"Elevation\t\tApply mouse movement to elevation instead of x,y position"),
1534 menuCheckMoveElevation->setHeight(23);
1535 menuCheckMoveElevation->setCheck(
false);
1536 menuCheckMoveElevation->create();
1538 menuCheckChainEdges =
new FXMenuCheck(myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modeOptions,
1539 (
"Chain\t\tCreate consecutive " +
toString(
SUMO_TAG_EDGE) +
"s with a single click (hit ESC to cancel chain).").c_str(),
1541 menuCheckChainEdges->setHeight(23);
1542 menuCheckChainEdges->setCheck(
false);
1543 menuCheckChainEdges->create();
1545 menuCheckAutoOppositeEdge =
new FXMenuCheck(myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modeOptions,
1546 (
"Two-way\t\tAutomatically create an " +
toString(
SUMO_TAG_EDGE) +
" in the opposite direction").c_str(),
1548 menuCheckAutoOppositeEdge->setHeight(23);
1549 menuCheckAutoOppositeEdge->setCheck(
false);
1550 menuCheckAutoOppositeEdge->create();
1553 myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modeOptions->recalc();
1559 menuCheckShowDemandElements->hide();
1560 menuCheckSelectEdges->hide();
1561 menuCheckShowConnections->hide();
1562 menuCheckHideConnections->hide();
1563 menuCheckExtendSelection->hide();
1564 menuCheckChangeAllPhases->hide();
1565 menuCheckWarnAboutMerge->hide();
1566 menuCheckShowJunctionBubble->hide();
1567 menuCheckMoveElevation->hide();
1568 menuCheckChainEdges->hide();
1569 menuCheckAutoOppositeEdge->hide();
1571 myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modeOptions->show();
1578 if (menuCheckShowDemandElements->shown()) {
1579 commands.push_back(menuCheckShowDemandElements);
1581 if (menuCheckSelectEdges->shown()) {
1582 commands.push_back(menuCheckSelectEdges);
1584 if (menuCheckShowConnections->shown()) {
1585 commands.push_back(menuCheckShowConnections);
1587 if (menuCheckHideConnections->shown()) {
1588 commands.push_back(menuCheckHideConnections);
1590 if (menuCheckExtendSelection->shown()) {
1591 commands.push_back(menuCheckExtendSelection);
1593 if (menuCheckChangeAllPhases->shown()) {
1594 commands.push_back(menuCheckChangeAllPhases);
1596 if (menuCheckWarnAboutMerge->shown()) {
1597 commands.push_back(menuCheckWarnAboutMerge);
1599 if (menuCheckShowJunctionBubble->shown()) {
1600 commands.push_back(menuCheckShowJunctionBubble);
1602 if (menuCheckMoveElevation->shown()) {
1603 commands.push_back(menuCheckMoveElevation);
1605 if (menuCheckChainEdges->shown()) {
1606 commands.push_back(menuCheckChainEdges);
1608 if (menuCheckAutoOppositeEdge->shown()) {
1609 commands.push_back(menuCheckAutoOppositeEdge);
1616 if (menuCheckShowDemandElements->shown()) {
1617 return (menuCheckShowDemandElements->getCheck() == TRUE);
1627 if (menuCheckSelectEdges->shown()) {
1628 return (menuCheckSelectEdges->getCheck() == TRUE);
1640 return (menuCheckHideConnections->getCheck() == FALSE);
1643 }
else if (menuCheckShowConnections->shown() ==
false) {
1646 return (myViewNet->getVisualisationSettings()->showLane2Lane);
1653 if (menuCheckMoveElevation->shown()) {
1654 return (menuCheckMoveElevation->getCheck() == TRUE);
1665 menuCheckHideShapes(nullptr),
1666 menuCheckHideNonInspectedDemandElements(nullptr),
1667 menuCheckShowAllPersonPlans(nullptr),
1668 menuCheckLockPerson(nullptr),
1670 myLockedPerson(nullptr) {
1677 menuCheckHideShapes =
new FXMenuCheck(myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modeOptions,
1678 (
"Hide shapes\t\tToggle show shapes (Polygons and POIs)"),
1680 menuCheckHideShapes->setHeight(23);
1681 menuCheckHideShapes->setCheck(
false);
1682 menuCheckHideShapes->create();
1684 menuCheckHideNonInspectedDemandElements =
new FXMenuCheck(myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modeOptions,
1685 (
"Hide non-inspected elements\t\tToggle show non-inspected demand elements"),
1687 menuCheckHideNonInspectedDemandElements->setHeight(23);
1688 menuCheckHideNonInspectedDemandElements->setCheck(
false);
1689 menuCheckHideNonInspectedDemandElements->create();
1691 menuCheckShowAllPersonPlans =
new FXMenuCheck(myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modeOptions,
1692 (
"Show all person plans\t\tshow all person plans"),
1694 menuCheckShowAllPersonPlans->setHeight(23);
1695 menuCheckShowAllPersonPlans->setCheck(
false);
1696 menuCheckShowAllPersonPlans->create();
1698 menuCheckLockPerson =
new FXMenuCheck(myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modeOptions,
1699 (
"Lock person\t\tLock selected person"),
1701 menuCheckLockPerson->setHeight(23);
1702 menuCheckLockPerson->setCheck(
false);
1703 menuCheckLockPerson->create();
1706 myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modeOptions->recalc();
1712 menuCheckHideShapes->hide();
1713 menuCheckHideNonInspectedDemandElements->hide();
1714 menuCheckShowAllPersonPlans->hide();
1715 menuCheckLockPerson->hide();
1717 myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modeOptions->show();
1724 if (menuCheckHideShapes->shown()) {
1725 commands.push_back(menuCheckHideShapes);
1727 if (menuCheckHideNonInspectedDemandElements->shown()) {
1728 commands.push_back(menuCheckHideNonInspectedDemandElements);
1730 if (menuCheckShowAllPersonPlans->shown() && menuCheckShowAllPersonPlans->isEnabled()) {
1731 commands.push_back(menuCheckShowAllPersonPlans);
1733 if (menuCheckLockPerson->shown() && menuCheckLockPerson->isEnabled()) {
1734 commands.push_back(menuCheckLockPerson);
1741 if (menuCheckHideNonInspectedDemandElements->shown()) {
1743 if ((menuCheckHideNonInspectedDemandElements->getCheck() == FALSE) || (myViewNet->getDottedAC() ==
nullptr)) {
1746 }
else if (myViewNet->getDottedAC()->getTagProperty().isDemandElement()) {
1747 if (myViewNet->getDottedAC() == demandElement) {
1753 if (i == myViewNet->getDottedAC()) {
1759 if (i == myViewNet->getDottedAC()) {
1779 if (menuCheckHideShapes->shown()) {
1780 return (menuCheckHideShapes->getCheck() == FALSE);
1789 if (menuCheckShowAllPersonPlans->shown() && menuCheckShowAllPersonPlans->isEnabled()) {
1790 return (menuCheckShowAllPersonPlans->getCheck() == TRUE);
1799 myLockedPerson = person;
1805 myLockedPerson =
nullptr;
1811 return myLockedPerson;
1819 inspectButton(nullptr),
1820 deleteButton(nullptr),
1821 selectButton(nullptr),
1822 moveButton(nullptr),
1823 myViewNet(viewNet) {
1830 inspectButton =
new MFXCheckableButton(
false, myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modes,
"\tset inspect mode\tMode for inspect elements and change their attributes.",
1832 inspectButton->create();
1834 deleteButton =
new MFXCheckableButton(
false, myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modes,
"\tset delete mode\tMode for delete elements.",
1836 deleteButton->create();
1838 selectButton =
new MFXCheckableButton(
false, myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modes,
"\tset select mode\tMode for select elements.",
1840 selectButton->create();
1842 moveButton =
new MFXCheckableButton(
false, myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modes,
"\tset move mode\tMode for move elements.",
1844 moveButton->create();
1846 myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modes->recalc();
1852 inspectButton->show();
1853 deleteButton->show();
1854 selectButton->show();
1861 inspectButton->hide();
1862 deleteButton->hide();
1863 selectButton->hide();
1870 inspectButton->setChecked(
false);
1871 deleteButton->setChecked(
false);
1872 selectButton->setChecked(
false);
1873 moveButton->setChecked(
false);
1879 inspectButton->update();
1880 deleteButton->update();
1881 selectButton->update();
1882 moveButton->update();
1890 createEdgeButton(nullptr),
1891 connectionButton(nullptr),
1892 trafficLightButton(nullptr),
1893 additionalButton(nullptr),
1894 crossingButton(nullptr),
1896 shapeButton(nullptr),
1897 prohibitionButton(nullptr),
1898 myViewNet(viewNet) {
1905 createEdgeButton =
new MFXCheckableButton(
false, myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modes,
"\tset create edge mode\tMode for creating junction and edges.",
1907 createEdgeButton->create();
1909 connectionButton =
new MFXCheckableButton(
false, myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modes,
"\tset connection mode\tMode for edit connections between lanes.",
1911 connectionButton->create();
1913 prohibitionButton =
new MFXCheckableButton(
false, myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modes,
"\tset prohibition mode\tMode for editing connection prohibitions.",
1915 prohibitionButton->create();
1917 trafficLightButton =
new MFXCheckableButton(
false, myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modes,
"\tset traffic light mode\tMode for edit traffic lights over junctions.",
1919 trafficLightButton->create();
1921 additionalButton =
new MFXCheckableButton(
false, myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modes,
"\tset additional mode\tMode for adding additional elements.",
1923 additionalButton->create();
1925 crossingButton =
new MFXCheckableButton(
false, myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modes,
"\tset crossing mode\tMode for creating crossings between edges.",
1927 crossingButton->create();
1929 TAZButton =
new MFXCheckableButton(
false, myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modes,
"\tset TAZ mode\tMode for creating Traffic Assignment Zones.",
1931 TAZButton->create();
1933 shapeButton =
new MFXCheckableButton(
false, myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modes,
"\tset polygon mode\tMode for creating polygons and POIs.",
1935 shapeButton->create();
1937 myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modes->recalc();
1943 createEdgeButton->show();
1944 connectionButton->show();
1945 trafficLightButton->show();
1946 additionalButton->show();
1947 crossingButton->show();
1949 shapeButton->show();
1950 prohibitionButton->show();
1956 createEdgeButton->hide();
1957 connectionButton->hide();
1958 trafficLightButton->hide();
1959 additionalButton->hide();
1960 crossingButton->hide();
1962 shapeButton->hide();
1963 prohibitionButton->hide();
1969 createEdgeButton->setChecked(
false);
1970 connectionButton->setChecked(
false);
1971 trafficLightButton->setChecked(
false);
1972 additionalButton->setChecked(
false);
1973 crossingButton->setChecked(
false);
1974 TAZButton->setChecked(
false);
1975 shapeButton->setChecked(
false);
1976 prohibitionButton->setChecked(
false);
1982 createEdgeButton->update();
1983 connectionButton->update();
1984 trafficLightButton->update();
1985 additionalButton->update();
1986 crossingButton->update();
1987 TAZButton->update();
1988 shapeButton->update();
1989 prohibitionButton->update();
1997 routeButton(nullptr),
1998 vehicleButton(nullptr),
1999 vehicleTypeButton(nullptr),
2000 stopButton(nullptr),
2001 personTypeButton(nullptr),
2002 personButton(nullptr),
2003 personPlanButton(nullptr),
2004 myViewNet(viewNet) {
2011 routeButton =
new MFXCheckableButton(
false, myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modes,
"\tcreate route mode\tMode for creating routes.",
2013 routeButton->create();
2015 vehicleButton =
new MFXCheckableButton(
false, myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modes,
"\tcreate vehicle mode\tMode for creating vehicles.",
2017 vehicleButton->create();
2019 vehicleTypeButton =
new MFXCheckableButton(
false, myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modes,
"\tcreate vehicle type mode\tMode for creating vehicle types.",
2021 vehicleTypeButton->create();
2023 stopButton =
new MFXCheckableButton(
false, myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modes,
"\tcreate stop mode\tMode for creating stops.",
2025 stopButton->create();
2027 personTypeButton =
new MFXCheckableButton(
false, myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modes,
"\tcreate person type mode\tMode for creating person types.",
2029 personTypeButton->create();
2031 personButton =
new MFXCheckableButton(
false, myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modes,
"\tcreate person mode\tMode for creating persons.",
2033 personButton->create();
2035 personPlanButton =
new MFXCheckableButton(
false, myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modes,
"\tcreate person plan mode\tMode for creating person plans.",
2037 personPlanButton->create();
2039 myViewNet->myViewParent->getGNEAppWindows()->getToolbarsGrip().modes->recalc();
2045 routeButton->show();
2046 vehicleButton->show();
2047 vehicleTypeButton->show();
2049 personTypeButton->show();
2050 personButton->show();
2051 personPlanButton->show();
2057 routeButton->hide();
2058 vehicleButton->hide();
2059 vehicleTypeButton->hide();
2061 personTypeButton->hide();
2062 personButton->hide();
2063 personPlanButton->hide();
2069 routeButton->setChecked(
false);
2070 vehicleButton->setChecked(
false);
2071 vehicleTypeButton->setChecked(
false);
2072 stopButton->setChecked(
false);
2073 personTypeButton->setChecked(
false);
2074 personButton->setChecked(
false);
2075 personPlanButton->setChecked(
false);
2081 routeButton->update();
2082 vehicleButton->update();
2083 vehicleTypeButton->update();
2084 stopButton->update();
2085 personTypeButton->update();
2086 personButton->update();
2087 personPlanButton->update();
2095 editedShapePoly(nullptr),
2096 editingNetElementShapes(false),
2097 myViewNet(viewNet) {
2103 if ((editedShapePoly ==
nullptr) && (element !=
nullptr) && (shape.size() > 1)) {
2105 myPreviousNetworkEditMode = myViewNet->myEditModes.networkEditMode;
2107 editingNetElementShapes =
true;
2109 editingNetElementShapes =
false;
2114 RGBColor col = myViewNet->getVisualisationSettings()->junctionColorer.getSchemes()[0].getColor(3);
2115 editedShapePoly = myViewNet->myNet->addPolygonForEditShapes(element, shape, fill, col);
2117 myViewNet->update();
2125 if (editedShapePoly !=
nullptr) {
2126 myViewNet->myNet->removePolygonForEditShapes(editedShapePoly);
2127 editedShapePoly =
nullptr;
2129 if (myViewNet->myEditModes.networkEditMode != myPreviousNetworkEditMode) {
2130 myViewNet->myEditModes.setNetworkEditMode(myPreviousNetworkEditMode);
2139 if (editedShapePoly !=
nullptr) {
2140 myViewNet->myUndoList->p_begin(
"custom " + editedShapePoly->getShapeEditedElement()->getTagStr() +
" shape");
2142 if (editedShapePoly->getShapeEditedElement()->getTagProperty().hasAttribute(
SUMO_ATTR_CUSTOMSHAPE)) {
2145 editedShapePoly->getShapeEditedElement()->setAttribute(attr,
toString(editedShapePoly->getShape()), myViewNet->myUndoList);
2146 myViewNet->myUndoList->p_end();
2147 stopEditCustomShape();
2148 myViewNet->update();