Eclipse SUMO - Simulation of Urban MObility
Loading...
Searching...
No Matches
GNEViewNet.cpp
Go to the documentation of this file.
1/****************************************************************************/
2// Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo
3// Copyright (C) 2001-2025 German Aerospace Center (DLR) and others.
4// This program and the accompanying materials are made available under the
5// terms of the Eclipse Public License 2.0 which is available at
6// https://www.eclipse.org/legal/epl-2.0/
7// This Source Code may also be made available under the following Secondary
8// Licenses when the conditions for such availability set forth in the Eclipse
9// Public License 2.0 are satisfied: GNU General Public License, version 2
10// or later which is available at
11// https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html
12// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-or-later
13/****************************************************************************/
19// A view on the network being edited (adapted from GUIViewTraffic)
20/****************************************************************************/
21
22#include <netbuild/NBEdgeCont.h>
87
89#include "GNENet.h"
90#include "GNEUndoList.h"
91#include "GNEViewNet.h"
92#include "GNEViewParent.h"
93
94// ===========================================================================
95// FOX callback mapping
96// ===========================================================================
97
98FXDEFMAP(GNEViewNet) GNEViewNetMap[] = {
99 // Super Modes
103 // Modes
120 // Network view options
137 // Demand view options
149 // Data view options
158 // Select elements
159 FXMAPFUNC(SEL_COMMAND, MID_ADDSELECT, GNEViewNet::onCmdAddSelected),
160 FXMAPFUNC(SEL_COMMAND, MID_REMOVESELECT, GNEViewNet::onCmdRemoveSelected),
163 // Junctions
176 FXMAPFUNC(SEL_COMMAND, MID_GNE_JUNCTION_ADDTLS, GNEViewNet::onCmdAddTLS),
178 // Connections
181 // Crossings
183 // WalkingArea
185 // Edges
186 FXMAPFUNC(SEL_COMMAND, MID_GNE_EDGE_SPLIT, GNEViewNet::onCmdSplitEdge),
188 FXMAPFUNC(SEL_COMMAND, MID_GNE_EDGE_REVERSE, GNEViewNet::onCmdReverseEdge),
194 FXMAPFUNC(SEL_COMMAND, MID_GNE_EDGE_SMOOTH, GNEViewNet::onCmdSmoothEdges),
200 // Lanes
219 // Additionals
221 // Polygons
224 FXMAPFUNC(SEL_COMMAND, MID_GNE_POLYGON_OPEN, GNEViewNet::onCmdOpenPolygon),
229 // edit custom shapes
238 // POIs
239 FXMAPFUNC(SEL_COMMAND, MID_GNE_POI_ATTACH, GNEViewNet::onCmdAttachPOI),
240 FXMAPFUNC(SEL_COMMAND, MID_GNE_POI_RELEASE, GNEViewNet::onCmdReleasePOI),
243 // Demand elements
244 FXMAPFUNC(SEL_COMMAND, MID_GNE_REVERSE, GNEViewNet::onCmdReverse),
245 FXMAPFUNC(SEL_COMMAND, MID_GNE_ADDREVERSE, GNEViewNet::onCmdAddReverse),
246 // Geometry Points
249 // toolbar views
252 // IntervalBar
259};
260
261// Object implementation
262FXIMPLEMENT(GNEViewNet, GUISUMOAbstractView, GNEViewNetMap, ARRAYNUMBER(GNEViewNetMap))
263
264
265// ===========================================================================
266// member method definitions
267// ===========================================================================
268#ifdef _MSC_VER
269#pragma warning(push)
270#pragma warning(disable: 4355) // mask warning about "this" in initializers
271#endif
272GNEViewNet::GNEViewNet(FXComposite* tmpParent, FXComposite* actualParent, GUIMainWindow& app,
273 GNEViewParent* viewParent, GNENet* net, GNEUndoList* undoList,
274 FXGLVisual* glVis, FXGLCanvas* share) :
275 GUISUMOAbstractView(tmpParent, app, viewParent, net->getGrid(), glVis, share),
276 myViewObjectsSelector(this),
277 myEditModes(this),
278 myTestingMode(this),
279 myCommonCheckableButtons(this),
280 myNetworkCheckableButtons(this),
281 myDemandCheckableButtons(this),
282 myDataCheckableButtons(this),
283 myNetworkViewOptions(this),
284 myDemandViewOptions(this),
285 myDataViewOptions(this),
286 myIntervalBar(this),
287 myMoveSingleElement(this),
288 myMoveMultipleElements(this),
289 myVehicleOptions(this),
290 myVehicleTypeOptions(this),
291 mySaveElements(this),
292 myTimeFormat(this),
293 mySelectingArea(this),
294 myEditNetworkElementShapes(this),
295 myLockManager(this),
296 myViewParent(viewParent),
297 myNet(net),
298 myUndoList(undoList) {
299 // view must be the final member of actualParent
300 reparent(actualParent);
301 // Build edit modes
303 // set this net in Net
304 myNet->setViewNet(this);
305 // set drag delay
306 ((GUIDanielPerspectiveChanger*)myChanger)->setDragDelay(100000000); // 100 milliseconds
307 // Reset textures
309 // init testing mode
311 // update grid flags
314 // update junction shape flags
315 const bool hide = !myVisualizationSettings->drawJunctionShape;
319}
320#ifdef _MSC_VER
321#pragma warning(pop)
322#endif
323
324
327
328
329void
331 if (myNet && makeCurrent()) {
332 // declare boundary
333 const Boundary maxBoundary(1000000000.0, 1000000000.0, -1000000000.0, -1000000000.0);
334 // get all objects in boundary
335 const std::vector<GUIGlID> GLIDs = getObjectsInBoundary(maxBoundary);
336 // finish make OpenGL context current
337 makeNonCurrent();
338 // declare set
339 std::set<GNEAttributeCarrier*> ACs;
340 // iterate over GUIGlIDs
341 for (const auto& GLId : GLIDs) {
343 // Make sure that object exists
344 if (AC && AC->getTagProperty()->isPlacedInRTree()) {
345 ACs.insert(AC);
346 }
347 }
348 // interate over ACs
349 for (const auto& AC : ACs) {
350 // remove object and insert again with exaggeration
351 myNet->getGrid().removeAdditionalGLObject(AC->getGUIGlObject());
352 myNet->getGrid().addAdditionalGLObject(AC->getGUIGlObject(), AC->getGUIGlObject()->getExaggeration(*myVisualizationSettings));
353 }
354 }
355}
356
357
358void
360
361
366 } else {
367 return 0;
368 }
369}
370
371
372void
374 // build coloring tools
375 {
376 for (auto it_names : gSchemeStorage.getNames()) {
377 v->getColoringSchemesCombo()->appendIconItem(it_names.c_str());
378 if (it_names == myVisualizationSettings->name) {
380 }
381 }
382 }
383 // for junctions
385 std::string("\t") + TL("Locate Junctions") + std::string("\t") + TL("Locate a junction within the network. (Shift+J)"),
387 // for edges
389 std::string("\t") + TL("Locate Edges") + std::string("\t") + TL("Locate an edge within the network. (Shift+E)"),
391 // for walkingAreas
393 std::string("\t") + TL("Locate WalkingAreas") + std::string("\t") + TL("Locate a walkingArea within the network. (Shift+W)"),
395 // for vehicles
397 std::string("\t") + TL("Locate Vehicles") + std::string("\t") + TL("Locate a vehicle within the network. (Shift+V)"),
399 // for person
401 std::string("\t") + TL("Locate Persons") + std::string("\t") + TL("Locate a person within the network. (Shift+P)"),
403 // for container
405 std::string("\t") + TL("Locate Containers") + std::string("\t") + TL("Locate a container within the network. (Shift+C)"),
407 // for routes
409 std::string("\t") + TL("Locate Route") + std::string("\t") + TL("Locate a route within the network. (Shift+R)"),
411 // for routes
413 std::string("\t") + TL("Locate Stops") + std::string("\t") + TL("Locate a stop within the network. (Shift+S)"),
415 // for persons (currently unused)
416 /*
417 new MFXButtonTooltip(v->getLocatorPopup(),
418 std::string("\t") + TL("Locate Vehicle\tLocate a person within the network.",
419 GUIIconSubSys::getIcon(GUIIcon::LOCATEPERSON), &v, MID_LOCATEPERSON,
420 GUIDesignButtonPopup);
421 */
422 // for tls
424 std::string("\t") + TL("Locate TLS") + std::string("\t") + TL("Locate a tls within the network. (Shift+T)"),
426 // for additional stuff
428 std::string("\t") + TL("Locate Additional") + std::string("\t") + TL("Locate an additional structure within the network. (Shift+A)"),
430 // for pois
432 std::string("\t") + TL("Locate PoI") + std::string("\t") + TL("Locate a PoI within the network. (Shift+O)"),
434 // for polygons
436 std::string("\t") + TL("Locate Polygon") + std::string("\t") + TL("Locate a Polygon within the network. (Shift+L)"),
438}
439
440
441void
442GNEViewNet::updateViewNet(const bool ignoreViewUpdater) const {
443 // this call is only used for breakpoints (to check when view is updated)
444 if (ignoreViewUpdater || gViewUpdater.allowUpdate()) {
445 GUISUMOAbstractView::update();
446 }
447}
448
449
450void
454
455
456void
459 // hide data button (and adjust width)
460 myEditModes.dataButton->hide();
461 // check network modes
469 break;
470 default:
471 break;
472 }
473 // check demand modes
474 switch (myEditModes.demandEditMode) {
481 break;
482 default:
483 break;
484 }
485 // go to network mode if we're in data mode
488 } else {
489 // refresh current supermode
491 }
492 } else {
493 // show data button
494 myEditModes.dataButton->show();
495 // refresh current supermode
497 }
498}
499
500
505
506
507void
509 // clear post drawing elements
511 // set selection position in gObjectsInPosition
513 // create an small boundary
514 Boundary positionBoundary;
515 positionBoundary.add(pos);
516 positionBoundary.grow(POSITION_EPS);
517 // push matrix
519 // enable draw for view objects handler (this calculate the contours)
521 // draw all GL elements within the small boundary
522 drawGLElements(positionBoundary);
523 // draw routeDistributions (temporal)
524 for (auto& routeDistribution : myNet->getAttributeCarriers()->getDemandElements().at(SUMO_TAG_ROUTE_DISTRIBUTION)) {
525 routeDistribution.second->drawGL(*myVisualizationSettings);
526 }
527 // swap selected objects (needed after selecting)
529 // check if filter edges that have the mouse over their geometry points
532 }
533 // restore draw for view objects handler (this calculate the contours)
535 // pop matrix
537 // check if update front elements
538 for (const auto& AC : myMarkFrontElements.getACs()) {
539 gViewObjectsHandler.updateFrontObject(AC->getGUIGlObject());
540 }
541 // after draw elements, update objects under cursor
543}
544
545
546void
548 if (shape.size() == 1) {
549 // if our shape has only one ponit, use updateObjectsInPosition
550 updateObjectsInPosition(shape.front());
551 } else if (shape.size() > 1) {
552 // triangulate shape
553 const auto triangles = Triangle::triangulate(shape);
554 // clear post drawing elements
556 // push matrix
558 // enable draw for object under cursor and rectangle selection
561 // draw all GL elements within the boundares formed by triangles
562 for (const auto& triangle : triangles) {
564 drawGLElements(triangle.getBoundary());
565 }
566 // restore draw for object under cursor
569 // pop matrix
571 // check if update front elements
572 for (const auto& AC : myMarkFrontElements.getACs()) {
573 gViewObjectsHandler.updateFrontObject(AC->getGUIGlObject());
574 }
575 // after draw elements, update objects under cursor
577 }
578}
579
580
581void
583 // if we're inspecting an element, add it to redraw path elements
584 for (const auto& AC : myInspectedElements.getACs()) {
585 const auto pathElement = dynamic_cast<const GNEPathElement*>(AC);
586 if (pathElement) {
588 }
589 }
590 // enable draw for view objects handler (this calculate the contours)
592 // push matrix
594 // redraw elements in buffer
598 // pop matrix
600 // disable drawForViewObjectsHandler
602}
603
604
609
610
615
616
617bool
618GNEViewNet::setColorScheme(const std::string& name) {
619 if (!gSchemeStorage.contains(name)) {
620 return false;
621 }
622 if (myGUIDialogViewSettings != nullptr) {
625 }
626 }
629 return true;
630}
631
632
633void
635 // reimplemented from GUISUMOAbstractView due GNEOverlappedInspection
636 ungrab();
637 // make network current
638 if (isEnabled() && myAmInitialised) {
639 // check if we're cliking while alt button is pressed
641 // set clicked popup position
643 // create cursor popup dialog for mark front element
645 // open popup dialog
647 } else if (myViewObjectsSelector.getGLObjects().empty()) {
649 } else {
650 // declare filtered objects
651 std::vector<GUIGlObject*> filteredGLObjects;
652 // get GUIGLObject front
653 GUIGlObject* overlappedElement = nullptr;
654 // we need to check if we're inspecting a overlapping element
657 overlappedElement = myInspectedElements.getFirstAC()->getGUIGlObject();
658 filteredGLObjects.push_back(overlappedElement);
659 }
660 bool connections = false;
661 bool TLS = false;
662 // fill filtered objects
663 if ((myViewObjectsSelector.getGLObjects().size() == 1) && (myViewObjectsSelector.getGLObjects().back()->getType() == GLO_EDGE)) {
664 // special case for edge geometry points (because edges uses the lane pop ups)
665 filteredGLObjects.push_back(myViewObjectsSelector.getGLObjects().back());
666 } else {
667 for (const auto& glObject : myViewObjectsSelector.getGLObjects()) {
668 // always avoid edges
669 if (glObject->getType() == GLO_EDGE) {
670 continue;
671 }
672 if (glObject->getType() == GLO_CONNECTION) {
673 connections = true;
674 }
675 if (glObject->getType() == GLO_TLLOGIC) {
676 TLS = true;
677 }
678 filteredGLObjects.push_back(glObject);
679 }
680 auto it = filteredGLObjects.begin();
681 if (connections) {
682 // filter junctions if there are connections
683 while (it != filteredGLObjects.end()) {
684 if ((*it)->getType() == GLO_JUNCTION) {
685 it = filteredGLObjects.erase(it);
686 } else {
687 it++;
688 }
689 }
690 } else if (TLS) {
691 // filter all elements except TLLogic
692 while (it != filteredGLObjects.end()) {
693 if ((*it)->getType() != GLO_TLLOGIC) {
694 it = filteredGLObjects.erase(it);
695 } else {
696 it++;
697 }
698 }
699 }
700 }
701 // remove duplicated elements using an unordered set
702 auto itDuplicated = filteredGLObjects.begin();
703 std::unordered_set<GUIGlObject*> unorderedSet;
704 for (auto itElement = filteredGLObjects.begin(); itElement != filteredGLObjects.end(); itElement++) {
705 if (unorderedSet.insert(*itElement).second) {
706 *itDuplicated++ = *itElement;
707 }
708 }
709 filteredGLObjects.erase(itDuplicated, filteredGLObjects.end());
710 // open object dialog
711 openObjectDialog(filteredGLObjects);
712 }
713 }
714}
715
716
717void
718GNEViewNet::openDeleteDialogAtCursor(const std::vector<GUIGlObject*>& GLObjects) {
719 if (myPopup) {
720 destroyPopup();
721 }
722 // set clicked popup position
724 // create cursor popup dialog for delete element
726 myCreatedPopup = true;
727 // open popup dialog
729}
730
731
732void
733GNEViewNet::openSelectDialogAtCursor(const std::vector<GUIGlObject*>& GLObjects) {
734 if (myPopup) {
735 destroyPopup();
736 }
737 // set clicked popup position
739 // create cursor popup dialog for select element
741 myCreatedPopup = true;
742 // open popup dialog
744}
745
746
747void
749 // first check if we have to save gui settings in a file (only used for testing purposes)
750 const auto& neteditOptions = OptionsCont::getOptions();
751 if (neteditOptions.getString("gui-testing.setting-output").size() > 0) {
752 try {
753 // open output device
754 OutputDevice& output = OutputDevice::getDevice(neteditOptions.getString("gui-testing.setting-output"));
755 // save view settings
758 // save viewport (zoom, X, Y and Z)
764 output.closeTag();
765 output.closeTag();
766 // close output device
767 output.close();
768 } catch (...) {
769 WRITE_ERROR(TL("GUI-Settings cannot be saved in ") + neteditOptions.getString("gui-testing.setting-output"));
770 }
771 }
772}
773
774
777 return myEditModes;
778}
779
780
783 return myTestingMode;
784}
785
786
791
792
797
798
803
804
809
810
815
816
817void
820 assert(!scheme.isFixed());
821 double minValue = std::numeric_limits<double>::infinity();
822 double maxValue = -std::numeric_limits<double>::infinity();
823 // retrieve range
824 bool hasMissingData = false;
825 if (objectType == GLO_LANE) {
826 // XXX (see #3409) multi-colors are not currently handled. this is a quick hack
827 if (active == 9) {
828 active = 8; // segment height, fall back to start height
829 } else if (active == 11) {
830 active = 10; // segment incline, fall back to total incline
831 }
832 for (const auto& lane : myNet->getAttributeCarriers()->getLanes()) {
833 const double val = lane.second->getColorValue(s, active);
834 if (val == s.MISSING_DATA) {
835 hasMissingData = true;
836 continue;
837 }
838 minValue = MIN2(minValue, val);
839 maxValue = MAX2(maxValue, val);
840 }
841 } else if (objectType == GLO_VEHICLE) {
842 for (const auto& tagMap : myNet->getAttributeCarriers()->getDemandElements()) {
843 for (const auto& objItem : tagMap.second) {
844 const double val = objItem.first->getColorValue(s, active);
845 if (val == s.MISSING_DATA) {
846 hasMissingData = true;
847 continue;
848 }
849 minValue = MIN2(minValue, val);
850 maxValue = MAX2(maxValue, val);
851 }
852 }
853 } else if (objectType == GLO_JUNCTION) {
854 if (active == 3) {
855 for (const auto& junction : myNet->getAttributeCarriers()->getJunctions()) {
856 minValue = MIN2(minValue, junction.second->getPositionInView().z());
857 maxValue = MAX2(maxValue, junction.second->getPositionInView().z());
858 }
859 }
860 } else if (objectType == GLO_TAZRELDATA) {
861 if (active == 4) {
862 for (const auto& genericData : myNet->getAttributeCarriers()->getGenericDatas().at(SUMO_TAG_TAZREL)) {
863 const double value = genericData.second->getColorValue(s, active);
864 if (value == s.MISSING_DATA) {
865 continue;
866 }
867 minValue = MIN2(minValue, value);
868 maxValue = MAX2(maxValue, value);
869 }
870 }
871 }
873 scheme.clear();
874 // add threshold for every distinct value
875 std::set<SVCPermissions> codes;
876 for (const auto& lane : myNet->getAttributeCarriers()->getLanes()) {
877 codes.insert(lane.second->getParentEdge()->getNBEdge()->getPermissions(lane.second->getIndex()));
878 }
879 int step = MAX2(1, 360 / (int)codes.size());
880 int hue = 0;
881 for (SVCPermissions p : codes) {
882 scheme.addColor(RGBColor::fromHSV(hue, 1, 1), (double)p);
883 hue = (hue + step) % 360;
884 }
885 return;
886 }
887 buildMinMaxRainbow(s, scheme, rs, minValue, maxValue, hasMissingData);
888}
889
890
891void
892GNEViewNet::setStatusBarText(const std::string& text) {
893 myApp->setStatusBarText(text);
894}
895
896
897bool
900 return false;
901 } else {
903 }
904}
905
906
907void
908GNEViewNet::setSelectorFrameScale(double selectionScale) {
910}
911
912
913bool
917
918
919bool
924
925
926bool
927GNEViewNet::askMergeJunctions(const GNEJunction* movedJunction, const GNEJunction* targetJunction, bool& alreadyAsked) {
928 if (alreadyAsked) {
929 return false;
931 return true;
932 } else {
933 alreadyAsked = true;
934 // open question box
935 const std::string header = TL("Confirm Junction Merger");
936 const std::string body = TLF("Do you wish to merge junctions '%' and '%'?\n('%' will be eliminated and its roads added to '%')",
937 movedJunction->getMicrosimID(),
938 targetJunction->getMicrosimID(),
939 movedJunction->getMicrosimID(),
940 targetJunction->getMicrosimID());
941 const auto questionDialog = GNEQuestionBasicDialog(myViewParent->getGNEAppWindows(), GNEDialog::Buttons::YES_NO, header, body);
942 // continue depending of result
943 if (questionDialog.getResult() == GNEDialog::Result::ACCEPT) {
944 return true;
945 } else {
946 return false;
947 }
948 }
949}
950
951
952bool
953GNEViewNet::aksChangeSupermode(const std::string& operation, Supermode expectedSupermode) {
954 // first check if ignore option is enabled
955 if (OptionsCont::getOptions().getBool("ignore-supermode-question")) {
956 return true;
957 }
958 std::string body;
959 if (expectedSupermode == Supermode::NETWORK) {
960 body = TLF("% requires switch to network mode. Continue?", operation);
961 } else if (expectedSupermode == Supermode::DEMAND) {
962 body = TLF("% requires switch to demand mode. Continue?", operation);
963 } else if (expectedSupermode == Supermode::DATA) {
964 body = TLF("% requires switch to data mode. Continue?", operation);
965 } else {
966 throw ProcessError("invalid expected supermode");
967 }
968 // open question dialog
970 TL("Confirm switch mode"), body);
971 // continue depending of result
972 if (questionDialog.getResult() == GNEDialog::Result::ACCEPT) {
973 myEditModes.setSupermode(expectedSupermode, true);
974 return true;
975 } else {
976 return false;
977 }
978}
979
980
981bool
983 // separate conditions for code legibly
986 return (TLSMode && selectingDetectors);
987}
988
989
990bool
992 // separate conditions for code legibly
994 const bool selectingJunctions = myViewParent->getTLSEditorFrame()->getTLSJunction()->isJoiningJunctions();
995 return (TLSMode && selectingJunctions);
996}
997
998
1003
1004
1009
1010
1011bool
1013 // Get selected lanes
1014 const auto selectedLanes = myNet->getAttributeCarriers()->getSelectedLanes();
1015 // Declare map of edges and lanes
1016 std::map<GNEEdge*, GNELane*> mapOfEdgesAndLanes;
1017 // Iterate over selected lanes
1018 for (const auto& selectedLane : selectedLanes) {
1019 mapOfEdgesAndLanes[myNet->getAttributeCarriers()->retrieveEdge(selectedLane->getParentEdge()->getID())] = selectedLane;
1020 }
1021 // Throw warning dialog if there hare multiple lanes selected in the same edge
1022 if (mapOfEdgesAndLanes.size() != selectedLanes.size()) {
1023 const std::string header = TL("Multiple lane in the same edge selected");
1024 const std::string bodyA = TL("There are selected lanes that belong to the same edge.");
1025 const std::string bodyB = TLF("Only one lane per edge will be restricted to %.", toString(vclass));
1026 // Show warning dialog
1027 GNEWarningBasicDialog(myViewParent->getGNEAppWindows(), header, bodyA, bodyB);
1028 }
1029 // If we handeln a set of lanes
1030 if (mapOfEdgesAndLanes.size() > 0) {
1031 // declare counter for number of Sidewalks
1032 int counter = 0;
1033 // iterate over selected lanes
1034 for (const auto& edgeLane : mapOfEdgesAndLanes) {
1035 if (edgeLane.first->hasRestrictedLane(vclass)) {
1036 counter++;
1037 }
1038 }
1039 // if all edges parent own a Sidewalk, stop function
1040 if (counter == (int)mapOfEdgesAndLanes.size()) {
1041 const std::string header = TLF("Set vclass to % for selected lanes", toString(vclass));
1042 const std::string body = TLF("All lanes own already another lane in the same edge with a restriction for %", toString(vclass));
1043 // show information dialog
1045 return 0;
1046 } else {
1047 // Ask confirmation to user
1048 const std::string header = TLF("Set vclass to % for selected lanes", toString(vclass));
1049 const std::string body = TLF("% lanes will be restricted to %. Continue?", toString(mapOfEdgesAndLanes.size() - counter), toString(vclass));
1050 // show question dialog
1051 const auto questionDialog = GNEQuestionBasicDialog(myViewParent->getGNEAppWindows(), GNEDialog::Buttons::YES_NO, header, body);
1052 // continue depending of result
1053 if (questionDialog.getResult() != GNEDialog::Result::ACCEPT) { //1:yes, 2:no, 4:esc
1054 return 0;
1055 }
1056 }
1057 // begin undo operation
1058 myUndoList->begin(lane, "restrict lanes to " + toString(vclass));
1059 // iterate over selected lanes
1060 for (const auto& edgeLane : mapOfEdgesAndLanes) {
1061 // Transform lane to Sidewalk
1062 myNet->restrictLane(vclass, edgeLane.second, myUndoList);
1063 }
1064 // end undo operation
1065 myUndoList->end();
1066 } else {
1067 // If only have a single lane, start undo/redo operation
1068 myUndoList->begin(lane, TL("restrict lane to ") + toString(vclass));
1069 // Transform lane to Sidewalk
1070 myNet->restrictLane(vclass, lane, myUndoList);
1071 // end undo operation
1072 myUndoList->end();
1073 }
1074 return 1;
1075}
1076
1077
1078bool
1079GNEViewNet::addRestrictedLane(GNELane* lane, SUMOVehicleClass vclass, const bool insertAtFront) {
1080 // Get selected edges
1081 const auto selectedEdges = myNet->getAttributeCarriers()->getSelectedEdges();
1082 // get selected lanes
1083 const auto selectedLanes = myNet->getAttributeCarriers()->getSelectedLanes();
1084 // Declare set of edges
1085 std::set<GNEEdge*> setOfEdges;
1086 // Fill set of edges with vector of edges
1087 for (const auto& edge : selectedEdges) {
1088 setOfEdges.insert(edge);
1089 }
1090 // iterate over selected lanes
1091 for (const auto& selectedLane : selectedLanes) {
1092 // Insert pointer to edge into set of edges (To avoid duplicates)
1093 setOfEdges.insert(myNet->getAttributeCarriers()->retrieveEdge(selectedLane->getParentEdge()->getID()));
1094 }
1095 // If we handeln a set of edges
1097 // declare counter for number of restrictions
1098 int counter = 0;
1099 // iterate over set of edges
1100 for (const auto& edge : setOfEdges) {
1101 // update counter if edge has already a restricted lane of type "vclass"
1102 if (edge->hasRestrictedLane(vclass)) {
1103 counter++;
1104 }
1105 }
1106 // if all lanes own a Sidewalk, stop function
1107 if (counter == (int)setOfEdges.size()) {
1108 const std::string header = TLF("Add vclass % to selected lanes", toString(vclass));
1109 const std::string body = TLF("All lanes own already another lane in the same edge with a restriction to %.", toString(vclass));
1110 // show information dialog
1112 return 0;
1113 } else {
1114 // Ask confirmation to user
1115 const std::string header = TLF("Add vclass % to selected lanes", toString(vclass));
1116 const std::string body = TLF("% restrictions to % will be added. Continue?", toString(setOfEdges.size() - counter), toString(vclass));
1117 // show question dialog
1118 const auto questionDialog = GNEQuestionBasicDialog(myViewParent->getGNEAppWindows(), GNEDialog::Buttons::YES_NO, header, body);
1119 // continue depending of result
1120 if (questionDialog.getResult() != GNEDialog::Result::ACCEPT) { //1:yes, 2:no, 4:esc
1121 return 0;
1122 }
1123 }
1124 // begin undo operation
1125 myUndoList->begin(lane, TL("add restrictions for ") + toString(vclass));
1126 // iterate over set of edges
1127 for (const auto& edge : setOfEdges) {
1128 // add restricted lane (guess target)
1129 myNet->addRestrictedLane(vclass, edge, -1, myUndoList);
1130 }
1131 // end undo operation
1132 myUndoList->end();
1133 } else {
1134 // If only have a single lane, start undo/redo operation
1135 myUndoList->begin(lane, TL("add vclass for ") + toString(vclass));
1136 // Add restricted lane
1137 if (vclass == SVC_PEDESTRIAN) {
1138 // always add pedestrian lanes on the right
1139 myNet->addRestrictedLane(vclass, lane->getParentEdge(), 0, myUndoList);
1140 } else if (vclass == SVC_IGNORING) {
1141 if (insertAtFront) {
1143 } else {
1145 }
1146 } else if (lane->getParentEdge()->getChildLanes().size() == 1) {
1147 // guess insertion position if there is only 1 lane
1148 myNet->addRestrictedLane(vclass, lane->getParentEdge(), -1, myUndoList);
1149 } else {
1150 myNet->addRestrictedLane(vclass, lane->getParentEdge(), lane->getIndex(), myUndoList);
1151 }
1152 // end undo/redo operation
1153 myUndoList->end();
1154 }
1155 return 1;
1156}
1157
1158
1159bool
1161 // Get selected edges
1162 const auto selectedEdges = myNet->getAttributeCarriers()->getSelectedEdges();
1163 // get selected lanes
1164 const auto selectedLanes = myNet->getAttributeCarriers()->getSelectedLanes();
1165 // Declare set of edges
1166 std::set<GNEEdge*> setOfEdges;
1167 // Fill set of edges with vector of edges
1168 for (const auto& edge : selectedEdges) {
1169 setOfEdges.insert(edge);
1170 }
1171 // iterate over selected lanes
1172 for (const auto& selectedLane : selectedLanes) {
1173 // Insert pointer to edge into set of edges (To avoid duplicates)
1174 setOfEdges.insert(myNet->getAttributeCarriers()->retrieveEdge(selectedLane->getParentEdge()->getID()));
1175 }
1176 // If we handeln a set of edges
1177 if (setOfEdges.size() > 0) {
1178 // declare counter for number of restrictions
1179 int counter = 0;
1180 // iterate over set of edges
1181 for (const auto& edge : setOfEdges) {
1182 // update counter if edge has already a restricted lane of type "vclass"
1183 if (edge->hasRestrictedLane(vclass)) {
1184 counter++;
1185 }
1186 }
1187 // if all lanes don't own a Sidewalk, stop function
1188 if (counter == 0) {
1189 const std::string header = TLF("Remove vclass % from selected lanes", toString(vclass));
1190 const std::string body = TLF("The selected lanes and edges don't have a restriction to %.", toString(vclass));
1191 // show information dialog
1193 return 0;
1194 } else {
1195 // Ask confirmation to user
1196 const std::string header = TLF("Remove vclass % from selected lanes", toString(vclass));
1197 const std::string body = TLF("% restrictions to % will be removed. Continue?", toString(setOfEdges.size() - counter), toString(vclass));
1198 // show question dialog
1199 const auto questionDialog = GNEQuestionBasicDialog(myViewParent->getGNEAppWindows(), GNEDialog::Buttons::YES_NO, header, body);
1200 // continue depending of result
1201 if (questionDialog.getResult() != GNEDialog::Result::ACCEPT) { //1:yes, 2:no, 4:esc
1202 return 0;
1203 }
1204 }
1205 // begin undo operation
1206 myUndoList->begin(lane, "Remove restrictions for " + toString(vclass));
1207 // iterate over set of edges
1208 for (const auto& edge : setOfEdges) {
1209 // add Sidewalk
1210 myNet->removeRestrictedLane(vclass, edge, myUndoList);
1211 }
1212 // end undo operation
1213 myUndoList->end();
1214 } else {
1215 // If only have a single lane, start undo/redo operation
1216 myUndoList->begin(lane, TL("Remove vclass for ") + toString(vclass));
1217 // Remove Sidewalk
1219 // end undo/redo operation
1220 myUndoList->end();
1221 }
1222 return 1;
1223}
1224
1225
1226#ifdef _MSC_VER
1227#pragma warning(push)
1228#pragma warning(disable: 4355) // mask warning about "this" in initializers
1229#endif
1231 myViewObjectsSelector(this),
1232 myEditModes(this),
1233 myTestingMode(this),
1234 myCommonCheckableButtons(this),
1235 myNetworkCheckableButtons(this),
1236 myDemandCheckableButtons(this),
1237 myDataCheckableButtons(this),
1238 myNetworkViewOptions(this),
1239 myDemandViewOptions(this),
1240 myDataViewOptions(this),
1241 myIntervalBar(this),
1242 myMoveSingleElement(this),
1243 myMoveMultipleElements(this),
1244 myVehicleOptions(this),
1245 myVehicleTypeOptions(this),
1246 mySaveElements(this),
1247 myTimeFormat(this),
1248 mySelectingArea(this),
1249 myEditNetworkElementShapes(this),
1250 myLockManager(this) {
1251}
1252#ifdef _MSC_VER
1253#pragma warning(pop)
1254#endif
1255
1256
1257std::vector<std::string>
1259 std::set<std::string> keys;
1260 for (const NBEdge* e : myNet->getEdgeCont().getAllEdges()) {
1261 if (edgeKeys) {
1262 for (const auto& item : e->getParametersMap()) {
1263 keys.insert(item.first);
1264 }
1265 for (const auto& con : e->getConnections()) {
1266 for (const auto& item : con.getParametersMap()) {
1267 keys.insert(item.first);
1268 }
1269 }
1270 } else {
1271 for (const auto& lane : e->getLanes()) {
1272 int i = 0;
1273 for (const auto& item : lane.getParametersMap()) {
1274 keys.insert(item.first);
1275 }
1276 for (const auto& con : e->getConnectionsFromLane(i)) {
1277 for (const auto& item : con.getParametersMap()) {
1278 keys.insert(item.first);
1279 }
1280 }
1281 i++;
1282 }
1283 }
1284 }
1285 return std::vector<std::string>(keys.begin(), keys.end());
1286}
1287
1288
1289std::vector<std::string>
1291 std::set<std::string> keys;
1292 for (const auto& genericData : myNet->getAttributeCarriers()->getGenericDatas().at(GNE_TAG_EDGEREL_SINGLE)) {
1293 for (const auto& parameter : genericData.second->getParameters()->getParametersMap()) {
1294 keys.insert(parameter.first);
1295 }
1296 }
1297 return std::vector<std::string>(keys.begin(), keys.end());
1298}
1299
1300
1301std::vector<std::string>
1303 std::set<std::string> keys;
1304 for (const auto& genericData : myNet->getAttributeCarriers()->getGenericDatas().at(SUMO_TAG_TAZREL)) {
1305 for (const auto& parameter : genericData.second->getParameters()->getParametersMap()) {
1306 keys.insert(parameter.first);
1307 }
1308 }
1309 for (const auto& genericData : myNet->getAttributeCarriers()->getGenericDatas().at(SUMO_TAG_EDGEREL)) {
1310 for (const auto& parameter : genericData.second->getParameters()->getParametersMap()) {
1311 keys.insert(parameter.first);
1312 }
1313 }
1314 return std::vector<std::string>(keys.begin(), keys.end());
1315}
1316
1317
1318std::vector<std::string>
1322
1323
1324bool
1328 return true;
1329 } else {
1330 return false;
1331 }
1332}
1333
1334
1335int
1339
1340
1341int
1342GNEViewNet::doPaintGL(int mode, const Boundary& drawingBoundary) {
1343 // set lefthand and laneIcons
1346 // first step: update objects under cursor
1348 // second step: redraw contour of path elements (needed if we're inspecting a path element like a route or trip)
1350 // set render modes
1351 glRenderMode(mode);
1352 glMatrixMode(GL_MODELVIEW);
1354 glDisable(GL_TEXTURE_2D);
1355 glDisable(GL_ALPHA_TEST);
1356 glEnable(GL_BLEND);
1357 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
1358 glEnable(GL_DEPTH_TEST);
1359 // visualize rectangular selection
1361 // draw decals
1362 drawDecals();
1363 // draw grid (and update grid button)
1364 drawGrid();
1365 // update show connections
1367 // draw temporal junction
1369 // draw temporal drawing shape
1371 // draw testing elements
1373 // draw temporal E2 multilane detectors
1375 // draw temporal overhead wires
1377 // draw temporal trip/flow route
1379 // draw temporal person plan route
1382 // draw temporal container plan route
1385 // draw temporal route
1387 // draw temporal edgeRelPath
1389 // check menu checks of supermode demand
1391 // enable or disable menuCheckShowAllPersonPlans depending of there is a locked person
1394 } else {
1396 }
1397 }
1398 // clear pathDraw
1402 // update ignore hide by zoom
1404 // draw network (boundary
1406 // draw all GL elements
1407 int hits = drawGLElements(drawingBoundary);
1408 // draw routeDistributions (temporal)
1409 for (auto& routeDistribution : myNet->getAttributeCarriers()->getDemandElements().at(SUMO_TAG_ROUTE_DISTRIBUTION)) {
1410 routeDistribution.second->drawGL(*myVisualizationSettings);
1411 }
1412 // after drawing all elements, update list of merged junctions
1414 // draw temporal split junction
1416 // draw temporal roundabout
1418 // draw temporal lines between E1 detectors and junctions in TLS Mode
1420 // draw temporal lines between junctions in TLS Mode
1422 // draw netedit attributes references
1424 // draw test circle
1426 // pop draw matrix
1428 // update interval bar
1430 // check if recopute boundaries (Deactivated, continue after 1.14 release)
1431 /*
1432 if (gObjectsInPosition.recomputeBoundaries != GLO_NETWORK) {
1433 myNet->getGrid().updateBoundaries(gObjectsInPosition.recomputeBoundaries);
1434 }
1435 */
1436 return hits;
1437}
1438
1439
1440long
1441GNEViewNet::onLeftBtnPress(FXObject* obj, FXSelector, void* eventData) {
1442 // check if we're in test mode
1444 // set focus in view net
1445 setFocus();
1446 // update MouseButtonKeyPressed
1448 // process left button press function depending of supermode
1453 } else if (myEditModes.isCurrentSupermodeData()) {
1454 processLeftButtonPressData(eventData);
1455 }
1456 // update cursor
1457 updateCursor();
1458 // update view
1459 updateViewNet();
1460 return 1;
1461 } else {
1462 return 0;
1463 }
1464}
1465
1466
1467long
1468GNEViewNet::onLeftBtnRelease(FXObject* obj, FXSelector sel, void* eventData) {
1469 // check if we're in test mode
1471 // avoid closing Popup dialog in Linux
1472 if (myCreatedPopup) {
1473 myCreatedPopup = false;
1474 return 1;
1475 }
1476 // process parent function
1477 GUISUMOAbstractView::onLeftBtnRelease(obj, sel, eventData);
1478 // update MouseButtonKeyPressed
1480 // process left button release function depending of supermode
1485 } else if (myEditModes.isCurrentSupermodeData()) {
1487 }
1488 // update cursor
1489 updateCursor();
1490 // update view
1491 updateViewNet();
1492 return 1;
1493 } else {
1494 return 0;
1495 }
1496}
1497
1498
1499long
1500GNEViewNet::onMiddleBtnPress(FXObject* obj, FXSelector sel, void* eventData) {
1501 // check if we're in test mode
1503 // process parent function
1504 GUISUMOAbstractView::onMiddleBtnPress(obj, sel, eventData);
1505 // update cursor
1506 updateCursor();
1507 // update view
1508 updateViewNet();
1509 return 1;
1510 } else {
1511 return 0;
1512 }
1513}
1514
1515
1516long
1517GNEViewNet::onMiddleBtnRelease(FXObject* obj, FXSelector sel, void* eventData) {
1518 // check if we're in test mode
1520 // process parent function
1521 GUISUMOAbstractView::onMiddleBtnRelease(obj, sel, eventData);
1522 // update cursor
1523 updateCursor();
1524 // update view
1525 updateViewNet();
1526 return 1;
1527 } else {
1528 return 0;
1529 }
1530}
1531
1532
1533long
1534GNEViewNet::onRightBtnPress(FXObject* obj, FXSelector sel, void* eventData) {
1535 // check if we're in test mode
1537 // update MouseButtonKeyPressed
1539 // update cursor
1540 updateCursor();
1542 // disable right button press during drawing polygon
1543 return 1;
1544 } else {
1545 return GUISUMOAbstractView::onRightBtnPress(obj, sel, eventData);
1546 }
1547 } else {
1548 return 0;
1549 }
1550}
1551
1552
1553long
1554GNEViewNet::onRightBtnRelease(FXObject* obj, FXSelector sel, void* eventData) {
1555 // check if we're in test mode
1557 // update MouseButtonKeyPressed
1559 // update cursor
1560 updateCursor();
1561 // disable right button release during drawing polygon
1563 return 1;
1564 } else {
1565 return GUISUMOAbstractView::onRightBtnRelease(obj, sel, eventData);
1566 }
1567 } else {
1568 return 0;
1569 }
1570}
1571
1572
1573long
1574GNEViewNet::onMouseMove(FXObject* obj, FXSelector sel, void* eventData) {
1575 // check if we're in test mode
1577 // process mouse move in GUISUMOAbstractView
1578 GUISUMOAbstractView::onMouseMove(obj, sel, eventData);
1579 // update MouseButtonKeyPressed
1581 // update cursor
1582 updateCursor();
1583 // process mouse move function depending of supermode
1588 } else if (myEditModes.isCurrentSupermodeData()) {
1590 }
1591 // update view
1592 updateViewNet();
1593 return 1;
1594 } else {
1595 return 0;
1596 }
1597}
1598
1599
1600long
1601GNEViewNet::onKeyPress(FXObject* obj, FXSelector sel, void* eventData) {
1602 // check if we're in test mode
1604 // update MouseButtonKeyPressed
1606 // update cursor
1607 updateCursor();
1608 // continue depending of current edit mode
1610 // update viewNet (for temporal junction)
1611 updateViewNet();
1613 // change "delete last created point" depending of shift key
1616 // change "delete last created point" depending of shift key
1619 updateViewNet();
1620 }
1621 return GUISUMOAbstractView::onKeyPress(obj, sel, eventData);
1622 } else {
1623 return 0;
1624 }
1625}
1626
1627
1628long
1629GNEViewNet::onKeyRelease(FXObject* obj, FXSelector sel, void* eventData) {
1630 // check if we're in test mode
1632 // update MouseButtonKeyPressed
1634 // update cursor
1635 updateCursor();
1636 // continue depending of current edit mode
1638 // update viewNet (for temporal junction)
1639 updateViewNet();
1641 // change "delete last created point" depending of shift key
1644 // change "delete last created point" depending of shift key
1647 updateViewNet();
1648 }
1649 // check if selecting using rectangle has to be disabled
1652 updateViewNet();
1653 }
1654 return GUISUMOAbstractView::onKeyRelease(obj, sel, eventData);
1655 } else {
1656 return 0;
1657 }
1658}
1659
1660
1661void
1662GNEViewNet::abortOperation(bool clearSelection) {
1663 // steal focus from any text fields and place it over view net
1664 setFocus();
1665 // check what supermode is enabled
1667 // abort operation depending of current mode
1669 // abort edge creation in create edge frame
1673 // check if current selection has to be cleaned
1674 if (clearSelection) {
1676 }
1678 // abort changes in Connector Frame
1681 // continue depending of current TLS frame state
1686 } else {
1688 }
1694 // abort current drawing
1698 // abort current drawing
1700 } else if (myViewParent->getTAZFrame()->getCurrentTAZModule()->getTAZ() != nullptr) {
1701 // finish current editing TAZ
1703 }
1707 // clear view selection
1709 // abort path
1712 // abort path
1714 }
1716 // abort operation depending of current mode
1719 // check if current selection has to be cleaned
1720 if (clearSelection) {
1722 }
1735 }
1736 } else if (myEditModes.isCurrentSupermodeData()) {
1737 // abort operation depending of current mode
1740 // check if current selection has to be cleaned
1741 if (clearSelection) {
1743 }
1748 }
1749 }
1750 // abort undo list
1752 // update view
1753 updateViewNet();
1754}
1755
1756
1757void
1759 // delete elements depending of current supermode
1762 setStatusBarText(TL("Cannot delete in this mode"));
1764 // delete inspected elements
1765 myUndoList->begin(GUIIcon::MODEDELETE, TL("delete network inspected elements"));
1768 }
1769 myUndoList->end();
1770 } else {
1771 // get selected ACs
1772 const auto selectedNetworkACs = myNet->getAttributeCarriers()->getSelectedAttributeCarriers(false);
1773 // delete selected elements
1774 if (selectedNetworkACs.size() > 0) {
1775 myUndoList->begin(GUIIcon::MODEDELETE, TL("delete network selection"));
1776 for (const auto selectedAC : selectedNetworkACs) {
1778 }
1779 myUndoList->end();
1780 }
1781 }
1784 // delete inspected elements
1785 myUndoList->begin(GUIIcon::MODEDELETE, TL("delete demand inspected elements"));
1788 }
1789 myUndoList->end();
1790 } else {
1791 // get selected ACs
1792 const auto selectedDemandACs = myNet->getAttributeCarriers()->getSelectedAttributeCarriers(false);
1793 // delete selected elements
1794 if (selectedDemandACs.size() > 0) {
1795 myUndoList->begin(GUIIcon::MODEDELETE, TL("delete demand selection"));
1796 for (const auto selectedAC : selectedDemandACs) {
1797 deleteDemandAttributeCarrier(selectedAC);
1798 }
1799 myUndoList->end();
1800 }
1801 }
1802 } else if (myEditModes.isCurrentSupermodeData()) {
1804 // delete inspected elements
1805 myUndoList->begin(GUIIcon::MODEDELETE, TL("delete data inspected elements"));
1808 }
1809 myUndoList->end();
1810 } else {
1811 // get selected ACs
1812 const auto selectedDataACs = myNet->getAttributeCarriers()->getSelectedAttributeCarriers(false);
1813 // delete selected elements
1814 if (selectedDataACs.size() > 0) {
1815 myUndoList->begin(GUIIcon::MODEDELETE, TL("delete data selection"));
1816 for (const auto selectedAC : selectedDataACs) {
1817 deleteDataAttributeCarrier(selectedAC);
1818 }
1819 myUndoList->end();
1820 }
1821 }
1822 }
1823}
1824
1825
1826void
1828 // check what supermode is enabled
1830 // abort operation depending of current mode
1832 // Accept changes in Connector Frame
1835 // continue depending of current TLS frame state
1842 }
1847 // stop current drawing
1849 } else {
1850 // start drawing
1852 }
1857 // stop current drawing
1859 } else if (myViewParent->getTAZFrame()->getCurrentTAZModule()->getTAZ() == nullptr) {
1860 // start drawing
1863 // save pending changes
1865 }
1867 // create path element
1870 // create path element
1872 }
1877 myViewParent->getVehicleFrame()->getPathCreator()->onCmdCreatePath(nullptr, 0, nullptr);
1879 myViewParent->getPersonFrame()->getPlanCreator()->onCmdCreatePath(nullptr, 0, nullptr);
1886 }
1887 } else if (myEditModes.isCurrentSupermodeData()) {
1892 }
1893 }
1894}
1895
1896
1897void
1899 // check what supermode is enabled
1903 }
1917 }
1918 } else if (myEditModes.isCurrentSupermodeData()) {
1921 }
1922 }
1923}
1924
1925void
1927 // if there is a visible frame, set focus over it. In other case, set focus over ViewNet
1928 if (myCurrentFrame != nullptr) {
1930 } else {
1931 setFocus();
1932 }
1933}
1934
1935
1938 return myViewParent;
1939}
1940
1941
1942GNENet*
1944 return myNet;
1945}
1946
1947
1950 return myUndoList;
1951}
1952
1953
1958
1959
1964
1965
1970
1971
1976
1977
1978bool
1982
1983
1984bool
1985GNEViewNet::checkOverLockedElement(const GUIGlObject* GLObject, const bool isSelected) const {
1986 // check if elemet is blocked
1987 if (myLockManager.isObjectLocked(GLObject->getType(), isSelected)) {
1988 return false;
1989 }
1990 // get front GLObject
1991 const auto glObjectFront = myViewObjectsSelector.getGUIGlObjectFront();
1992 // check if element is under cursor
1993 if (glObjectFront) {
1994 if (glObjectFront == GLObject) {
1995 return true;
1996 } else if (glObjectFront->getType() == GLObject->getType()) {
1997 for (const auto& glObjectUnderCursor : myViewObjectsSelector.getGLObjects()) {
1998 if (glObjectUnderCursor == GLObject) {
1999 return true;
2000 }
2001 }
2002 }
2003 }
2004 return false;
2005}
2006
2007
2012
2013
2014void
2016 myLastCreatedRoute = lastCreatedRoute;
2017}
2018
2019
2022 // get first object that can be found in their container
2023 for (const auto& glObjectLayer : gViewObjectsHandler.getSelectedObjects()) {
2024 for (const auto& glObject : glObjectLayer.second) {
2025 auto junction = myNet->getAttributeCarriers()->retrieveJunction(glObject.object->getMicrosimID(), false);
2026 if (junction) {
2027 return junction;
2028 }
2029 }
2030 }
2031 return nullptr;
2032}
2033
2034
2037 // get first object that can be found in their container
2038 for (const auto& glObjectLayer : gViewObjectsHandler.getSelectedObjects()) {
2039 for (const auto& glObject : glObjectLayer.second) {
2040 auto connection = myNet->getAttributeCarriers()->retrieveConnection(glObject.object, false);
2041 if (connection) {
2042 return connection;
2043 }
2044 }
2045 }
2046 return nullptr;
2047}
2048
2049
2052 // get first object that can be found in their container
2053 for (const auto& glObjectLayer : gViewObjectsHandler.getSelectedObjects()) {
2054 for (const auto& glObject : glObjectLayer.second) {
2055 auto crossing = myNet->getAttributeCarriers()->retrieveCrossing(glObject.object, false);
2056 if (crossing) {
2057 return crossing;
2058 }
2059 }
2060 }
2061 return nullptr;
2062}
2063
2064
2067 // get first object that can be found in their container
2068 for (const auto& glObjectLayer : gViewObjectsHandler.getSelectedObjects()) {
2069 for (const auto& glObject : glObjectLayer.second) {
2070 auto walkingArea = myNet->getAttributeCarriers()->retrieveWalkingArea(glObject.object, false);
2071 if (walkingArea) {
2072 return walkingArea;
2073 }
2074 }
2075 }
2076 return nullptr;
2077}
2078
2079
2080GNEEdge*
2082 // get first object that can be found in their container
2083 for (const auto& glObjectLayer : gViewObjectsHandler.getSelectedObjects()) {
2084 for (const auto& glObject : glObjectLayer.second) {
2085 auto edge = myNet->getAttributeCarriers()->retrieveEdge(glObject.object->getMicrosimID(), false);
2086 if (edge) {
2087 return edge;
2088 }
2089 }
2090 }
2091 return nullptr;
2092}
2093
2094
2095GNELane*
2097 // get first object that can be found in their container
2098 for (const auto& glObjectLayer : gViewObjectsHandler.getSelectedObjects()) {
2099 for (const auto& glObject : glObjectLayer.second) {
2100 auto lane = myNet->getAttributeCarriers()->retrieveLane(glObject.object, false);
2101 if (lane) {
2102 return lane;
2103 }
2104 }
2105 }
2106 return nullptr;
2107}
2108
2109
2112 // get first object that can be found in their container
2113 for (const auto& glObjectLayer : gViewObjectsHandler.getSelectedObjects()) {
2114 for (const auto& glObject : glObjectLayer.second) {
2115 auto additionalElement = myNet->getAttributeCarriers()->retrieveAdditional(glObject.object, false);
2116 if (additionalElement) {
2117 return additionalElement;
2118 }
2119 }
2120 }
2121 return nullptr;
2122}
2123
2124
2127 // get first object that can be found in their container
2128 for (const auto& glObjectLayer : gViewObjectsHandler.getSelectedObjects()) {
2129 for (const auto& glObject : glObjectLayer.second) {
2130 auto demandElement = myNet->getAttributeCarriers()->retrieveDemandElement(glObject.object, false);
2131 if (demandElement) {
2132 return demandElement;
2133 }
2134 }
2135 }
2136 return nullptr;
2137}
2138
2139
2140GNEPoly*
2142 // get first object that can be parsed to poly element
2143 for (const auto& glObjectLayer : gViewObjectsHandler.getSelectedObjects()) {
2144 for (const auto& glObject : glObjectLayer.second) {
2145 auto polygon = dynamic_cast<GNEPoly*>(myNet->getAttributeCarriers()->retrieveAdditional(glObject.object, false));
2146 if (polygon) {
2147 return polygon;
2148 }
2149 }
2150 }
2151 return nullptr;
2152}
2153
2154
2155GNEPOI*
2157 // get first object that can be parsed to POI element
2158 for (const auto& glObjectLayer : gViewObjectsHandler.getSelectedObjects()) {
2159 for (const auto& glObject : glObjectLayer.second) {
2160 auto POI = dynamic_cast<GNEPOI*>(myNet->getAttributeCarriers()->retrieveAdditional(glObject.object, false));
2161 if (POI) {
2162 return POI;
2163 }
2164 }
2165 }
2166 return nullptr;
2167}
2168
2169
2170GNETAZ*
2172 // get first object that can be parsed to TAZ element
2173 for (const auto& glObjectLayer : gViewObjectsHandler.getSelectedObjects()) {
2174 for (const auto& glObject : glObjectLayer.second) {
2175 auto TAZ = dynamic_cast<GNETAZ*>(myNet->getAttributeCarriers()->retrieveAdditional(glObject.object, false));
2176 if (TAZ) {
2177 return TAZ;
2178 }
2179 }
2180 }
2181 return nullptr;
2182}
2183
2184
2187 // get first object that can be parsed to TAZ element
2188 for (const auto& glObjectLayer : gViewObjectsHandler.getSelectedObjects()) {
2189 for (const auto& glObject : glObjectLayer.second) {
2190 if (glObject.object->getType() == GLO_JUNCTION) {
2191 auto junction = myNet->getAttributeCarriers()->retrieveJunction(glObject.object->getMicrosimID());
2192 if (junction->isShapeEdited()) {
2193 return junction;
2194 }
2195 } else if (glObject.object->getType() == GLO_CROSSING) {
2196 auto crossing = myNet->getAttributeCarriers()->retrieveCrossing(glObject.object);
2197 if (crossing->isShapeEdited()) {
2198 return crossing;
2199 }
2200 } else if (glObject.object->getType() == GLO_CONNECTION) {
2201 auto connection = myNet->getAttributeCarriers()->retrieveConnection(glObject.object);
2202 if (connection->isShapeEdited()) {
2203 return connection;
2204 }
2205 }
2206 }
2207 }
2208 return nullptr;
2209}
2210
2211
2212long
2213GNEViewNet::onCmdSetSupermode(FXObject*, FXSelector sel, void*) {
2214 // check what network mode will be set
2215 switch (FXSELID(sel)) {
2217 if (myEditModes.networkButton->shown()) {
2219 }
2220 break;
2222 if (myEditModes.demandButton->shown()) {
2224 }
2225 break;
2227 if (myEditModes.dataButton->shown()) {
2229 }
2230 break;
2231 default:
2232 break;
2233 }
2234 return 1;
2235}
2236
2237
2238long
2239GNEViewNet::onCmdSetMode(FXObject*, FXSelector sel, void*) {
2240 // first filter modes depending of view
2242 // network
2244 switch (FXSELID(sel)) {
2245 // common
2249 // infrastructure
2254 // shapes
2257 break;
2258 default:
2259 return 0;
2260 }
2261 }
2262 // demand
2264 switch (FXSELID(sel)) {
2265 // common
2269 // persons
2272 // routes
2275 // types
2278 break;
2279 default:
2280 return 0;
2281 }
2282 }
2283 // data
2285 // all modes disabled
2286 return 0;
2287 }
2288 }
2289 // continue depending of supermode
2291 // check what network mode will be set
2292 switch (FXSELID(sel)) {
2295 break;
2298 break;
2301 break;
2304 break;
2307 break;
2310 break;
2313 break;
2316 break;
2319 break;
2322 break;
2325 break;
2328 break;
2331 break;
2334 break;
2335 default:
2336 break;
2337 }
2339 // check what demand mode will be set
2340 switch (FXSELID(sel)) {
2343 break;
2346 break;
2349 break;
2352 break;
2355 break;
2358 break;
2361 break;
2364 break;
2367 break;
2370 break;
2373 break;
2376 break;
2379 break;
2382 break;
2383 default:
2384 break;
2385 }
2386 } else if (myEditModes.isCurrentSupermodeData()) {
2387 // check what demand mode will be set
2388 switch (FXSELID(sel)) {
2391 break;
2394 break;
2397 break;
2400 break;
2403 break;
2406 break;
2409 break;
2410 default:
2411 break;
2412 }
2413 }
2414 return 1;
2415}
2416
2417
2418long
2419GNEViewNet::onCmdSplitEdge(FXObject*, FXSelector, void*) {
2421 if (edge != nullptr) {
2423 }
2424 return 1;
2425}
2426
2427
2428long
2429GNEViewNet::onCmdSplitEdgeBidi(FXObject*, FXSelector, void*) {
2431 if (edge != nullptr) {
2432 // obtain reverse edge
2433 const auto oppositeEdges = edge->getOppositeEdges();
2434 // check that reverse edge works
2435 if (oppositeEdges.size() > 0) {
2436 for (const auto& oppositeEdge : oppositeEdges) {
2437 // get reverse inner geometry
2438 const auto reverseGeometry = oppositeEdge->getNBEdge()->getInnerGeometry().reverse();
2439 if (reverseGeometry == edge->getNBEdge()->getInnerGeometry()) {
2440 myNet->splitEdgesBidi(edge, oppositeEdge, edge->getSplitPos(getPopupPosition()), myUndoList);
2441 return 1;
2442 }
2443 }
2444 }
2445 }
2446 return 1;
2447}
2448
2449
2450long
2451GNEViewNet::onCmdReverseEdge(FXObject*, FXSelector, void*) {
2453 if (edge != nullptr) {
2454 if (edge->isAttributeCarrierSelected()) {
2455 myUndoList->begin(edge, TL("Reverse selected edges"));
2456 const auto selectedEdges = myNet->getAttributeCarriers()->getSelectedEdges();
2457 for (const auto& selectedEdge : selectedEdges) {
2458 myNet->reverseEdge(selectedEdge, myUndoList);
2459 }
2460 myUndoList->end();
2461 } else {
2462 myUndoList->begin(edge, TL("Reverse edge"));
2464 myUndoList->end();
2465 }
2466 }
2467 return 1;
2468}
2469
2470
2471long
2472GNEViewNet::onCmdAddReversedEdge(FXObject*, FXSelector, void*) {
2474 if (edge != nullptr) {
2475 if (edge->isAttributeCarrierSelected()) {
2476 myUndoList->begin(edge, TL("Add Reverse edge for selected edges"));
2477 const auto selectedEdges = myNet->getAttributeCarriers()->getSelectedEdges();
2478 for (const auto& selectedEdge : selectedEdges) {
2479 myNet->addReversedEdge(selectedEdge, false, myUndoList);
2480 }
2481 myUndoList->end();
2482 } else {
2483 myUndoList->begin(edge, TL("Add reverse edge"));
2484 myNet->addReversedEdge(edge, false, myUndoList);
2485 myUndoList->end();
2486 }
2487 }
2488 return 1;
2489}
2490
2491
2492long
2495 if (edge != nullptr) {
2496 if (edge->isAttributeCarrierSelected()) {
2497 myUndoList->begin(edge, TL("Add Reverse disconnected edge for selected edges"));
2498 const auto selectedEdges = myNet->getAttributeCarriers()->getSelectedEdges();
2499 for (const auto& selectedEdge : selectedEdges) {
2500 myNet->addReversedEdge(selectedEdge, true, myUndoList);
2501 }
2502 myUndoList->end();
2503 } else {
2504 myUndoList->begin(edge, TL("Add reverse disconnected edge"));
2505 myNet->addReversedEdge(edge, true, myUndoList);
2506 myUndoList->end();
2507 }
2508 }
2509 return 1;
2510}
2511
2512
2513long
2514GNEViewNet::onCmdEditEdgeEndpoint(FXObject*, FXSelector, void*) {
2516 if (edge != nullptr) {
2517 // snap to active grid the Popup position
2519 }
2520 return 1;
2521}
2522
2523
2524long
2525GNEViewNet::onCmdResetEdgeEndpoint(FXObject*, FXSelector, void*) {
2527 if (edge != nullptr) {
2528 // check if edge is selected
2529 if (edge->isAttributeCarrierSelected()) {
2530 // get all selected edges
2531 const auto selectedEdges = myNet->getAttributeCarriers()->getSelectedEdges();
2532 // begin operation
2533 myUndoList->begin(edge, TL("reset geometry points"));
2534 // iterate over selected edges
2535 for (const auto& selectedEdge : selectedEdges) {
2536 // reset both end points
2537 selectedEdge->resetBothEndpoint(myUndoList);
2538 }
2539 // end operation
2540 myUndoList->end();
2541 } else {
2543 }
2544 }
2545 return 1;
2546}
2547
2548
2549long
2550GNEViewNet::onCmdStraightenEdges(FXObject*, FXSelector, void*) {
2552 if (edge != nullptr) {
2553 if (edge->isAttributeCarrierSelected()) {
2554 myUndoList->begin(edge, TL("straighten selected edges"));
2555 const auto selectedEdges = myNet->getAttributeCarriers()->getSelectedEdges();
2556 for (const auto& selectedEdge : selectedEdges) {
2557 selectedEdge->setAttribute(SUMO_ATTR_SHAPE, "", myUndoList);
2558 }
2559 myUndoList->end();
2560 } else {
2561
2562 myUndoList->begin(edge, TL("straighten edge"));
2564 myUndoList->end();
2565 }
2566 }
2567 return 1;
2568}
2569
2570
2571long
2572GNEViewNet::onCmdSmoothEdges(FXObject*, FXSelector, void*) {
2574 if (edge != nullptr) {
2575 if (edge->isAttributeCarrierSelected()) {
2576 myUndoList->begin(edge, TL("smooth selected edges"));
2577 const auto selectedEdges = myNet->getAttributeCarriers()->getSelectedEdges();
2578 for (const auto& selectedEdge : selectedEdges) {
2579 selectedEdge->smooth(myUndoList);
2580 }
2581 myUndoList->end();
2582 } else {
2583 myUndoList->begin(edge, TL("smooth edge"));
2584 edge->smooth(myUndoList);
2585 myUndoList->end();
2586 }
2587 }
2588 return 1;
2589}
2590
2591
2592long
2593GNEViewNet::onCmdStraightenEdgesElevation(FXObject*, FXSelector, void*) {
2595 if (edge != nullptr) {
2596 if (edge->isAttributeCarrierSelected()) {
2597 myUndoList->begin(edge, TL("straighten elevation of selected edges"));
2598 const auto selectedEdges = myNet->getAttributeCarriers()->getSelectedEdges();
2599 for (const auto& selectedEdge : selectedEdges) {
2600 selectedEdge->straightenElevation(myUndoList);
2601 }
2602 myUndoList->end();
2603 } else {
2604 myUndoList->begin(edge, TL("straighten edge elevation"));
2606 myUndoList->end();
2607 }
2608 }
2609 return 1;
2610}
2611
2612
2613long
2614GNEViewNet::onCmdSmoothEdgesElevation(FXObject*, FXSelector, void*) {
2616 if (edge != nullptr) {
2617 if (edge->isAttributeCarrierSelected()) {
2618 myUndoList->begin(edge, TL("smooth elevation of selected edges"));
2619 const auto selectedEdges = myNet->getAttributeCarriers()->getSelectedEdges();
2620 for (const auto& selectedEdge : selectedEdges) {
2621 selectedEdge->smoothElevation(myUndoList);
2622 }
2623 myUndoList->end();
2624 } else {
2625 myUndoList->begin(edge, TL("smooth edge elevation"));
2627 myUndoList->end();
2628 }
2629 }
2630 return 1;
2631}
2632
2633
2634long
2635GNEViewNet::onCmdResetLength(FXObject*, FXSelector, void*) {
2637 if (edge != nullptr) {
2638 if (edge->isAttributeCarrierSelected()) {
2639 myUndoList->begin(edge, TL("reset edge lengths"));
2640 const auto selectedEdges = myNet->getAttributeCarriers()->getSelectedEdges();
2641 for (const auto& selectedEdge : selectedEdges) {
2642 selectedEdge->setAttribute(SUMO_ATTR_LENGTH, "-1", myUndoList);
2643 }
2644 myUndoList->end();
2645 } else {
2647 }
2648 }
2649 return 1;
2650}
2651
2652
2653long
2654GNEViewNet::onCmdEdgeUseAsTemplate(FXObject*, FXSelector, void*) {
2656 if (edge != nullptr) {
2658 }
2659 return 1;
2660}
2661
2662
2663long
2664GNEViewNet::onCmdEgeApplyTemplate(FXObject*, FXSelector, void*) {
2665 GNEEdge* edgeAtPosition = getEdgeAtPopupPosition();
2666 if ((edgeAtPosition != nullptr) && myViewParent->getInspectorFrame()->getTemplateEditor()->getEdgeTemplate()) {
2667 // begin copy template
2668 myUndoList->begin(edgeAtPosition, TL("copy edge template"));
2669 if (edgeAtPosition->isAttributeCarrierSelected()) {
2670 // copy template in all selected edges
2671 for (const auto& edge : myNet->getAttributeCarriers()->getEdges()) {
2672 if (edge.second->isAttributeCarrierSelected()) {
2673 edge.second->copyTemplate(myViewParent->getInspectorFrame()->getTemplateEditor()->getEdgeTemplate(), myUndoList);
2674 }
2675 }
2676 } else {
2677 // copy template
2679 }
2680 // end copy template
2681 myUndoList->end();
2682 }
2683 return 1;
2684}
2685
2686
2687long
2688GNEViewNet::onCmdSimplifyShape(FXObject*, FXSelector, void*) {
2689 // get polygon under mouse
2690 GNEPoly* polygonUnderMouse = getPolygonAtPopupPosition();
2691 // check polygon
2692 if (polygonUnderMouse) {
2693 // check if shape is selected
2694 if (polygonUnderMouse->isAttributeCarrierSelected()) {
2695 // begin undo-list
2696 myNet->getViewNet()->getUndoList()->begin(polygonUnderMouse, TL("simplify shapes"));
2697 // get shapes
2698 const auto selectedShapes = myNet->getAttributeCarriers()->getSelectedShapes();
2699 // iterate over shapes
2700 for (const auto& selectedShape : selectedShapes) {
2701 // check if shape is a poly
2702 if ((selectedShape->getTagProperty()->getTag() == SUMO_TAG_POLY) ||
2703 (selectedShape->getTagProperty()->getTag() == GNE_TAG_JPS_WALKABLEAREA) ||
2704 (selectedShape->getTagProperty()->getTag() == GNE_TAG_JPS_OBSTACLE)) {
2705 // simplify shape
2706 dynamic_cast<GNEPoly*>(selectedShape)->simplifyShape();
2707 }
2708 }
2709 // end undo-list
2711 } else {
2712 polygonUnderMouse->simplifyShape();
2713 }
2714 }
2715 return 1;
2716}
2717
2718
2719long
2720GNEViewNet::onCmdDeleteGeometryPoint(FXObject*, FXSelector, void*) {
2721 GNEPoly* polygonUnderMouse = getPolygonAtPopupPosition();
2722 if (polygonUnderMouse) {
2723 polygonUnderMouse->deleteGeometryPoint(getPopupPosition());
2724 }
2725 return 1;
2726}
2727
2728
2729long
2730GNEViewNet::onCmdClosePolygon(FXObject*, FXSelector, void*) {
2731 // get polygon under mouse
2732 GNEPoly* polygonUnderMouse = getPolygonAtPopupPosition();
2733 // check polygon
2734 if (polygonUnderMouse) {
2735 // check if shape is selected
2736 if (polygonUnderMouse->isAttributeCarrierSelected()) {
2737 // begin undo-list
2738 myNet->getViewNet()->getUndoList()->begin(polygonUnderMouse, TL("close polygon shapes"));
2739 // get selectedshapes
2740 const auto selectedShapes = myNet->getAttributeCarriers()->getSelectedShapes();
2741 // iterate over shapes
2742 for (const auto& selectedShape : selectedShapes) {
2743 // check if shape is a poly
2744 if ((selectedShape->getTagProperty()->getTag() == SUMO_TAG_POLY) ||
2745 (selectedShape->getTagProperty()->getTag() == GNE_TAG_JPS_WALKABLEAREA) ||
2746 (selectedShape->getTagProperty()->getTag() == GNE_TAG_JPS_OBSTACLE)) {
2747 // close polygon
2748 dynamic_cast<GNEPoly*>(selectedShape)->closePolygon();
2749 }
2750 }
2751 // end undo-list
2753 } else {
2754 polygonUnderMouse->closePolygon();
2755 }
2756 }
2757 return 1;
2758}
2759
2760
2761long
2762GNEViewNet::onCmdOpenPolygon(FXObject*, FXSelector, void*) {
2763 // get polygon under mouse
2764 GNEPoly* polygonUnderMouse = getPolygonAtPopupPosition();
2765 // check polygon
2766 if (polygonUnderMouse) {
2767 // check if shape is selected
2768 if (polygonUnderMouse->isAttributeCarrierSelected()) {
2769 // begin undo-list
2770 myNet->getViewNet()->getUndoList()->begin(polygonUnderMouse, TL("open polygon shapes"));
2771 // get shapes
2772 const auto selectedShapes = myNet->getAttributeCarriers()->getSelectedShapes();
2773 // iterate over shapes
2774 for (const auto& selectedShape : selectedShapes) {
2775 // check if shape is a poly
2776 if ((selectedShape->getTagProperty()->getTag() == SUMO_TAG_POLY) ||
2777 (selectedShape->getTagProperty()->getTag() == GNE_TAG_JPS_WALKABLEAREA) ||
2778 (selectedShape->getTagProperty()->getTag() == GNE_TAG_JPS_OBSTACLE)) {
2779 // open polygon
2780 dynamic_cast<GNEPoly*>(selectedShape)->openPolygon();
2781 }
2782 }
2783 // end undo-list
2785 } else {
2786 polygonUnderMouse->openPolygon();
2787 }
2788 }
2789 return 1;
2790}
2791
2792
2793long
2794GNEViewNet::onCmdSelectPolygonElements(FXObject*, FXSelector, void*) {
2795 // get polygon under mouse
2796 GNEPoly* polygonUnderMouse = getPolygonAtPopupPosition();
2797 // check polygon
2798 if (polygonUnderMouse) {
2799 // get all elements under polygon shape
2800 updateObjectsInShape(polygonUnderMouse->getShape());
2801 // declare filtered ACs
2802 std::vector<GNEAttributeCarrier*> ACsUnderPolygon;
2803 ACsUnderPolygon.reserve(myViewObjectsSelector.getAttributeCarriers().size());
2804 // iterate over obtained GUIGlIDs
2805 for (const auto& AC : myViewObjectsSelector.getAttributeCarriers()) {
2806 if ((AC->getTagProperty()->getTag() == SUMO_TAG_EDGE) && checkSelectEdges()) {
2807 ACsUnderPolygon.push_back(AC);
2808 } else if ((AC->getTagProperty()->getTag() == SUMO_TAG_LANE) && !checkSelectEdges()) {
2809 ACsUnderPolygon.push_back(AC);
2810 } else if (!AC->getTagProperty()->isSymbol() && (AC != polygonUnderMouse)) {
2811 ACsUnderPolygon.push_back(AC);
2812 }
2813 }
2814 // continue if there are ACs
2815 if (ACsUnderPolygon.size() > 0) {
2816 // begin undo-list
2817 myNet->getViewNet()->getUndoList()->begin(GUIIcon::MODESELECT, TL("select within polygon boundary"));
2818 // iterate over shapes
2819 for (const auto& AC : ACsUnderPolygon) {
2820 AC->setAttribute(GNE_ATTR_SELECTED, "true", myUndoList);
2821 }
2822 // end undo-list
2824 }
2825 }
2826 return 1;
2827}
2828
2829
2830long
2831GNEViewNet::onCmdTriangulatePolygon(FXObject*, FXSelector, void*) {
2832// get polygon under mouse
2833 GNEPoly* polygonUnderMouse = getPolygonAtPopupPosition();
2834 // check polygon
2835 if (polygonUnderMouse) {
2836 // declare additional handler
2837 GNEAdditionalHandler additionalHandler(myNet, polygonUnderMouse->getFilename(), myViewParent->getGNEAppWindows()->isUndoRedoAllowed());
2838 // triangulate shape
2839 const auto triangulation = Triangle::triangulate(polygonUnderMouse->getShape());
2840 // begin undo-list
2841 myNet->getViewNet()->getUndoList()->begin(GUIIcon::POLY, TL("triangulate polygon"));
2842 // create every individual triangle
2843 for (const auto& triangle : triangulation) {
2844 auto basePolygon = polygonUnderMouse->getSumoBaseObject();
2846 basePolygon->addPositionVectorAttribute(SUMO_ATTR_SHAPE, triangle.getShape());
2847 // build shape
2848 additionalHandler.parseSumoBaseObject(basePolygon);
2849 }
2850 // delete original polygon
2851 myNet->deleteAdditional(polygonUnderMouse, myNet->getViewNet()->getUndoList());
2852 // end undo-list
2854 }
2855 return 1;
2856}
2857
2858
2859long
2860GNEViewNet::onCmdSetFirstGeometryPoint(FXObject*, FXSelector, void*) {
2861 GNEPoly* polygonUnderMouse = getPolygonAtPopupPosition();
2862 if (polygonUnderMouse) {
2863 polygonUnderMouse->changeFirstGeometryPoint(polygonUnderMouse->getVertexIndex(getPopupPosition(), false));
2864 }
2865
2866 return 1;
2867}
2868
2869
2870long
2871GNEViewNet::onCmdSimplifyShapeEdited(FXObject*, FXSelector, void*) {
2872 auto undoList = myNet->getViewNet()->getUndoList();
2873 // get shape edited under mouse
2875 if (shapeEdited) {
2876 // simplify edited shape using undo-redo
2877 undoList->begin(shapeEdited, TL("simplify edited shape"));
2878 shapeEdited->simplifyShapeEdited(undoList);
2879 undoList->end();
2880 }
2881 return 1;
2882}
2883
2884
2885long
2886GNEViewNet::onCmdStraightenShapeEdited(FXObject*, FXSelector, void*) {
2887 auto undoList = myNet->getViewNet()->getUndoList();
2888 // get shape edited under mouse
2890 if (shapeEdited) {
2891 // simplify edited shape using undo-redo
2892 undoList->begin(shapeEdited, TL("straighten edited shape"));
2893 shapeEdited->straigthenShapeEdited(undoList);
2894 undoList->end();
2895 }
2896 return 1;
2897}
2898
2899
2900long
2901GNEViewNet::onCmdCloseShapeEdited(FXObject*, FXSelector, void*) {
2902 auto undoList = myNet->getViewNet()->getUndoList();
2903 // get shape edited under mouse
2905 if (shapeEdited) {
2906 // close edited shape using undo-redo
2907 undoList->begin(shapeEdited, TL("simplify edited shape"));
2908 shapeEdited->closeShapeEdited(undoList);
2909 undoList->end();
2910 }
2911 return 1;
2912}
2913
2914
2915long
2916GNEViewNet::onCmdOpenShapeEdited(FXObject*, FXSelector, void*) {
2917 auto undoList = myNet->getViewNet()->getUndoList();
2918 // get shape edited under mouse
2920 if (shapeEdited) {
2921 // open edited shape using undo-redo
2922 undoList->begin(shapeEdited, TL("simplify edited shape"));
2923 shapeEdited->openShapeEdited(undoList);
2924 undoList->end();
2925 }
2926 return 1;
2927}
2928
2929
2930long
2932 auto undoList = myNet->getViewNet()->getUndoList();
2933 // get shape edited under mouse
2935 if (shapeEdited) {
2936 // get geometry point index under cursor
2937 const auto geometryPointIndex = shapeEdited->getGeometryPointUnderCursorShapeEdited();
2938 // set first geometry point in edited shape using undo-redo
2939 undoList->begin(shapeEdited, TL("simplify edited shape"));
2940 shapeEdited->setFirstGeometryPointShapeEdited(geometryPointIndex, undoList);
2941 undoList->end();
2942 }
2943 return 1;
2944}
2945
2946
2947long
2949 auto undoList = myNet->getViewNet()->getUndoList();
2950 // get shape edited under mouse
2952 if (shapeEdited) {
2953 // get geometry point index under cursor
2954 const auto geometryPointIndex = shapeEdited->getGeometryPointUnderCursorShapeEdited();
2955 // delete geometry point edited shape using undo-redo
2956 undoList->begin(shapeEdited, TL("simplify edited shape"));
2957 shapeEdited->deleteGeometryPointShapeEdited(geometryPointIndex, undoList);
2958 undoList->end();
2959 }
2960 return 1;
2961}
2962
2963
2964long
2965GNEViewNet::onCmdResetShapeEdited(FXObject*, FXSelector, void*) {
2966 auto undoList = myNet->getViewNet()->getUndoList();
2967 // get shape edited under mouse
2969 if (shapeEdited) {
2970 // simplify edited shape using undo-redo
2971 undoList->begin(shapeEdited, TL("simplify edited shape"));
2972 shapeEdited->resetShapeEdited(undoList);
2973 undoList->end();
2974 }
2975 return 1;
2976}
2977
2978
2979long
2980GNEViewNet::onCmdFinishShapeEdited(FXObject*, FXSelector, void*) {
2981 // the same behavior as when we press enter
2982 hotkeyEnter();
2983 return 1;
2984}
2985
2986
2987long
2988GNEViewNet::onCmdAttachPOI(FXObject*, FXSelector, void*) {
2989 // obtain POI at popup position
2991 if (POI && (POI->getTagProperty()->getTag() != GNE_TAG_POILANE)) {
2992 // declare additional handler
2993 GNEAdditionalHandler additionalHandler(myNet, POI->getFilename(), myViewParent->getGNEAppWindows()->isUndoRedoAllowed());
2994 // obtain lanes around POI boundary
2995 getObjectsInBoundary(POI->getCenteringBoundary());
2996 if (myViewObjectsSelector.getLaneFront() == nullptr) {
2997 WRITE_WARNINGF("No lanes around the % '%' to attach it", toString(SUMO_TAG_POI), POI->getID());
2998 } else {
2999 // obtain nearest lane to POI
3001 double minorPosOverLane = nearestLane->getLaneShape().nearest_offset_to_point2D(POI->getPositionInView());
3002 double minorLateralOffset = nearestLane->getLaneShape().positionAtOffset(minorPosOverLane).distanceTo(POI->getPositionInView());
3003 for (const auto& lane : myViewObjectsSelector.getLanes()) {
3004 double posOverLane = lane->getLaneShape().nearest_offset_to_point2D(POI->getPositionInView());
3005 double lateralOffset = lane->getLaneShape().positionAtOffset(posOverLane).distanceTo(POI->getPositionInView());
3006 if (lateralOffset < minorLateralOffset) {
3007 minorPosOverLane = posOverLane;
3008 minorLateralOffset = lateralOffset;
3009 nearestLane = lane;
3010 }
3011 }
3012 // get sumo base object of POI (And all common attributes)
3013 CommonXMLStructure::SumoBaseObject* POIBaseObject = POI->getSumoBaseObject();
3014 // add specific attributes
3015 POIBaseObject->addStringAttribute(SUMO_ATTR_LANE, nearestLane->getID());
3016 POIBaseObject->addDoubleAttribute(SUMO_ATTR_POSITION, minorPosOverLane);
3017 POIBaseObject->addBoolAttribute(SUMO_ATTR_FRIENDLY_POS, false);
3018 POIBaseObject->addDoubleAttribute(SUMO_ATTR_POSITION_LAT, 0);
3019 // remove POI
3020 myUndoList->begin(POI, TL("attach POI into lane"));
3022 // add new POI use route handler
3023 additionalHandler.parseSumoBaseObject(POIBaseObject);
3024 myUndoList->end();
3025 }
3026 }
3027 return 1;
3028}
3029
3030
3031long
3032GNEViewNet::onCmdReleasePOI(FXObject*, FXSelector, void*) {
3033 // obtain POI at popup position
3035 if (POI && (POI->getTagProperty()->getTag() == GNE_TAG_POILANE)) {
3036 // declare additional handler
3037 GNEAdditionalHandler additionalHandler(myNet, POI->getFilename(), myViewParent->getGNEAppWindows()->isUndoRedoAllowed());
3038 // get sumo base object of POI (And all common attributes)
3039 CommonXMLStructure::SumoBaseObject* POIBaseObject = POI->getSumoBaseObject();
3040 // add specific attributes
3041 POIBaseObject->addDoubleAttribute(SUMO_ATTR_X, POI->getPositionInView().x());
3042 POIBaseObject->addDoubleAttribute(SUMO_ATTR_Y, POI->getPositionInView().y());
3043 // remove POI
3044 myUndoList->begin(POI, TL("release POI from lane"));
3046 // add new POI use route handler
3047 additionalHandler.parseSumoBaseObject(POIBaseObject);
3048 myUndoList->end();
3049 }
3050 return 1;
3051}
3052
3053
3054long
3055GNEViewNet::onCmdTransformPOI(FXObject*, FXSelector, void*) {
3056 // obtain POI at popup position
3058 if (POI && (POI->getTagProperty()->getTag() != SUMO_TAG_POI)) {
3059 // declare additional handler
3060 GNEAdditionalHandler additionalHandler(myNet, POI->getFilename(), myViewParent->getGNEAppWindows()->isUndoRedoAllowed());
3061 // get sumo base object of POI (And all common attributes)
3062 CommonXMLStructure::SumoBaseObject* POIBaseObject = POI->getSumoBaseObject();
3063 // add specific attributes
3064 POIBaseObject->addDoubleAttribute(SUMO_ATTR_X, POI->getPositionInView().x());
3065 POIBaseObject->addDoubleAttribute(SUMO_ATTR_Y, POI->getPositionInView().y());
3066 // remove POI
3067 myUndoList->begin(POI, TL("transform to POI"));
3069 // add new POI use route handler
3070 additionalHandler.parseSumoBaseObject(POIBaseObject);
3071 myUndoList->end();
3072 }
3073 return 1;
3074}
3075
3076
3077long
3078GNEViewNet::onCmdTransformPOIGEO(FXObject*, FXSelector, void*) {
3079 // obtain POI at popup position
3081 if (POI && (POI->getTagProperty()->getTag() != GNE_TAG_POIGEO)) {
3082 // declare additional handler
3083 GNEAdditionalHandler additionalHandler(myNet, POI->getFilename(), myViewParent->getGNEAppWindows()->isUndoRedoAllowed());
3084 // get sumo base object of POI (And all common attributes)
3085 CommonXMLStructure::SumoBaseObject* POIBaseObject = POI->getSumoBaseObject();
3086 // calculate cartesian position
3087 Position GEOPosition = POI->getPositionInView();
3089 POIBaseObject->addDoubleAttribute(SUMO_ATTR_LON, GEOPosition.x());
3090 POIBaseObject->addDoubleAttribute(SUMO_ATTR_LAT, GEOPosition.y());
3091 // remove POI
3092 myUndoList->begin(POI, TL("transform to POI GEO"));
3094 // add new POI use route handler
3095 additionalHandler.parseSumoBaseObject(POIBaseObject);
3096 myUndoList->end();
3097 }
3098 return 1;
3099}
3100
3101
3102long
3103GNEViewNet::onCmdReverse(FXObject*, FXSelector, void*) {
3104 // obtain demand element at popup position
3106 if (demandElement) {
3107 // begin undo list
3108 myUndoList->begin(demandElement, TLF("reverse % '%'", demandElement->getTagStr(), demandElement->getID()));
3109 GNERouteHandler::reverse(demandElement);
3110 myUndoList->end();
3111 }
3112 return 1;
3113}
3114
3115
3116long
3117GNEViewNet::onCmdAddReverse(FXObject*, FXSelector, void*) {
3118 // obtain demand element at popup position
3120 if (demandElement) {
3121 // begin undo list
3122 myUndoList->begin(demandElement, TLF("add reverse '%'", demandElement->getTagStr()));
3123 GNERouteHandler::addReverse(demandElement);
3124 myUndoList->end();
3125 }
3126 return 1;
3127}
3128
3129
3130long
3131GNEViewNet::onCmdSetCustomGeometryPoint(FXObject*, FXSelector, void*) {
3132 // get element at popup position
3136 // check element
3137 if (edge != nullptr) {
3138 // make a copy of edge geometry
3139 auto edgeGeometry = edge->getNBEdge()->getGeometry();
3140 // get index position
3141 const int index = edgeGeometry.indexOfClosest(getPositionInformation(), true);
3142 // edit position using GNEGeometryPointDialog
3143 const auto geometryPointDialog = GNEGeometryPointDialog(myViewParent->getGNEAppWindows(), edgeGeometry[index]);
3144 // now check position
3145 if ((geometryPointDialog.getResult() == GNEDialog::Result::ACCEPT) && (geometryPointDialog.getEditedPosition() != edgeGeometry[index])) {
3146 // update new position
3147 edgeGeometry[index] = geometryPointDialog.getEditedPosition();
3148 // begin undo list
3149 myUndoList->begin(edge, TL("change edge Geometry Point position"));
3150 // continue depending of index
3151 if (index == 0) {
3152 // change shape start
3154 } else if (index == ((int)edgeGeometry.size() - 1)) {
3155 // change shape end
3157 } else {
3158 // remove front and back geometry points
3159 edgeGeometry.pop_front();
3160 edgeGeometry.pop_back();
3161 // change shape
3163 }
3164 // end undo list
3165 myUndoList->end();
3166 }
3167 } else if (poly != nullptr) {
3168 // make a copy of polygon geometry
3169 PositionVector polygonGeometry = poly->getShape();
3170 // get index position
3171 const int index = polygonGeometry.indexOfClosest(getPositionInformation(), true);
3172 // edit position using GNEGeometryPointDialog
3173 const auto geometryPointDialog = GNEGeometryPointDialog(myViewParent->getGNEAppWindows(), polygonGeometry[index]);
3174 // now check position
3175 if ((geometryPointDialog.getResult() == GNEDialog::Result::ACCEPT) && (geometryPointDialog.getEditedPosition() != polygonGeometry[index])) {
3176 // update new position
3177 polygonGeometry[index] = geometryPointDialog.getEditedPosition();
3178 // begin undo list
3179 myUndoList->begin(poly, TL("change polygon Geometry Point position"));
3180 // change shape
3182 // end undo list
3183 myUndoList->end();
3184 }
3185 } else if (TAZ != nullptr) {
3186 // make a copy of TAZ geometry
3187 PositionVector TAZGeometry = TAZ->getAdditionalGeometry().getShape();
3188 // get index position
3189 const int index = TAZGeometry.indexOfClosest(getPositionInformation(), true);
3190 // edit position using GNEGeometryPointDialog
3191 const auto geometryPointDialog = GNEGeometryPointDialog(myViewParent->getGNEAppWindows(), TAZGeometry[index]);
3192 // now check position
3193 if ((geometryPointDialog.getResult() == GNEDialog::Result::ACCEPT) && (geometryPointDialog.getEditedPosition() != TAZGeometry[index])) {
3194 // update new position
3195 TAZGeometry[index] = geometryPointDialog.getEditedPosition();
3196 // begin undo list
3197 myUndoList->begin(TAZ, TL("change TAZ Geometry Point position"));
3198 // change shape
3200 // end undo list
3201 myUndoList->end();
3202 }
3203 }
3204 return 1;
3205}
3206
3207
3208long
3209GNEViewNet::onCmdResetEndPoints(FXObject*, FXSelector, void*) {
3210 // get lane at popup position
3211 GNELane* laneAtPopupPosition = getLaneAtPopupPosition();
3212 // check element
3213 if (laneAtPopupPosition != nullptr) {
3214 // get parent edge
3215 GNEEdge* edge = laneAtPopupPosition->getParentEdge();
3216 // check if edge is selected
3217 if (edge->isAttributeCarrierSelected()) {
3218 // get selected edges
3219 const auto selectedEdges = myNet->getAttributeCarriers()->getSelectedEdges();
3220 // begin undo list
3221 myUndoList->begin(edge, TL("reset end points of selected edges"));
3222 // iterate over edges
3223 for (const auto& selectedEdge : selectedEdges) {
3224 // reset both end points
3225 selectedEdge->setAttribute(GNE_ATTR_SHAPE_START, "", myUndoList);
3226 selectedEdge->setAttribute(GNE_ATTR_SHAPE_END, "", myUndoList);
3227 }
3228 // end undo list
3229 myUndoList->end();
3230 } else {
3231 // begin undo list
3232 myUndoList->begin(edge, TL("reset end points of edge '") + edge->getID());
3233 // reset both end points
3236 // end undo list
3237 myUndoList->end();
3238 }
3239 }
3240 return 1;
3241}
3242
3243
3244long
3245GNEViewNet::onCmdDuplicateLane(FXObject*, FXSelector, void*) {
3246 GNELane* laneAtPopupPosition = getLaneAtPopupPosition();
3247 if (laneAtPopupPosition != nullptr) {
3248 // when duplicating an unselected lane, keep all connections as they
3249 // are, otherwise recompute them
3250 if (laneAtPopupPosition->isAttributeCarrierSelected()) {
3251 myUndoList->begin(laneAtPopupPosition, TL("duplicate selected lanes"));
3252 const auto selectedLanes = myNet->getAttributeCarriers()->getSelectedLanes();
3253 for (const auto& lane : selectedLanes) {
3254 myNet->duplicateLane(lane, myUndoList, true);
3255 }
3256 myUndoList->end();
3257 } else {
3258 myUndoList->begin(laneAtPopupPosition, TL("duplicate lane"));
3259 myNet->duplicateLane(laneAtPopupPosition, myUndoList, false);
3260 myUndoList->end();
3261 }
3262 }
3263 return 1;
3264}
3265
3266
3267long
3268GNEViewNet::onCmdEditLaneShape(FXObject*, FXSelector, void*) {
3269 // Obtain lane under mouse
3271 if (lane) {
3273 }
3274 // destroy pop-up and update view Net
3275 destroyPopup();
3276 setFocus();
3277 return 1;
3278}
3279
3280
3281long
3282GNEViewNet::onCmdResetLaneCustomShape(FXObject*, FXSelector, void*) {
3283 GNELane* laneAtPopupPosition = getLaneAtPopupPosition();
3284 if (laneAtPopupPosition != nullptr) {
3285 // when duplicating an unselected lane, keep all connections as they
3286 // are, otherwise recompute them
3287 if (laneAtPopupPosition->isAttributeCarrierSelected()) {
3288 myUndoList->begin(laneAtPopupPosition, TL("reset custom lane shapes"));
3289 const auto selectedLanes = myNet->getAttributeCarriers()->getSelectedLanes();
3290 for (const auto& lane : selectedLanes) {
3291 lane->setAttribute(SUMO_ATTR_CUSTOMSHAPE, "", myUndoList);
3292 }
3293 myUndoList->end();
3294 } else {
3295 myUndoList->begin(laneAtPopupPosition, TL("reset custom lane shape"));
3296 laneAtPopupPosition->setAttribute(SUMO_ATTR_CUSTOMSHAPE, "", myUndoList);
3297 myUndoList->end();
3298 }
3299 }
3300 return 1;
3301}
3302
3303
3304long
3305GNEViewNet::onCmdResetOppositeLane(FXObject*, FXSelector, void*) {
3306 GNELane* laneAtPopupPosition = getLaneAtPopupPosition();
3307 if (laneAtPopupPosition != nullptr) {
3308 // when duplicating an unselected lane, keep all connections as they
3309 // are, otherwise recompute them
3310 if (laneAtPopupPosition->isAttributeCarrierSelected()) {
3311 myUndoList->begin(laneAtPopupPosition, TL("reset opposite lanes"));
3312 const auto selectedLanes = myNet->getAttributeCarriers()->getSelectedLanes();
3313 for (const auto& lane : selectedLanes) {
3314 lane->setAttribute(GNE_ATTR_OPPOSITE, "", myUndoList);
3315 }
3316 myUndoList->end();
3317 } else {
3318 myUndoList->begin(laneAtPopupPosition, TL("reset opposite lane"));
3319 laneAtPopupPosition->setAttribute(GNE_ATTR_OPPOSITE, "", myUndoList);
3320 myUndoList->end();
3321 }
3322 }
3323 return 1;
3324}
3325
3326
3327long
3328GNEViewNet::onCmdLaneOperation(FXObject*, FXSelector sel, void*) {
3329 GNELane* laneAtPopupPosition = getLaneAtPopupPosition();
3330 if (laneAtPopupPosition) {
3331 // check lane operation
3332 switch (FXSELID(sel)) {
3334 return restrictLane(laneAtPopupPosition, SVC_PEDESTRIAN);
3336 return restrictLane(laneAtPopupPosition, SVC_BICYCLE);
3338 return restrictLane(laneAtPopupPosition, SVC_BUS);
3340 return restrictLane(laneAtPopupPosition, SVC_IGNORING);
3342 return addRestrictedLane(laneAtPopupPosition, SVC_PEDESTRIAN, false);
3344 return addRestrictedLane(laneAtPopupPosition, SVC_BICYCLE, false);
3346 return addRestrictedLane(laneAtPopupPosition, SVC_BUS, false);
3348 return addRestrictedLane(laneAtPopupPosition, SVC_IGNORING, true);
3350 return addRestrictedLane(laneAtPopupPosition, SVC_IGNORING, false);
3352 return removeRestrictedLane(laneAtPopupPosition, SVC_PEDESTRIAN);
3354 return removeRestrictedLane(laneAtPopupPosition, SVC_BICYCLE);
3356 return removeRestrictedLane(laneAtPopupPosition, SVC_BUS);
3358 return removeRestrictedLane(laneAtPopupPosition, SVC_IGNORING);
3359 default:
3360 return 0;
3361 }
3362 } else {
3363 return 0;
3364 }
3365}
3366
3367
3368long
3369GNEViewNet::onCmdLaneReachability(FXObject* menu, FXSelector, void*) {
3370 GNELane* laneAtPopupPosition = getLaneAtPopupPosition();
3371 if (laneAtPopupPosition != nullptr) {
3372 // obtain vClass
3373 const SUMOVehicleClass vClass = SumoVehicleClassStrings.get(dynamic_cast<FXMenuCommand*>(menu)->getText().text());
3374 // calculate reachability
3376 // select all lanes with reachability greater than 0
3377 myUndoList->begin(laneAtPopupPosition, TL("select lane reachability"));
3378 for (const auto& edge : myNet->getAttributeCarriers()->getEdges()) {
3379 for (const auto& lane : edge.second->getChildLanes()) {
3380 if (lane->getReachability() >= 0) {
3381 lane->setAttribute(GNE_ATTR_SELECTED, "true", myUndoList);
3382 }
3383 }
3384 }
3385 myUndoList->end();
3386 }
3387 return 1;
3388}
3389
3390
3391long
3392GNEViewNet::onCmdOpenAdditionalDialog(FXObject*, FXSelector, void*) {
3393 // retrieve additional under cursor
3395 // check if additional can open dialog
3396 if (addtional && addtional->getTagProperty()->hasDialog()) {
3397 addtional->openAdditionalDialog();
3398 }
3399 return 1;
3400}
3401
3402
3403void
3405 FXEvent* evt = (FXEvent*)eventData;
3406 // process click
3407 destroyPopup();
3408 setFocus();
3409 myChanger->onLeftBtnPress(eventData);
3410 grab();
3411 // Check there are double click
3412 if (evt->click_count == 2) {
3413 handle(this, FXSEL(SEL_DOUBLECLICKED, 0), eventData);
3414 }
3415}
3416
3417
3418void
3420 // first check if we're panning
3421 if (myPanning) {
3422 // move view
3425 } else {
3426 // declare flags
3427 bool cursorMoveView = false;
3428 bool cursorInspect = false;
3429 bool cursorSelect = false;
3430 bool cursorMoveElement = false;
3431 bool cursorDelete = false;
3432 // continue depending of supermode
3434 // move view
3440 cursorMoveView = true;
3441 }
3442 // specific mode
3444 cursorInspect = true;
3446 cursorSelect = true;
3448 cursorMoveElement = true;
3450 cursorDelete = true;
3451 }
3453 // move view
3457 cursorMoveView = true;
3458 }
3459 // specific mode
3461 cursorInspect = true;
3463 cursorSelect = true;
3465 cursorMoveElement = true;
3467 cursorDelete = true;
3468 }
3469 } else if (myEditModes.isCurrentSupermodeData()) {
3470 // move view
3472 cursorMoveView = true;
3473 }
3474 // specific mode
3476 cursorInspect = true;
3478 cursorSelect = true;
3480 cursorDelete = true;
3481 }
3482 }
3483 // set cursor
3484 if (myMouseButtonKeyPressed.controlKeyPressed() && cursorMoveView) {
3485 // move view cursor if control key is pressed
3488 } else if (cursorInspect) {
3489 // special case for inspect lanes
3491 // inspect lane cursor
3494 } else {
3495 // inspect cursor
3498 }
3499 } else if (cursorSelect) {
3500 // special case for select lanes
3502 // select lane cursor
3505 } else {
3506 // select cursor
3509 }
3510 } else if (cursorMoveElement) {
3511 // move cursor
3514 } else if (cursorDelete) {
3515 // delete cursor
3518 } else {
3519 // default cursor
3522 }
3523 }
3524}
3525
3526
3527int
3529 // udpdate drawing toggle
3530 if (myDrawingToggle > 10000) {
3531 myDrawingToggle = 0;
3532 } else {
3534 }
3535 // set default scale
3537 // calculate boundary extremes
3538 const float minB[2] = { (float)bound.xmin(), (float)bound.ymin() };
3539 const float maxB[2] = { (float)bound.xmax(), (float)bound.ymax() };
3540 // reset gl line to 1
3541 glLineWidth(1);
3542 // set drawing modes
3543 glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
3544 glEnable(GL_POLYGON_OFFSET_FILL);
3545 glEnable(GL_POLYGON_OFFSET_LINE);
3546 // draw all elements between minB and maxB, obtain objects included in minB and maxB
3547 return myGrid->Search(minB, maxB, *myVisualizationSettings);
3548}
3549
3550
3551void
3553 // depending of the visualizationSettings, enable or disable check box show grid
3555 // change show grid
3558 // change to true
3561 // update show grid buttons
3564 }
3565 // draw grid only in network and demand mode
3567 paintGLGrid();
3568 }
3569 } else {
3570 // change show grid
3573 // change to false
3576 // update show grid buttons
3579 }
3580 }
3581}
3582
3583
3584long
3585GNEViewNet::onCmdResetEdgeEndPoints(FXObject*, FXSelector, void*) {
3586 // Obtain junction under mouse
3588 if (junction) {
3589 myUndoList->begin(GUIIcon::EDGE, TL("reset edge endpoints"));
3590 // are, otherwise recompute them
3591 if (junction->isAttributeCarrierSelected()) {
3592 const auto selectedJunctions = myNet->getAttributeCarriers()->getSelectedJunctions();
3593 for (const auto& selectedJunction : selectedJunctions) {
3594 // reset shape end from incoming edges
3595 for (const auto& incomingEdge : selectedJunction->getGNEIncomingEdges()) {
3596 incomingEdge->setAttribute(GNE_ATTR_SHAPE_END, "", myUndoList);
3597 }
3598 // reset shape start from outgoing edges
3599 for (const auto& outgoingEdge : selectedJunction->getGNEOutgoingEdges()) {
3600 outgoingEdge->setAttribute(GNE_ATTR_SHAPE_START, "", myUndoList);
3601 }
3602 }
3603 } else {
3604 // reset shape end from incoming edges
3605 for (const auto& incomingEdge : junction->getGNEIncomingEdges()) {
3606 incomingEdge->setAttribute(GNE_ATTR_SHAPE_END, "", myUndoList);
3607 }
3608 // reset shape start from outgoing edges
3609 for (const auto& outgoingEdge : junction->getGNEOutgoingEdges()) {
3610 outgoingEdge->setAttribute(GNE_ATTR_SHAPE_START, "", myUndoList);
3611 }
3612 }
3613 myUndoList->end();
3614 }
3615 // destroy pop-up and set focus in view net
3616 destroyPopup();
3617 setFocus();
3618 return 1;
3619}
3620
3621
3622long
3623GNEViewNet::onCmdEditJunctionShape(FXObject*, FXSelector, void*) {
3624 // Obtain junction under mouse
3626 if (junction) {
3627 // check if network has to be updated
3628 if (junction->getNBNode()->getShape().size() == 0) {
3629 // recompute the whole network
3631 }
3632 // if grid is enabled, show warning
3634 WRITE_WARNING(TL("Grid is still active, press ctrl+g to deactivate"));
3635 }
3636 // start edit custom shape
3638 }
3639 // destroy pop-up and set focus in view net
3640 destroyPopup();
3641 setFocus();
3642 return 1;
3643}
3644
3645
3646long
3647GNEViewNet::onCmdResetJunctionShape(FXObject*, FXSelector, void*) {
3648 // Obtain junction under mouse
3650 if (junction) {
3651 // are, otherwise recompute them
3652 if (junction->isAttributeCarrierSelected()) {
3653 myUndoList->begin(junction, TL("reset custom junction shapes"));
3654 const auto selectedJunctions = myNet->getAttributeCarriers()->getSelectedJunctions();
3655 for (const auto& selectedJunction : selectedJunctions) {
3656 selectedJunction->setAttribute(SUMO_ATTR_SHAPE, "", myUndoList);
3657 }
3658 myUndoList->end();
3659 } else {
3660 myUndoList->begin(junction, TL("reset custom junction shape"));
3661 junction->setAttribute(SUMO_ATTR_SHAPE, "", myUndoList);
3662 myUndoList->end();
3663 }
3664 }
3665 // destroy pop-up and set focus in view net
3666 destroyPopup();
3667 setFocus();
3668 return 1;
3669}
3670
3671
3672long
3673GNEViewNet::onCmdReplaceJunction(FXObject*, FXSelector, void*) {
3675 if (junction != nullptr) {
3677 }
3678 // destroy pop-up and set focus in view net
3679 destroyPopup();
3680 setFocus();
3681 return 1;
3682}
3683
3684
3685long
3686GNEViewNet::onCmdSplitJunction(FXObject*, FXSelector, void*) {
3688 if (junction != nullptr) {
3689 myNet->splitJunction(junction, false, myUndoList);
3690 }
3691 // destroy pop-up and set focus in view net
3692 destroyPopup();
3693 setFocus();
3694 return 1;
3695}
3696
3697
3698long
3699GNEViewNet::onCmdSplitJunctionReconnect(FXObject*, FXSelector, void*) {
3701 if (junction != nullptr) {
3702 myNet->splitJunction(junction, true, myUndoList);
3703 }
3704 // destroy pop-up and set focus in view net
3705 destroyPopup();
3706 setFocus();
3707 return 1;
3708}
3709
3710long
3711GNEViewNet::onCmdSelectRoundabout(FXObject*, FXSelector, void*) {
3713 if (junction != nullptr) {
3714 myNet->selectRoundabout(junction, myUndoList);
3715 }
3716 // destroy pop-up and set focus in view net
3717 destroyPopup();
3718 setFocus();
3719 return 1;
3720}
3721
3722long
3723GNEViewNet::onCmdConvertRoundabout(FXObject*, FXSelector, void*) {
3725 if (junction != nullptr) {
3726 myNet->createRoundabout(junction, myUndoList);
3727 }
3728 // destroy pop-up and set focus in view net
3729 destroyPopup();
3730 setFocus();
3731 return 1;
3732}
3733
3734
3735long
3736GNEViewNet::onEnterConvertRoundabout(FXObject*, FXSelector, void*) {
3738 update();
3739 return 1;
3740}
3741
3742
3743long
3744GNEViewNet::onLeaveConvertRoundabout(FXObject*, FXSelector, void*) {
3746 update();
3747 return 1;
3748}
3749
3750
3751long
3752GNEViewNet::onCmdClearConnections(FXObject*, FXSelector, void*) {
3754 if (junction != nullptr) {
3755 // make sure we do not inspect the connection will it is being deleted
3758 }
3759 // make sure that connections isn't the front attribute
3760 const auto frontElements = myMarkFrontElements.getACs();
3761 for (const auto& AC : frontElements) {
3762 if (AC->getTagProperty()->getTag() == SUMO_TAG_CONNECTION) {
3763 AC->unmarkForDrawingFront();
3764 }
3765 }
3766 // check if we're handling a selection
3767 if (junction->isAttributeCarrierSelected()) {
3768 const auto selectedJunctions = myNet->getAttributeCarriers()->getSelectedJunctions();
3769 myUndoList->begin(GUIIcon::CONNECTION, TL("clear connections of selected junctions"));
3770 for (const auto& selectedJunction : selectedJunctions) {
3771 myNet->clearJunctionConnections(selectedJunction, myUndoList);
3772 }
3773 myUndoList->end();
3774 } else {
3776 }
3777 }
3778 // destroy pop-up and set focus in view net
3779 destroyPopup();
3780 setFocus();
3781 return 1;
3782}
3783
3784
3785long
3786GNEViewNet::onCmdResetConnections(FXObject*, FXSelector, void*) {
3788 if (junction != nullptr) {
3789 // make sure we do not inspect the connection will it is being deleted
3792 }
3793 // make sure that connections isn't the front attribute
3794 const auto frontElements = myMarkFrontElements.getACs();
3795 for (const auto& AC : frontElements) {
3796 if (AC->getTagProperty()->getTag() == SUMO_TAG_CONNECTION) {
3797 AC->unmarkForDrawingFront();
3798 }
3799 }
3800 // check if we're handling a selection
3801 if (junction->isAttributeCarrierSelected()) {
3802 const auto selectedJunctions = myNet->getAttributeCarriers()->getSelectedJunctions();
3803 myUndoList->begin(GUIIcon::CONNECTION, TL("reset connections of selected junctions"));
3804 for (const auto& selectedJunction : selectedJunctions) {
3805 myNet->resetJunctionConnections(selectedJunction, myUndoList);
3806 }
3807 myUndoList->end();
3808 } else {
3810 }
3811 }
3812 // destroy pop-up and set focus in view net
3813 destroyPopup();
3814 setFocus();
3815 return 1;
3816}
3817
3818
3819long
3820GNEViewNet::onCmdAddTLS(FXObject*, FXSelector, void*) {
3822 if (junction != nullptr) {
3823 // check if we're adding TLS in multiple junctions
3824 if (junction->isAttributeCarrierSelected()) {
3825 const auto selectedJunctions = myNet->getAttributeCarriers()->getSelectedJunctions();
3826 myNet->getViewNet()->getUndoList()->begin(GUIIcon::MODETLS, TL("add TLS in multiple junctions"));
3827 for (const auto& selectedJunction : selectedJunctions) {
3828 selectedJunction->setAttribute(SUMO_ATTR_TYPE, "traffic_light", myUndoList);
3829 }
3831 } else {
3832 // change junction type
3833 junction->setAttribute(SUMO_ATTR_TYPE, "traffic_light", myUndoList);
3834 // change to TLS Mode
3836 // set junction in TLS mode
3838 }
3839 }
3840 // destroy pop-up and set focus in view net
3841 destroyPopup();
3842 setFocus();
3843 return 1;
3844}
3845
3846
3847long
3848GNEViewNet::onCmdAddJoinTLS(FXObject*, FXSelector, void*) {
3850 if (junction != nullptr) {
3851 // check if we're adding TLS in multiple junctions
3852 if (junction->isAttributeCarrierSelected()) {
3853 myNet->getViewNet()->getUndoList()->begin(GUIIcon::MODETLS, TL("add TLS in multiple junctions"));
3854 }
3855 // change junction type
3856 junction->setAttribute(SUMO_ATTR_TYPE, "traffic_light", myUndoList);
3857 // if TLS was sucesfully created, apply the same TLID to other selected junctions
3858 if (junction->getAttribute(SUMO_ATTR_TLID).size() > 0) {
3859 const auto selectedJunctions = myNet->getAttributeCarriers()->getSelectedJunctions();
3860 // iterate over all selected junctions
3861 for (const auto& selectedJunction : selectedJunctions) {
3862 // check that doesn't have a TL
3863 if (selectedJunction->getNBNode()->getControllingTLS().empty()) {
3864 selectedJunction->setAttribute(SUMO_ATTR_TYPE, "traffic_light", myUndoList);
3865 selectedJunction->setAttribute(SUMO_ATTR_TLID, junction->getAttribute(SUMO_ATTR_TLID), myUndoList);
3866 }
3867 }
3868 }
3869 // rename traffic light
3870 if (junction->getNBNode()->getControllingTLS().size() > 0) {
3871 const auto TLSDef = (*junction->getNBNode()->getControllingTLS().begin());
3872 if (!myNet->getTLLogicCont().exist(TLSDef->getID() + "_joined")) {
3873 myUndoList->add(new GNEChange_TLS(junction, TLSDef, TLSDef->getID() + "_joined"), true);
3874 }
3875 }
3876 // end undoList
3877 if (junction->isAttributeCarrierSelected()) {
3879 }
3880 // change to TLS Mode
3882 // set junction in TLS mode
3884 }
3885 // destroy pop-up and set focus in view net
3886 destroyPopup();
3887 setFocus();
3888 return 1;
3889}
3890
3891long
3892GNEViewNet::onCmdEditConnectionShape(FXObject*, FXSelector, void*) {
3893 // Obtain connection under mouse
3895 if (connection) {
3897 }
3898 // if grid is enabled, show warning
3900 WRITE_WARNING(TL("Grid is still active, press ctrl+g to deactivate"));
3901 }
3902 // destroy pop-up and update view Net
3903 destroyPopup();
3904 setFocus();
3905 return 1;
3906}
3907
3908
3909long
3910GNEViewNet::onCmdSmoothConnectionShape(FXObject*, FXSelector, void*) {
3911 // Obtain connection under mouse
3913 if (connection) {
3914 connection->smootShape();
3915 }
3916 // destroy pop-up and update view Net
3917 destroyPopup();
3918 setFocus();
3919 return 1;
3920}
3921
3922
3923long
3924GNEViewNet::onCmdEditCrossingShape(FXObject*, FXSelector, void*) {
3925 // Obtain crossing under mouse
3927 if (crossing) {
3928 // check if network has to be updated
3929 if (crossing->getParentJunctions().front()->getNBNode()->getShape().size() == 0) {
3930 // recompute the whole network
3932 }
3933 // if grid is enabled, show warning
3935 WRITE_WARNING(TL("Grid is still active, press ctrl+g to deactivate"));
3936 }
3937 // start edit custom shape
3939 }
3940 // destroy pop-up and update view Net
3941 destroyPopup();
3942 setFocus();
3943 return 1;
3944}
3945
3946
3947long
3948GNEViewNet::onCmdEditWalkingAreaShape(FXObject*, FXSelector, void*) {
3949 // Obtain walkingArea under mouse
3951 if (walkingArea) {
3952 // check if network has to be updated
3953 if (walkingArea->getParentJunctions().front()->getNBNode()->getShape().size() == 0) {
3954 // recompute the whole network
3956 // if grid is enabled, show warning
3958 WRITE_WARNING(TL("Grid is still active, press ctrl+g to deactivate"));
3959 }
3960 }
3961 // start edit custom shape
3963 }
3964 // destroy pop-up and update view Net
3965 destroyPopup();
3966 setFocus();
3967 return 1;
3968}
3969
3970
3971long
3972GNEViewNet::onCmdToggleSelectEdges(FXObject*, FXSelector sel, void*) {
3973 // Toggle menuCheckSelectEdges
3976 } else {
3978 }
3980 // set focus in menu check again, if this function was called clicking over menu check instead using alt+<key number>
3981 if (sel == FXSEL(SEL_COMMAND, MID_GNE_NETWORKVIEWOPTIONS_SELECTEDGES)) {
3983 }
3984 return 1;
3985}
3986
3987
3988long
3989GNEViewNet::onCmdToggleShowConnections(FXObject*, FXSelector sel, void*) {
3990 // Toggle menuCheckShowConnections
3993 } else {
3995 }
3997 // if show was enabled, init GNEConnections
4000 }
4001 // change flag "showLane2Lane" in myVisualizationSettings
4003 // Hide/show connections require recompute
4005 // Update viewNet to show/hide connections
4006 updateViewNet();
4007 // set focus in menu check again, if this function was called clicking over menu check instead using alt+<key number>
4008 if (sel == FXSEL(SEL_COMMAND, MID_GNE_NETWORKVIEWOPTIONS_SHOWCONNECTIONS)) {
4010 }
4011 return 1;
4012}
4013
4014
4015long
4016GNEViewNet::onCmdToggleHideConnections(FXObject*, FXSelector sel, void*) {
4017 // Toggle menuCheckHideConnections
4020 } else {
4022 }
4024 // Update viewNet to show/hide connections
4025 updateViewNet();
4026 // set focus in menu check again, if this function was called clicking over menu check instead using alt+<key number>
4027 if (sel == FXSEL(SEL_COMMAND, MID_GNE_NETWORKVIEWOPTIONS_HIDECONNECTIONS)) {
4029 }
4030 return 1;
4031}
4032
4033
4034long
4035GNEViewNet::onCmdToggleShowAdditionalSubElements(FXObject*, FXSelector sel, void*) {
4036 // Toggle menuCheckShowAdditionalSubElements
4039 } else {
4041 }
4043 // Update viewNet to show/hide sub elements
4044 updateViewNet();
4045 // set focus in menu check again, if this function was called clicking over menu check instead using alt+<key number>
4046 if (sel == FXSEL(SEL_COMMAND, MID_GNE_NETWORKVIEWOPTIONS_SHOWSUBADDITIONALS)) {
4048 }
4049 return 1;
4050}
4051
4052
4053long
4054GNEViewNet::onCmdToggleShowTAZElements(FXObject*, FXSelector sel, void*) {
4055 // Toggle menuCheckShowAdditionalSubElements
4058 } else {
4060 }
4062 // Update viewNet to show/hide TAZ elements
4063 updateViewNet();
4064 // set focus in menu check again, if this function was called clicking over menu check instead using alt+<key number>
4065 if (sel == FXSEL(SEL_COMMAND, MID_GNE_NETWORKVIEWOPTIONS_SHOWTAZELEMENTS)) {
4067 }
4068 return 1;
4069}
4070
4071
4072long
4073GNEViewNet::onCmdToggleExtendSelection(FXObject*, FXSelector sel, void*) {
4074 // Toggle menuCheckExtendSelection
4077 } else {
4079 }
4081 // Only update view
4082 updateViewNet();
4083 // set focus in menu check again, if this function was called clicking over menu check instead using alt+<key number>
4084 if (sel == FXSEL(SEL_COMMAND, MID_GNE_NETWORKVIEWOPTIONS_EXTENDSELECTION)) {
4086 }
4087 return 1;
4088}
4089
4090
4091long
4092GNEViewNet::onCmdToggleChangeAllPhases(FXObject*, FXSelector sel, void*) {
4093 // Toggle menuCheckChangeAllPhases
4096 } else {
4098 }
4100 // Only update view
4101 updateViewNet();
4102 // set focus in menu check again, if this function was called clicking over menu check instead using alt+<key number>
4103 if (sel == FXSEL(SEL_COMMAND, MID_GNE_NETWORKVIEWOPTIONS_CHANGEALLPHASES)) {
4105 }
4106 return 1;
4107}
4108
4109
4110long
4111GNEViewNet::onCmdToggleShowGrid(FXObject*, FXSelector sel, void*) {
4112 // show or hide grid depending of myNetworkViewOptions.menuCheckToggleGrid
4117 } else {
4121 }
4124 // update view to show grid
4125 updateViewNet();
4126 // set focus in menu check again, if this function was called clicking over menu check instead using alt+<key number>
4127 if (sel == FXSEL(SEL_COMMAND, MID_GNE_NETWORKVIEWOPTIONS_TOGGLEGRID)) {
4129 } else if (sel == FXSEL(SEL_COMMAND, MID_GNE_DEMANDVIEWOPTIONS_SHOWGRID)) {
4131 }
4132 return 1;
4133}
4134
4135
4136long
4137GNEViewNet::onCmdToggleDrawJunctionShape(FXObject*, FXSelector sel, void*) {
4138 // toggle state
4140 // gui button has 'hide' semantics
4141 const bool hide = !myVisualizationSettings->drawJunctionShape;
4145
4149 // update view to show DrawJunctionShape
4150 updateViewNet();
4151 // set focus in menu check again, if this function was called clicking over menu check instead using alt+<key number>
4152 if (sel == FXSEL(SEL_COMMAND, MID_GNE_NETWORKVIEWOPTIONS_TOGGLEDRAWJUNCTIONSHAPE)) {
4154 } else if (sel == FXSEL(SEL_COMMAND, MID_GNE_DEMANDVIEWOPTIONS_TOGGLEDRAWJUNCTIONSHAPE)) {
4156 } else if (sel == FXSEL(SEL_COMMAND, MID_GNE_DATAVIEWOPTIONS_TOGGLEDRAWJUNCTIONSHAPE)) {
4158 }
4159 return 1;
4160}
4161
4162long
4163GNEViewNet::onCmdToggleDrawSpreadVehicles(FXObject*, FXSelector sel, void*) {
4164 // Toggle menuCheckShowDemandElements
4169 } else {
4172 }
4175 // declare edge set
4176 std::set<GNEEdge*> edgesToUpdate;
4177 // compute vehicle geometry
4178 for (const auto& vehicle : myNet->getAttributeCarriers()->getDemandElements().at(SUMO_TAG_VEHICLE)) {
4179 if (vehicle.second->getParentEdges().size() > 0) {
4180 edgesToUpdate.insert(vehicle.second->getParentEdges().front());
4181 } else if (vehicle.second->getChildDemandElements().size() > 0 && (vehicle.second->getChildDemandElements().front()->getTagProperty()->getTag() == GNE_TAG_ROUTE_EMBEDDED)) {
4182 edgesToUpdate.insert(vehicle.second->getChildDemandElements().front()->getParentEdges().front());
4183 }
4184 }
4185 for (const auto& routeFlow : myNet->getAttributeCarriers()->getDemandElements().at(GNE_TAG_FLOW_ROUTE)) {
4186 if (routeFlow.second->getParentEdges().size() > 0) {
4187 edgesToUpdate.insert(routeFlow.second->getParentEdges().front());
4188 } else if (routeFlow.second->getChildDemandElements().size() > 0 && (routeFlow.second->getChildDemandElements().front()->getTagProperty()->getTag() == GNE_TAG_ROUTE_EMBEDDED)) {
4189 edgesToUpdate.insert(routeFlow.second->getChildDemandElements().front()->getParentEdges().front());
4190 }
4191 }
4192 for (const auto& trip : myNet->getAttributeCarriers()->getDemandElements().at(SUMO_TAG_TRIP)) {
4193 if (trip.second->getParentEdges().size() > 0) {
4194 edgesToUpdate.insert(trip.second->getParentEdges().front());
4195 }
4196 }
4197 for (const auto& flow : myNet->getAttributeCarriers()->getDemandElements().at(SUMO_TAG_FLOW)) {
4198 if (flow.second->getParentEdges().size() > 0) {
4199 edgesToUpdate.insert(flow.second->getParentEdges().front());
4200 }
4201 }
4202 // update spread geometries of all edges
4203 for (const auto& edge : edgesToUpdate) {
4204 edge->updateVehicleSpreadGeometries();
4205 }
4206 // update view to show new vehicles positions
4207 updateViewNet();
4208 // set focus in menu check again, if this function was called clicking over menu check instead using alt+<key number>
4209 if (sel == FXSEL(SEL_COMMAND, MID_GNE_NETWORKVIEWOPTIONS_DRAWSPREADVEHICLES)) {
4211 } else if (sel == FXSEL(SEL_COMMAND, MID_GNE_DEMANDVIEWOPTIONS_DRAWSPREADVEHICLES)) {
4213 }
4214 return 1;
4215}
4216
4217
4218long
4219GNEViewNet::onCmdToggleMergeAutomatically(FXObject*, FXSelector sel, void*) {
4220 // Toggle menuCheckWarnAboutMerge
4223 } else {
4225 }
4227 // Only update view
4228 updateViewNet();
4229 // set focus in menu check again, if this function was called clicking over menu check instead using alt+<key number>
4230 if (sel == FXSEL(SEL_COMMAND, MID_GNE_NETWORKVIEWOPTIONS_MERGEAUTOMATICALLY)) {
4232 }
4233 return 1;
4234}
4235
4236
4237long
4238GNEViewNet::onCmdToggleShowJunctionBubbles(FXObject*, FXSelector sel, void*) {
4239 // Toggle menuCheckShowJunctionBubble
4242 } else {
4244 }
4246 // Only update view
4247 updateViewNet();
4248 // set focus in menu check again, if this function was called clicking over menu check instead using alt+<key number>
4249 if (sel == FXSEL(SEL_COMMAND, MID_GNE_NETWORKVIEWOPTIONS_SHOWBUBBLES)) {
4251 }
4252 return 1;
4253}
4254
4255
4256long
4257GNEViewNet::onCmdToggleMoveElevation(FXObject*, FXSelector sel, void*) {
4258 // Toggle menuCheckMoveElevation
4261 } else {
4263 }
4265 // Only update view
4266 updateViewNet();
4267 // set focus in menu check again, if this function was called clicking over menu check instead using alt+<key number>
4268 if (sel == FXSEL(SEL_COMMAND, MID_GNE_NETWORKVIEWOPTIONS_MOVEELEVATION)) {
4270 }
4271 return 1;
4272}
4273
4274
4275long
4276GNEViewNet::onCmdToggleChainEdges(FXObject*, FXSelector sel, void*) {
4277 // Toggle menuCheckMoveElevation
4280 } else {
4282 }
4284 // Only update view
4285 updateViewNet();
4286 // set focus in menu check again, if this function was called clicking over menu check instead using alt+<key number>
4287 if (sel == FXSEL(SEL_COMMAND, MID_GNE_NETWORKVIEWOPTIONS_CHAINEDGES)) {
4289 }
4290 return 1;
4291}
4292
4293
4294long
4295GNEViewNet::onCmdToggleAutoOppositeEdge(FXObject*, FXSelector sel, void*) {
4296 // Toggle menuCheckAutoOppositeEdge
4299 } else {
4301 }
4303 // Only update view
4304 updateViewNet();
4305 // set focus in menu check again, if this function was called clicking over menu check instead using alt+<key number>
4306 if (sel == FXSEL(SEL_COMMAND, MID_GNE_NETWORKVIEWOPTIONS_AUTOOPPOSITEEDGES)) {
4308 }
4309 return 1;
4310}
4311
4312
4313long
4315 // Toggle menuCheckHideNonInspectedDemandElements
4318 } else {
4320 }
4322 // Only update view
4323 updateViewNet();
4324 // set focus in menu check again, if this function was called clicking over menu check instead using alt+<key number>
4325 if (sel == FXSEL(SEL_COMMAND, MID_GNE_DEMANDVIEWOPTIONS_HIDENONINSPECTED)) {
4327 }
4328 return 1;
4329}
4330
4331
4332long
4333GNEViewNet::onCmdToggleShowOverlappedRoutes(FXObject*, FXSelector sel, void*) {
4334 // Toggle menuCheckShowOverlappedRoutes
4337 } else {
4339 }
4341 // Only update view
4342 updateViewNet();
4343 // set focus in menu check again, if this function was called clicking over menu check instead using alt+<key number>
4344 if (sel == FXSEL(SEL_COMMAND, MID_GNE_DEMANDVIEWOPTIONS_SHOWOVERLAPPEDROUTES)) {
4346 }
4347 return 1;
4348}
4349
4350
4351long
4352GNEViewNet::onCmdToggleHideShapes(FXObject*, FXSelector sel, void*) {
4353 // Toggle menuCheckHideShapes
4356 } else {
4358 }
4360 // Only update view
4361 updateViewNet();
4362 // set focus in menu check again, if this function was called clicking over menu check instead using alt+<key number>
4363 if (sel == FXSEL(SEL_COMMAND, MID_GNE_DEMANDVIEWOPTIONS_HIDESHAPES)) {
4365 }
4366 return 1;
4367}
4368
4369
4370long
4371GNEViewNet::onCmdToggleShowTrips(FXObject*, FXSelector sel, void*) {
4372 // Toggle menuCheckHideShapes
4375 } else {
4377 }
4379 // Only update view
4380 updateViewNet();
4381 // set focus in menu check again, if this function was called clicking over menu check instead using alt+<key number>
4382 if (sel == FXSEL(SEL_COMMAND, MID_GNE_DEMANDVIEWOPTIONS_SHOWTRIPS)) {
4384 }
4385 return 1;
4386}
4387
4388
4389long
4390GNEViewNet::onCmdToggleShowAllPersonPlans(FXObject*, FXSelector sel, void*) {
4391 // Toggle menuCheckShowAllPersonPlans
4394 } else {
4396 }
4398 // Only update view
4399 updateViewNet();
4400 // set focus in menu check again, if this function was called clicking over menu check instead using alt+<key number>
4401 if (sel == FXSEL(SEL_COMMAND, MID_GNE_DEMANDVIEWOPTIONS_SHOWALLPERSONPLANS)) {
4403 }
4404 return 1;
4405}
4406
4407
4408long
4409GNEViewNet::onCmdToggleLockPerson(FXObject*, FXSelector sel, void*) {
4410 // Toggle menuCheckLockPerson
4415 }
4417 // lock or unlock current inspected person depending of menuCheckLockPerson value
4419 // obtain locked person or person plan
4420 const GNEDemandElement* personOrPersonPlan = dynamic_cast<const GNEDemandElement*>(myInspectedElements.getFirstAC());
4421 if (personOrPersonPlan) {
4422 // lock person depending if casted demand element is either a person or a person plan
4423 if (personOrPersonPlan->getTagProperty()->isPerson()) {
4424 myDemandViewOptions.lockPerson(personOrPersonPlan);
4425 } else {
4426 myDemandViewOptions.lockPerson(personOrPersonPlan->getParentDemandElements().front());
4427 }
4428 }
4429 } else {
4430 // unlock current person
4432 }
4433 // update view
4434 updateViewNet();
4435 // set focus in menu check again, if this function was called clicking over menu check instead using alt+<key number>
4436 if (sel == FXSEL(SEL_COMMAND, MID_GNE_DEMANDVIEWOPTIONS_LOCKPERSON)) {
4438 }
4439 return 1;
4440}
4441
4442
4443long
4444GNEViewNet::onCmdToggleShowAllContainerPlans(FXObject*, FXSelector sel, void*) {
4445 // Toggle menuCheckShowAllContainerPlans
4448 } else {
4450 }
4452 // Only update view
4453 updateViewNet();
4454 // set focus in menu check again, if this function was called clicking over menu check instead using alt+<key number>
4455 if (sel == FXSEL(SEL_COMMAND, MID_GNE_DEMANDVIEWOPTIONS_SHOWALLCONTAINERPLANS)) {
4457 }
4458 return 1;
4459}
4460
4461
4462long
4463GNEViewNet::onCmdToggleLockContainer(FXObject*, FXSelector sel, void*) {
4464 // Toggle menuCheckLockContainer
4469 }
4471 // lock or unlock current inspected container depending of menuCheckLockContainer value
4473 // obtain locked container or container plan
4474 const GNEDemandElement* containerOrContainerPlan = dynamic_cast<const GNEDemandElement*>(myInspectedElements.getFirstAC());
4475 if (containerOrContainerPlan) {
4476 // lock container depending if casted demand element is either a container or a container plan
4477 if (containerOrContainerPlan->getTagProperty()->isContainer()) {
4478 myDemandViewOptions.lockContainer(containerOrContainerPlan);
4479 } else {
4480 myDemandViewOptions.lockContainer(containerOrContainerPlan->getParentDemandElements().front());
4481 }
4482 }
4483 } else {
4484 // unlock current container
4486 }
4487 // update view
4488 updateViewNet();
4489 // set focus in menu check again, if this function was called clicking over menu check instead using alt+<key number>
4490 if (sel == FXSEL(SEL_COMMAND, MID_GNE_DEMANDVIEWOPTIONS_LOCKCONTAINER)) {
4492 }
4493 return 1;
4494}
4495
4496
4497long
4498GNEViewNet::onCmdToggleShowAdditionals(FXObject*, FXSelector sel, void*) {
4499 // Toggle menuCheckShowAdditionals
4502 } else {
4504 }
4506 // Only update view
4507 updateViewNet();
4508 // set focus in menu check again, if this function was called clicking over menu check instead using alt+<key number>
4509 if (sel == FXSEL(SEL_COMMAND, MID_GNE_DATAVIEWOPTIONS_SHOWADDITIONALS)) {
4511 }
4512 return 1;
4513}
4514
4515
4516long
4517GNEViewNet::onCmdToggleShowShapes(FXObject*, FXSelector sel, void*) {
4518 // Toggle menuCheckShowShapes
4521 } else {
4523 }
4525 // Only update view
4526 updateViewNet();
4527 // set focus in menu check again, if this function was called clicking over menu check instead using alt+<key number>
4528 if (sel == FXSEL(SEL_COMMAND, MID_GNE_DATAVIEWOPTIONS_SHOWSHAPES)) {
4530 }
4531 return 1;
4532}
4533
4534
4535long
4536GNEViewNet::onCmdToggleShowDemandElementsNetwork(FXObject*, FXSelector sel, void*) {
4537 // Toggle menuCheckShowDemandElements
4540 } else {
4542 }
4544 // compute demand elements
4546 // update view to show demand elements
4547 updateViewNet();
4548 // set focus in menu check again, if this function was called clicking over menu check instead using alt+<key number>
4549 if (sel == FXSEL(SEL_COMMAND, MID_GNE_NETWORKVIEWOPTIONS_SHOWDEMANDELEMENTS)) {
4551 }
4552 return 1;
4553}
4554
4555
4556long
4557GNEViewNet::onCmdToggleShowDemandElementsData(FXObject*, FXSelector sel, void*) {
4558 // Toggle menuCheckShowDemandElements
4561 } else {
4563 }
4565 // compute demand elements
4567 // update view to show demand elements
4568 updateViewNet();
4569 // set focus in menu check again, if this function was called clicking over menu check instead using alt+<key number>
4570 if (sel == FXSEL(SEL_COMMAND, MID_GNE_DATAVIEWOPTIONS_SHOWDEMANDELEMENTS)) {
4572 }
4573 return 1;
4574}
4575
4576
4577long
4578GNEViewNet::onCmdToggleTAZRelDrawing(FXObject*, FXSelector sel, void*) {
4579 // Toggle menuCheckShowDemandElements
4582 } else {
4584 }
4586 // update view to show demand elements
4587 updateViewNet();
4588 // set focus in menu check again, if this function was called clicking over menu check instead using alt+<key number>
4589 if (sel == FXSEL(SEL_COMMAND, MID_GNE_DATAVIEWOPTIONS_TAZRELDRAWING)) {
4591 }
4592 return 1;
4593}
4594
4595
4596long
4597GNEViewNet::onCmdToggleTAZDrawFill(FXObject*, FXSelector sel, void*) {
4598 // Toggle menuCheckShowDemandElements
4601 } else {
4603 }
4605 // update view to show demand elements
4606 updateViewNet();
4607 // set focus in menu check again, if this function was called clicking over menu check instead using alt+<key number>
4608 if (sel == FXSEL(SEL_COMMAND, MID_GNE_DATAVIEWOPTIONS_TAZDRAWFILL)) {
4610 }
4611 return 1;
4612}
4613
4614
4615long
4616GNEViewNet::onCmdToggleTAZRelOnlyFrom(FXObject*, FXSelector sel, void*) {
4617 // Toggle menuCheckShowDemandElements
4620 } else {
4622 }
4624 // update view to show demand elements
4625 updateViewNet();
4626 // set focus in menu check again, if this function was called clicking over menu check instead using alt+<key number>
4627 if (sel == FXSEL(SEL_COMMAND, MID_GNE_DATAVIEWOPTIONS_TAZRELONLYFROM)) {
4629 }
4630 return 1;
4631}
4632
4633
4634long
4635GNEViewNet::onCmdToggleTAZRelOnlyTo(FXObject*, FXSelector sel, void*) {
4636 // Toggle menuCheckShowDemandElements
4639 } else {
4641 }
4643 // update view to show demand elements
4644 updateViewNet();
4645 // set focus in menu check again, if this function was called clicking over menu check instead using alt+<key number>
4646 if (sel == FXSEL(SEL_COMMAND, MID_GNE_DATAVIEWOPTIONS_TAZRELONLYTO)) {
4648 }
4649 return 1;
4650}
4651
4652
4653long
4654GNEViewNet::onCmdIntervalBarGenericDataType(FXObject*, FXSelector, void*) {
4656 return 1;
4657}
4658
4659
4660long
4661GNEViewNet::onCmdIntervalBarDataSet(FXObject*, FXSelector, void*) {
4663 return 1;
4664}
4665
4666
4667long
4668GNEViewNet::onCmdIntervalBarLimit(FXObject*, FXSelector, void*) {
4670 return 1;
4671}
4672
4673
4674long
4675GNEViewNet::onCmdIntervalBarSetBegin(FXObject*, FXSelector, void*) {
4677 return 1;
4678}
4679
4680
4681long
4682GNEViewNet::onCmdIntervalBarSetEnd(FXObject*, FXSelector, void*) {
4684 return 1;
4685}
4686
4687
4688long
4689GNEViewNet::onCmdIntervalBarSetParameter(FXObject*, FXSelector, void*) {
4691 return 1;
4692}
4693
4694
4695long
4696GNEViewNet::onCmdAddSelected(FXObject*, FXSelector, void*) {
4697 // only select if AC under cursor isn't previously selected
4699 if (AC && !AC->isAttributeCarrierSelected()) {
4701 }
4702 return 1;
4703}
4704
4705
4706long
4707GNEViewNet::onCmdRemoveSelected(FXObject*, FXSelector, void*) {
4708 // only unselect if AC under cursor isn't previously selected
4710 if (AC && AC->isAttributeCarrierSelected()) {
4712 }
4713 return 1;
4714}
4715
4716
4717long
4718GNEViewNet::onCmdAddEdgeSelected(FXObject*, FXSelector, void*) {
4719 // only select if edge under cursor isn't previously selected
4720 auto edge = myViewObjectsSelector.getEdgeFront();
4721 if (edge && !edge->isAttributeCarrierSelected()) {
4722 edge->selectAttributeCarrier();
4723 }
4724 return 1;
4725}
4726
4727
4728long
4729GNEViewNet::onCmdRemoveEdgeSelected(FXObject*, FXSelector, void*) {
4730 // only unselect if edge under cursor isn't previously selected
4731 auto edge = myViewObjectsSelector.getEdgeFront();
4732 if (edge && edge->isAttributeCarrierSelected()) {
4734 }
4735 return 1;
4736}
4737
4738
4739long
4740GNEViewNet::onCmdSetNeteditView(FXObject*, FXSelector sel, void*) {
4741 myEditModes.setView(FXSELID(sel));
4742 update();
4743 return 1;
4744}
4745
4746// ===========================================================================
4747// private
4748// ===========================================================================
4749
4750void
4752 // build supermode buttons
4754
4755 // build save elements buttons
4757
4758 // build time switch buttons
4760
4761 // build menu checks for Common checkable buttons
4763
4764 // build menu checks for Network checkable buttons
4766
4767 // build menu checks for Demand checkable buttons
4769
4770 // build menu checks of view options Data
4772
4773 // Create Vertical separator
4775 // XXX for some reason the vertical groove is not visible. adding more spacing to emphasize the separation
4778
4779 // build menu checks of view options Network
4781
4782 // build menu checks of view options Demand
4784
4785 // build menu checks of view options Data
4787
4788 // build interval bar
4790}
4791
4792
4793void
4795 // get menu checks
4797 // hide all checkbox of view options Network
4799 // hide all checkbox of view options Demand
4801 // hide all checkbox of view options Data
4803 // disable all common edit modes
4805 // disable all network edit modes
4807 // disable all network edit modes
4809 // hide interval bar
4811 // hide all frames
4813 // hide all menuchecks
4817 // In network mode, always show option "show grid", "draw spread vehicles" and "show demand elements"
4822 menuChecks.menuCheckToggleGrid->show();
4823 menuChecks.menuCheckToggleDrawJunctionShape->show();
4824 menuChecks.menuCheckDrawSpreadVehicles->show();
4825 menuChecks.menuCheckShowDemandElements->show();
4826 // show separator
4827 menuChecks.separator->show();
4828 // enable selected controls
4829 switch (myEditModes.networkEditMode) {
4830 // common modes
4836 // show view options
4842 // show menu checks
4843 menuChecks.menuCheckSelectEdges->show();
4844 menuChecks.menuCheckShowConnections->show();
4845 menuChecks.menuCheckShowAdditionalSubElements->show();
4846 menuChecks.menuCheckShowTAZElements->show();
4847 menuChecks.menuCheckShowJunctionBubble->show();
4848 // update lock menu bar
4850 // show
4851 break;
4861 // show view options
4864 menuChecks.menuCheckShowAdditionalSubElements->show();
4865 menuChecks.menuCheckShowTAZElements->show();
4866 menuChecks.menuCheckShowJunctionBubble->show();
4867 // show menu checks
4868 menuChecks.menuCheckSelectEdges->show();
4869 menuChecks.menuCheckShowConnections->show();
4870 break;
4876 // show view options
4883 // show menu checks
4884 menuChecks.menuCheckSelectEdges->show();
4885 menuChecks.menuCheckShowConnections->show();
4886 menuChecks.menuCheckExtendSelection->show();
4887 menuChecks.menuCheckShowAdditionalSubElements->show();
4888 menuChecks.menuCheckShowTAZElements->show();
4889 menuChecks.menuCheckShowJunctionBubble->show();
4890 break;
4891 // specific modes
4897 // show view options
4901 // show menu checks
4902 menuChecks.menuCheckChainEdges->show();
4903 menuChecks.menuCheckAutoOppositeEdge->show();
4904 menuChecks.menuCheckShowJunctionBubble->show();
4905 break;
4911 // show view options
4915 // show menu checks
4916 menuChecks.menuCheckMergeAutomatically->show();
4917 menuChecks.menuCheckShowJunctionBubble->show();
4918 menuChecks.menuCheckMoveElevation->show();
4919 break;
4925 break;
4931 // show view options
4933 // show menu checks
4934 menuChecks.menuCheckChangeAllPhases->show();
4935 break;
4941 // show view options
4943 // show menu checks
4944 menuChecks.menuCheckShowAdditionalSubElements->show();
4945 break;
4951 break;
4957 break;
4963 break;
4969 break;
4975 break;
4981 break;
4982 default:
4983 break;
4984 }
4985 // update menuChecks shorcuts
4986 menuChecks.updateShortcuts();
4987 // update common Network buttons
4989 // Update Network buttons
4991 // recalc toolbar
4994 // force repaint because different modes draw different things
4995 onPaint(nullptr, 0, nullptr);
4996 // finally update view
4997 updateViewNet();
4998}
4999
5000
5001void
5003 // get menu checks
5005 // hide all checkbox of view options Network
5007 // hide all checkbox of view options Demand
5009 // hide all checkbox of view options Data
5011 // disable all common edit modes
5013 // disable all Demand edit modes
5015 // disable all network edit modes
5017 // hide interval bar
5019 // hide all frames
5021 // hide all menuchecks
5025 // always show "hide shapes", "show grid", "draw spread vehicles", "show overlapped routes" and show/lock persons and containers
5036 menuChecks.menuCheckToggleGrid->show();
5037 menuChecks.menuCheckToggleDrawJunctionShape->show();
5038 menuChecks.menuCheckDrawSpreadVehicles->show();
5039 menuChecks.menuCheckHideShapes->show();
5040 menuChecks.menuCheckShowAllTrips->show();
5041 menuChecks.menuCheckShowAllPersonPlans->show();
5042 menuChecks.menuCheckLockPerson->show();
5043 menuChecks.menuCheckShowAllContainerPlans->show();
5044 menuChecks.menuCheckLockContainer->show();
5045 menuChecks.menuCheckShowOverlappedRoutes->show();
5046 // show separator
5047 menuChecks.separator->show();
5048 // enable selected controls
5049 switch (myEditModes.demandEditMode) {
5050 // common modes
5055 // set checkable button
5057 // show view options
5059 // show menu checks
5060 menuChecks.menuCheckHideNonInspectedDemandElements->show();
5061 break;
5066 // set checkable button
5068 break;
5073 // set checkable button
5075 break;
5080 // set checkable button
5082 break;
5083 // specific modes
5088 // set checkable button
5090 break;
5095 // set checkable button
5097 break;
5102 // set checkable button
5104 break;
5109 // set checkable button
5111 break;
5116 // set checkable button
5118 break;
5123 // set checkable button
5125 break;
5130 // set checkable button
5132 break;
5137 // set checkable button
5139 break;
5144 // set checkable button
5146 break;
5151 // set checkable button
5153 break;
5154 default:
5155 break;
5156 }
5157 // update menuChecks shorcuts
5158 menuChecks.updateShortcuts();
5159 // update common Network buttons
5161 // Update Demand buttons
5163 // recalc toolbar
5166 // force repaint because different modes draw different things
5167 onPaint(nullptr, 0, nullptr);
5168 // finally update view
5169 updateViewNet();
5170}
5171
5172
5173void
5175 // get menu checks
5177 // hide all checkbox of view options Network
5179 // hide all checkbox of view options Demand
5181 // hide all checkbox of view options Data
5183 // disable all common edit modes
5185 // disable all Data edit modes
5187 // show interval bar
5189 // hide all frames
5191 // hide all menuchecks
5195 // In data mode, always show options for show elements
5200 menuChecks.menuCheckToggleDrawJunctionShape->show();
5201 menuChecks.menuCheckShowAdditionals->show();
5202 menuChecks.menuCheckShowShapes->show();
5203 menuChecks.menuCheckShowDemandElements->show();
5204 // show separator
5205 menuChecks.separator->show();
5206 // enable selected controls
5207 switch (myEditModes.dataEditMode) {
5208 // common modes
5213 // set checkable button
5215 // show view option
5220 // show menu check
5221 menuChecks.menuCheckToggleTAZRelDrawing->show();
5222 menuChecks.menuCheckToggleTAZDrawFill->show();
5223 menuChecks.menuCheckToggleTAZRelOnlyFrom->show();
5224 menuChecks.menuCheckToggleTAZRelOnlyTo->show();
5225 break;
5230 // set checkable button
5232 // show toggle TAZRel drawing view option
5236 // show toggle TAZRel drawing menu check
5237 menuChecks.menuCheckToggleTAZRelDrawing->show();
5238 menuChecks.menuCheckToggleTAZRelOnlyFrom->show();
5239 menuChecks.menuCheckToggleTAZRelOnlyTo->show();
5240 break;
5245 // set checkable button
5247 // show toggle TAZRel drawing view option
5251 // show toggle TAZRel drawing menu check
5252 menuChecks.menuCheckToggleTAZRelDrawing->show();
5253 menuChecks.menuCheckToggleTAZRelOnlyFrom->show();
5254 menuChecks.menuCheckToggleTAZRelOnlyTo->show();
5255 break;
5260 // set checkable button
5262 break;
5267 // set checkable button
5269 break;
5274 // set checkable button
5276 // show view option
5281 // show menu check
5282 menuChecks.menuCheckToggleTAZRelDrawing->show();
5283 menuChecks.menuCheckToggleTAZDrawFill->show();
5284 menuChecks.menuCheckToggleTAZRelOnlyFrom->show();
5285 menuChecks.menuCheckToggleTAZRelOnlyTo->show();
5286 break;
5291 // set checkable button
5293 break;
5294 default:
5295 break;
5296 }
5297 // update menuChecks shorcuts
5298 menuChecks.updateShortcuts();
5299 // update common Network buttons
5301 // Update Data buttons
5303 // recalc toolbar
5306 // force repaint because different modes draw different things
5307 onPaint(nullptr, 0, nullptr);
5308 // finally update view
5309 updateViewNet();
5310}
5311
5312
5313void
5315 if (AC->getTagProperty()->getTag() == SUMO_TAG_JUNCTION) {
5316 // get junction (note: could be already removed if is a child, then hardfail=false)
5317 GNEJunction* junction = myNet->getAttributeCarriers()->retrieveJunction(AC->getID(), false);
5318 // if exist, remove it
5319 if (junction) {
5320 myNet->deleteJunction(junction, myUndoList);
5321 }
5322 } else if (AC->getTagProperty()->getTag() == SUMO_TAG_CROSSING) {
5323 // get crossing (note: could be already removed if is a child, then hardfail=false)
5325 // if exist, remove it
5326 if (crossing) {
5327 myNet->deleteCrossing(crossing, myUndoList);
5328 }
5329 } else if (AC->getTagProperty()->getTag() == SUMO_TAG_EDGE) {
5330 // get edge (note: could be already removed if is a child, then hardfail=false)
5331 GNEEdge* edge = myNet->getAttributeCarriers()->retrieveEdge(AC->getID(), false);
5332 // if exist, remove it
5333 if (edge) {
5334 myNet->deleteEdge(edge, myUndoList, false);
5335 }
5336 } else if (AC->getTagProperty()->getTag() == SUMO_TAG_LANE) {
5337 // get lane (note: could be already removed if is a child, then hardfail=false)
5339 // if exist, remove it
5340 if (lane) {
5341 myNet->deleteLane(lane, myUndoList, false);
5342 }
5343 } else if (AC->getTagProperty()->getTag() == SUMO_TAG_CONNECTION) {
5344 // get connection (note: could be already removed if is a child, then hardfail=false)
5346 // if exist, remove it
5347 if (connection) {
5348 myNet->deleteConnection(connection, myUndoList);
5349 }
5350 } else if ((AC->getTagProperty()->getTag() == SUMO_TAG_TAZSOURCE) || (AC->getTagProperty()->getTag() == SUMO_TAG_TAZSINK)) {
5351 // get TAZ SourceSink Element (note: could be already removed if is a child, then hardfail=false)
5352 GNETAZSourceSink* TAZSourceSink = myNet->getAttributeCarriers()->retrieveTAZSourceSink(AC, false);
5353 // if exist, remove it
5354 if (TAZSourceSink) {
5355 myNet->deleteTAZSourceSink(TAZSourceSink, myUndoList);
5356 }
5357 } else if (AC->getTagProperty()->isAdditionalElement()) {
5358 // get additional Element (note: could be already removed if is a child, then hardfail=false)
5359 GNEAdditional* additionalElement = myNet->getAttributeCarriers()->retrieveAdditional(AC->getGUIGlObject(), false);
5360 // if exist, remove it
5361 if (additionalElement) {
5362 myNet->deleteAdditional(additionalElement, myUndoList);
5363 }
5364 }
5365}
5366
5367
5368void
5370 // get demand Element (note: could be already removed if is a child, then hardfail=false)
5372 // if exist, remove it
5373 if (demandElement) {
5374 myNet->deleteDemandElement(demandElement, myUndoList);
5375 }
5376}
5377
5378
5379void
5381 if (AC->getTagProperty()->getTag() == SUMO_TAG_DATASET) {
5382 // get data set (note: could be already removed if is a child, then hardfail=false)
5383 GNEDataSet* dataSet = myNet->getAttributeCarriers()->retrieveDataSet(AC->getID(), false);
5384 // if exist, remove it
5385 if (dataSet) {
5386 myNet->deleteDataSet(dataSet, myUndoList);
5387 }
5388 } else if (AC->getTagProperty()->getTag() == SUMO_TAG_DATAINTERVAL) {
5389 // get data interval (note: could be already removed if is a child, then hardfail=false)
5390 GNEDataInterval* dataInterval = myNet->getAttributeCarriers()->retrieveDataInterval(AC, false);
5391 // if exist, remove it
5392 if (dataInterval) {
5393 myNet->deleteDataInterval(dataInterval, myUndoList);
5394 }
5395 } else {
5396 // get generic data (note: could be already removed if is a child, then hardfail=false)
5398 // if exist, remove it
5399 if (genericData) {
5400 myNet->deleteGenericData(genericData, myUndoList);
5401 }
5402 }
5403}
5404
5405
5406void
5409 switch (myEditModes.networkEditMode) {
5411 myViewParent->getInspectorFrame()->update();
5412 break;
5413 default:
5414 break;
5415 }
5416 }
5418 switch (myEditModes.demandEditMode) {
5420 myViewParent->getInspectorFrame()->update();
5421 break;
5424 break;
5427 break;
5430 break;
5433 break;
5436 break;
5439 break;
5442 break;
5445 break;
5448 break;
5449 default:
5450 break;
5451 }
5452 }
5454 switch (myEditModes.dataEditMode) {
5456 myViewParent->getInspectorFrame()->update();
5457 break;
5458 default:
5459 break;
5460 }
5461 // update data interval
5463 }
5464 // update view
5465 updateViewNet();
5466}
5467
5468// ---------------------------------------------------------------------------
5469// Private methods
5470// ---------------------------------------------------------------------------
5471
5472void
5474 PositionVector temporalShape;
5475 bool deleteLastCreatedPoint = false;
5476 // obtain temporal shape and delete last created point flag
5483 }
5484 // check if we're in drawing mode
5485 if (temporalShape.size() > 0) {
5486 // draw blue line with the current drawed shape
5488 glLineWidth(2);
5489 glTranslated(0, 0, GLO_TEMPORALSHAPE);
5491 GLHelper::drawLine(temporalShape);
5493 // draw red line from the last point of shape to the current mouse position
5495 glLineWidth(2);
5496 glTranslated(0, 0, GLO_TEMPORALSHAPE);
5497 // draw last line depending if shift key (delete last created point) is pressed
5498 if (deleteLastCreatedPoint) {
5500 } else {
5502 }
5505 }
5506}
5507
5508
5509void
5511 // first check if we're in correct mode
5516 // get mouse position
5517 const Position mousePosition = snapToActiveGrid(getPositionInformation());
5518 // get junction exaggeration
5519 const double junctionExaggeration = myVisualizationSettings->junctionSize.getExaggeration(*myVisualizationSettings, nullptr, 4);
5520 // get bubble color
5522 // change alpha
5523 bubbleColor.setAlpha(200);
5524 // push layer matrix
5526 // translate to temporal shape layer
5527 glTranslated(0, 0, GLO_TEMPORALSHAPE);
5528 // push junction matrix
5530 // move matrix junction center
5531 glTranslated(mousePosition.x(), mousePosition.y(), 0.1);
5532 // set color
5533 GLHelper::setColor(bubbleColor);
5534 // draw outline circle
5535 const double circleWidth = myVisualizationSettings->neteditSizeSettings.junctionBubbleRadius * junctionExaggeration;
5536 GLHelper::drawOutlineCircle(circleWidth, circleWidth * 0.75, 32);
5537 // pop junction matrix
5539 // draw temporal edge
5541 // set temporal edge color
5542 RGBColor temporalEdgeColor = RGBColor::BLACK;
5543 temporalEdgeColor.setAlpha(200);
5544 // declare temporal edge geometry
5545 GUIGeometry temporalEdgeGeometry;
5546 // calculate geometry between source junction and mouse position
5547 PositionVector temporalEdge = {mousePosition, myViewParent->getCreateEdgeFrame()->getJunctionSource()->getPositionInView()};
5548 // move temporal edge 2 side
5549 temporalEdge.move2side(-1);
5550 // update geometry
5551 temporalEdgeGeometry.updateGeometry(temporalEdge);
5552 // push temporal edge matrix
5554 // set color
5555 GLHelper::setColor(temporalEdgeColor);
5556 // draw temporal edge
5558 // check if we have to draw opposite edge
5560 // move temporal edge to opposite edge
5561 temporalEdge.move2side(2);
5562 // update geometry
5563 temporalEdgeGeometry.updateGeometry(temporalEdge);
5564 // draw temporal edge
5566 }
5567 // pop temporal edge matrix
5569 }
5570 // pop layer matrix
5572 }
5573}
5574
5575
5576void
5578 // first check if we're in correct mode
5583 (gViewObjectsHandler.markedEdge != nullptr)) {
5584 // calculate split position
5585 const auto lane = gViewObjectsHandler.markedEdge->getChildLanes().back();
5586 auto shape = lane->getLaneShape();
5587 // move shape to side
5588 shape.move2side(lane->getDrawingConstants()->getDrawingWidth() * -1);
5589 const auto offset = shape.nearest_offset_to_point2D(snapToActiveGrid(getPositionInformation()));
5590 const auto splitPosition = shape.positionAtOffset2D(offset);
5591 // get junction exaggeration
5592 const double junctionExaggeration = myVisualizationSettings->junctionSize.getExaggeration(*myVisualizationSettings, nullptr, 4);
5593 // get bubble color
5595 // push layer matrix
5597 // translate to temporal shape layer
5598 glTranslated(0, 0, GLO_TEMPORALSHAPE);
5599 // push junction matrix
5601 // move matrix junction center
5602 glTranslated(splitPosition.x(), splitPosition.y(), 0.1);
5603 // set color
5604 GLHelper::setColor(bubbleColor);
5605 // draw outline circle
5606 const double circleWidth = myVisualizationSettings->neteditSizeSettings.junctionBubbleRadius * junctionExaggeration;
5607 GLHelper::drawOutlineCircle(circleWidth, circleWidth * 0.75, 32);
5608 // draw filled circle
5610 // pop junction matrix
5612 // pop layer matrix
5614 }
5615}
5616
5617
5618void
5620 // check conditions
5621 if ((myCurrentObjectsDialog.size() > 0) && (myCurrentObjectsDialog.front()->getType() == GLO_JUNCTION) && myDrawPreviewRoundabout) {
5622 // get junction
5623 const auto junction = myNet->getAttributeCarriers()->retrieveJunction(myCurrentObjectsDialog.front()->getMicrosimID());
5624 // push layer matrix
5626 // translate to temporal shape layer
5627 glTranslated(0, 0, GLO_TEMPORALSHAPE);
5628 // push junction matrix
5630 // move matrix junction center
5631 glTranslated(junction->getNBNode()->getPosition().x(), junction->getNBNode()->getPosition().y(), 0.1);
5632 // set color
5634 // draw outline circle
5635 const double circleWidth = (junction->getNBNode()->getRadius() < 0) ? 4.0 : junction->getNBNode()->getRadius();
5636 GLHelper::drawOutlineCircle(circleWidth * 1.30, circleWidth, 32);
5637 // pop junction matrix
5639 // pop layer matrix
5641 }
5642}
5643
5644
5645void
5647 // check conditions
5649 // get junction
5651 // push layer matrix
5653 // translate to TLLogic
5654 glTranslated(0, 0, GLO_TEMPORALSHAPE);
5655 // iterate over all E1 detectors
5656 for (const auto& E1ID : myViewParent->getTLSEditorFrame()->getTLSAttributes()->getE1Detectors()) {
5657 // first check if E1 exists
5658 const auto E1 = myNet->getAttributeCarriers()->retrieveAdditional(SUMO_TAG_INDUCTION_LOOP, E1ID.second, false);
5659 if (E1) {
5660 // push line matrix
5662 // draw line between junction and E1
5663 GUIGeometry::drawChildLine(*myVisualizationSettings, junctionPos, E1->getPositionInView(),
5665 // pop line matrix
5667 }
5668 }
5669 // pop layer matrix
5671 }
5672}
5673
5674
5675void
5677 // check conditions
5679 // get junction
5681 // push layer matrix
5683 // translate to TLLogic
5684 glTranslated(0, 0, GLO_TEMPORALSHAPE);
5685 // iterate over all Junction detectors
5686 for (const auto& selectedJunctionID : myViewParent->getTLSEditorFrame()->getTLSJunction()->getSelectedJunctionIDs()) {
5687 // get junction
5688 const auto selectedJunction = myNet->getAttributeCarriers()->retrieveJunction(selectedJunctionID);
5689 // push line matrix
5691 // draw line between junction and Junction
5692 GUIGeometry::drawChildLine(*myVisualizationSettings, junctionPos, selectedJunction->getPositionInView(),
5694 // pop line matrix
5696 }
5697 // pop layer matrix
5699 }
5700}
5701
5702
5703void
5706 /*
5707 myViewParent->getAdditionalFrame()->getNeteditAttributesEditor()->drawLaneReference(gViewObjectsHandler.markedLane);
5708 // get element length
5709 const double elementLength = getElementLength();
5710 // check lane
5711 if (lane && shown() && myReferencePointComboBox->shown() && (myReferencePoint != ReferencePoint::INVALID) &&
5712 (elementLength != INVALID_DOUBLE)) {
5713 // Obtain position of the mouse over lane (limited over grid)
5714 const double mousePosOverLane = lane->getLaneShape().nearest_offset_to_point2D(myFrameParent->getViewNet()->snapToActiveGrid(myFrameParent->getViewNet()->getPositionInformation())) / lane->getLengthGeometryFactor();
5715 // continue depending of mouse pos over lane
5716 if (mousePosOverLane >= 0) {
5717 // set start and end position
5718 const double startPos = setStartPosition(mousePosOverLane, elementLength);
5719 const double endPos = setEndPosition(mousePosOverLane, elementLength, lane->getLaneShape().length2D());
5720 // get lane geometry
5721 const auto laneShape = lane->getLaneGeometry().getShape();
5722 // difference between start-end position and elementLength
5723 const auto lengthDifference = (endPos - startPos) - elementLength;
5724 // set color
5725 RGBColor segmentColor;
5726 // check if force length
5727 if (myForceLengthFrame->shown() && (myForceLengthCheckButton->getCheck() == TRUE) && abs(lengthDifference) >= 0.1) {
5728 segmentColor = RGBColor::RED;
5729 } else {
5730 segmentColor = RGBColor::ORANGE;
5731 }
5732 // declare geometries
5733 GUIGeometry geometry;
5734 // trim geomtry
5735 geometry.updateGeometry(laneShape,
5736 (startPos == INVALID_DOUBLE) ? -1 : startPos,
5737 Position::INVALID,
5738 (endPos == INVALID_DOUBLE) ? -1 : endPos,
5739 Position::INVALID);
5740 // push layer matrix
5741 GLHelper::pushMatrix();
5742 // translate to temporal shape layer
5743 glTranslated(0, 0, GLO_TEMPORALSHAPE);
5744 // set color
5745 GLHelper::setColor(segmentColor);
5746 // draw temporal edge
5747 GUIGeometry::drawGeometry(lane->getDrawingConstants()->getDetail(), geometry, 0.45);
5748 // check if draw starPos
5749 if (startPos != INVALID_DOUBLE) {
5750 // cut start pos
5751 geometry.updateGeometry(laneShape, startPos, Position::INVALID, startPos + 0.5, Position::INVALID);
5752 // draw startPos
5753 GUIGeometry::drawGeometry(lane->getDrawingConstants()->getDetail(), geometry, 1);
5754 } else {
5755 // push circle matrix
5756 GLHelper::pushMatrix();
5757 // translate to test layer, but under magenta square
5758 glTranslated(laneShape.front().x(), laneShape.front().y(), 0);
5759 // draw circle
5760 GLHelper::drawFilledCircle(0.8, 8);
5761 // pop circle matrix
5762 GLHelper::popMatrix();
5763 }
5764 // check if draw endPos
5765 if (endPos != INVALID_DOUBLE) {
5766 // cut endPos
5767 geometry.updateGeometry(laneShape, endPos - 0.5, Position::INVALID, endPos, Position::INVALID);
5768 // draw endPos
5769 GUIGeometry::drawGeometry(lane->getDrawingConstants()->getDetail(), geometry, 1);
5770 } else {
5771 // push circle matrix
5772 GLHelper::pushMatrix();
5773 // translate to test layer, but under magenta square
5774 glTranslated(laneShape.back().x(), laneShape.back().y(), 0);
5775 // draw circle
5776 GLHelper::drawFilledCircle(0.8, 8);
5777 // pop circle matrix
5778 GLHelper::popMatrix();
5779 }
5780 // set color
5781 GLHelper::setColor(segmentColor.changedBrightness(-32));
5782 // translate to front
5783 glTranslated(0, 0, 2);
5784 // check if draw at end, or over circle
5785 if (endPos == INVALID_DOUBLE) {
5786 // cut endPos
5787 geometry.updateGeometry(laneShape, laneShape.length() - 0.5, Position::INVALID, laneShape.length(), Position::INVALID);
5788 // draw triangle at end
5789 GLHelper::drawTriangleAtEnd(geometry.getShape().front(), geometry.getShape().back(), (double) 0.45, (double) 0.3, 0.3);
5790 } else {
5791 // draw triangle at end
5792 GLHelper::drawTriangleAtEnd(geometry.getShape().front(), geometry.getShape().back(), (double) 0.45, (double) 0.3, -0.1);
5793 }
5794 // pop layer matrix
5795 GLHelper::popMatrix();
5796 }
5797 }
5798 */
5799 }
5800}
5801
5802
5803void
5806 // get mouse position
5807 const Position mousePosition = snapToActiveGrid(getPositionInformation());
5808 // push layer matrix
5810 // translate to test layer, but under magenta square
5811 glTranslated(mousePosition.x(), mousePosition.y(), GLO_TESTELEMENT - 1);
5812 // set color
5814 // draw circle
5816 // pop layer matrix
5818 }
5819}
5820
5821
5822void
5824 // reset moving selected edge
5826 // decide what to do based on mode
5827 switch (myEditModes.networkEditMode) {
5829 // first swap lane to edges if mySelectEdges is enabled and shift key isn't pressed
5830 if (checkSelectEdges()) {
5832 } else {
5834 }
5835 // now filter locked elements
5837 // check if we're selecting a new parent for the current inspected element
5840 } else {
5841 // inspect clicked elements
5843 }
5844 // process click
5845 processClick(eventData);
5846 break;
5847 }
5849 // first swap lane to edges if mySelectEdges is enabled and shift key isn't pressed
5850 if (checkSelectEdges()) {
5852 } else {
5854 }
5855 // now filter locked elements forcing excluding walkingAreas
5857 // continue depending of AC
5859 // now check if we want only delete geometry points
5861 // only remove geometry point
5864 // remove all selected attribute carriers
5867 }
5868 } else {
5869 // remove attribute carrier under cursor
5871 }
5872 } else {
5873 // process click
5874 processClick(eventData);
5875 }
5876 break;
5877 }
5879 // first swap lane to edges if mySelectEdges is enabled and shift key isn't pressed
5880 if (checkSelectEdges()) {
5882 } else {
5884 }
5885 // now filter locked elements
5887 // avoid to select if control key is pressed
5889 // check if a rect for selecting is being created
5891 // begin rectangle selection
5894 // process click
5895 processClick(eventData);
5896 }
5897 } else {
5898 // process click
5899 processClick(eventData);
5900 }
5901 break;
5903 // check what buttons are pressed
5905 // get edge under cursor
5907 if (edge) {
5908 // obtain reverse edge
5909 const auto oppositeEdges = edge->getOppositeEdges();
5910 // check if we're split one or both edges
5913 } else if (oppositeEdges.size() > 0) {
5914 myNet->splitEdgesBidi(edge, oppositeEdges.front(), edge->getSplitPos(getPositionInformation()), myUndoList);
5915 } else {
5917 }
5918 }
5920 // process left click in create edge frame Frame
5925 }
5926 // process click
5927 processClick(eventData);
5928 break;
5929 }
5931 // editing lane shapes in move mode isn't finished, then always filter lanes
5933 // filter locked elements
5935 // check if we're editing a shape
5937 // check if we're removing a geometry point
5939 // remove geometry point
5942 }
5944 // process click if there isn't movable elements (to move camera using drag an drop)
5945 processClick(eventData);
5946 }
5947 } else {
5948 // filter connections and crossings, because are moved setting custom shape
5951 // get AC under cursor
5953 // check that AC is an network or additional element
5954 if (AC && (AC->getTagProperty()->isNetworkElement() || AC->getTagProperty()->isAdditionalElement())) {
5955 // check if we're moving a set of selected items
5956 if (AC->isAttributeCarrierSelected()) {
5957 // move selected ACs
5960 // process click if there isn't movable elements (to move camera using drag an drop)
5961 processClick(eventData);
5962 }
5963 } else {
5964 // process click if there isn't movable elements (to move camera using drag an drop)
5965 processClick(eventData);
5966 }
5967 }
5968 break;
5969 }
5971 // check if we're clicked over a non locked lane
5973 // Handle laneclick (shift key may pass connections, Control key allow conflicts)
5975 updateViewNet();
5976 }
5977 // process click
5978 processClick(eventData);
5979 break;
5980 }
5982 // edit TLS in TLSEditor frame
5984 // process click
5985 processClick(eventData);
5986 break;
5987 }
5989 // avoid create additionals if control key is pressed
5992 updateViewNet();
5993 }
5994 }
5995 // process click
5996 processClick(eventData);
5997 break;
5998 }
6000 // filter elements over junctions
6004 // call function addCrossing from crossing frame
6006 // process click
6007 processClick(eventData);
6008 break;
6009 }
6011 // avoid create TAZs if control key is pressed
6013 // check if we want to create a rect for selecting edges
6015 // begin rectangle selection
6017 } else {
6018 // check if process click was successfully
6020 updateViewNet();
6021 }
6022 // process click
6023 processClick(eventData);
6024 }
6025 } else {
6026 // process click
6027 processClick(eventData);
6028 }
6029 break;
6030 }
6032 // avoid create shapes if control key is pressed
6035 // declare processClick flag
6036 bool updateTemporalShape = false;
6037 // process click
6039 updateViewNet();
6040 // process click depending of the result of "process click"
6041 if (!updateTemporalShape) {
6042 // process click
6043 processClick(eventData);
6044 }
6045 }
6046 } else {
6047 // process click
6048 processClick(eventData);
6049 }
6050 break;
6051 }
6054 // shift key may pass connections, Control key allow conflicts.
6056 updateViewNet();
6057 }
6058 // process click
6059 processClick(eventData);
6060 break;
6061 }
6063 // avoid create wires if control key is pressed
6066 updateViewNet();
6067 }
6068 // process click
6069 processClick(eventData);
6070 break;
6071 }
6073 // process click
6074 processClick(eventData);
6075 break;
6076 }
6077 default: {
6078 // process click
6079 processClick(eventData);
6080 }
6081 }
6082}
6083
6084
6085void
6087 // check moved items
6091 // check if we're creating a rectangle selection or we want only to select a lane
6093 // check if we're selecting all type of elements o we only want a set of edges for TAZ
6097 // process edge selection
6099 }
6101 // check if there is a lane in objects under cursor
6103 // if we clicked over an lane with shift key pressed, select or unselect it
6106 } else {
6108 }
6109 }
6110 }
6111 // finish selection
6113 } else {
6114 // finish moving of single elements
6116 }
6117}
6118
6119
6120void
6121GNEViewNet::processMoveMouseNetwork(const bool mouseLeftButtonPressed) {
6122 // change "delete last created point" depending if during movement shift key is pressed
6127 }
6128 // check what type of additional is moved
6130 // move entire selection
6131 myMoveMultipleElements.moveSelection(mouseLeftButtonPressed);
6133 // update selection corner of selecting area
6135 } else {
6136 // move single elements
6137 myMoveSingleElement.moveSingleElement(mouseLeftButtonPressed);
6138 }
6139}
6140
6141
6142void
6144 // filter shapes (because POIs and polygons doesn't interact in demand mode)
6146 // decide what to do based on mode
6147 switch (myEditModes.demandEditMode) {
6149 // filter locked elements
6151 // inspect clicked elements
6153 // process click
6154 processClick(eventData);
6155 break;
6156 }
6158 // filter locked elements
6160 // get front AC
6161 const auto markAC = myViewObjectsSelector.getAttributeCarrierFront();
6162 // check conditions
6163 if (markAC) {
6164 // check if we are deleting a selection or an single attribute carrier
6165 if (markAC->isAttributeCarrierSelected()) {
6167 } else {
6169 }
6170 } else {
6171 // process click
6172 processClick(eventData);
6173 }
6174 break;
6175 }
6177 // filter locked elements
6179 // avoid to select if control key is pressed
6181 // check if a rect for selecting is being created
6183 // begin rectangle selection
6186 // process click
6187 processClick(eventData);
6188 }
6189 } else {
6190 // process click
6191 processClick(eventData);
6192 }
6193 break;
6195 // filter locked elements
6197 // get front AC
6198 const auto markAC = myViewObjectsSelector.getAttributeCarrierFront();
6199 // check that AC under cursor is a demand element
6200 if (markAC) {
6201 // check if we're moving a set of selected items
6202 if (markAC->isAttributeCarrierSelected()) {
6203 // move selected ACs
6206 // process click if there isn't movable elements (to move camera using drag an drop)
6207 processClick(eventData);
6208 }
6209 } else {
6210 // process click if there isn't movable elements (to move camera using drag an drop)
6211 processClick(eventData);
6212 }
6213 break;
6214 }
6216 // check if we clicked over a lane
6218 // Handle edge click
6220 }
6221 // process click
6222 processClick(eventData);
6223 break;
6224 }
6226 // filter additionals (except TAZs) and demands (except routes)
6229 // Handle click
6231 // process click
6232 processClick(eventData);
6233 break;
6234 }
6236 // filter additionals (except stoppingPlaces) and demands
6239 // Handle click
6241 updateViewNet();
6242 }
6243 // process click
6244 processClick(eventData);
6245 break;
6246 }
6248 // filter additionals (except stoppingPlaces and TAZs)
6251 // special case if we're creating person over walk routes
6254 } else {
6256 }
6257 // Handle click
6259 }
6260 // process click
6261 processClick(eventData);
6262 break;
6263 }
6265 // filter additionals (except stoppingPlaces and TAZs)
6268 // special case if we're creating person over walk routes
6271 } else {
6273 }
6274 // Handle person plan click
6276 }
6277 // process click
6278 processClick(eventData);
6279 break;
6280 }
6282 // filter additionals (except stoppingPlaces and TAZs) and demands
6285 // Handle click
6287 // process click
6288 processClick(eventData);
6289 break;
6290 }
6292 // filter additionals (except stoppingPlaces and TAZs) and demands
6295 // Handle container plan click
6297 // process click
6298 processClick(eventData);
6299 break;
6300 }
6301 default: {
6302 // process click
6303 processClick(eventData);
6304 }
6305 }
6306}
6307
6308
6309void
6311 // check moved items
6315 // check if we're creating a rectangle selection or we want only to select a lane
6318 }
6319 // finish selection
6321 } else {
6322 // finish moving of single elements
6324 }
6325}
6326
6327
6328void
6329GNEViewNet::processMoveMouseDemand(const bool mouseLeftButtonPressed) {
6331 // update selection corner of selecting area
6333 } else {
6334 // move single elements
6335 myMoveSingleElement.moveSingleElement(mouseLeftButtonPressed);
6336 }
6337}
6338
6339
6340void
6342 // get AC
6344 // decide what to do based on mode
6345 switch (myEditModes.dataEditMode) {
6347 // filter locked elements
6349 // process left click in Inspector Frame
6350 if (AC && AC->getTagProperty()->getTag() == SUMO_TAG_TAZ) {
6352 } else {
6353 // inspect clicked elements
6355 }
6356 // process click
6357 processClick(eventData);
6358 break;
6359 }
6361 // check conditions
6362 if (AC) {
6363 // check if we are deleting a selection or an single attribute carrier
6364 if (AC->isAttributeCarrierSelected()) {
6365 if (!AC->getGUIGlObject()->isGLObjectLocked()) {
6367 }
6368 } else {
6370 }
6371 } else {
6372 // process click
6373 processClick(eventData);
6374 }
6375 break;
6376 }
6378 // filter locked elements
6380 // avoid to select if control key is pressed
6382 // check if a rect for selecting is being created
6384 // begin rectangle selection
6387 // process click
6388 processClick(eventData);
6389 }
6390 } else {
6391 // process click
6392 processClick(eventData);
6393 }
6394 break;
6396 // avoid create edgeData if control key is pressed
6399 updateViewNet();
6400 }
6401 }
6402 // process click
6403 processClick(eventData);
6404 break;
6406 // avoid create edgeData if control key is pressed
6409 updateViewNet();
6410 }
6411 }
6412 // process click
6413 processClick(eventData);
6414 break;
6416 // avoid create TAZData if control key is pressed
6419 updateViewNet();
6420 }
6421 }
6422 // process click
6423 processClick(eventData);
6424 break;
6426 // avoid create TAZData if control key is pressed
6428 //
6429 }
6430 // process click
6431 processClick(eventData);
6432 break;
6433 default: {
6434 // process click
6435 processClick(eventData);
6436 }
6437 }
6438}
6439
6440
6441void
6443 // check moved items
6447 // check if we're creating a rectangle selection or we want only to select a lane
6450 }
6451 // finish selection
6453 } else {
6454 // finish moving of single elements
6456 }
6457}
6458
6459
6460void
6461GNEViewNet::processMoveMouseData(const bool mouseLeftButtonPressed) {
6463 // update selection corner of selecting area
6465 } else {
6466 // move single elements
6467 myMoveSingleElement.moveSingleElement(mouseLeftButtonPressed);
6468 }
6469}
6470
6471/****************************************************************************/
FXDEFMAP(GNEViewNet) GNEViewNetMap[]
@ DATA_MEANDATA
mode for create meanData elements
@ DATA_EDGERELDATA
mode for create edgeRelData elements
@ DATA_SELECT
mode for selecting data elements
@ DATA_TAZRELDATA
mode for create TAZRelData elements
@ DATA_INSPECT
mode for inspecting data elements
@ DATA_EDGEDATA
mode for create edgeData 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..)
@ NETWORK_SHAPE
Mode for editing Polygons.
@ NETWORK_DELETE
mode for deleting network elements
@ NETWORK_MOVE
mode for moving network elements
@ NETWORK_WIRE
Mode for editing wires.
@ NETWORK_ADDITIONAL
Mode for editing additionals.
@ NETWORK_TAZ
Mode for editing TAZ.
@ NETWORK_CREATE_EDGE
mode for creating new edges
@ NETWORK_TLS
mode for editing tls
@ NETWORK_CROSSING
Mode for editing crossing.
@ NETWORK_SELECT
mode for selecting network elements
@ NETWORK_INSPECT
mode for inspecting network elements
@ NETWORK_PROHIBITION
Mode for editing connection prohibitions.
@ NETWORK_CONNECT
mode for connecting lanes
@ NETWORK_DECAL
Mode for editing decals.
@ DEMAND_PERSONPLAN
Mode for editing person plan.
@ DEMAND_INSPECT
mode for inspecting demand elements
@ DEMAND_CONTAINER
Mode for editing container.
@ DEMAND_DELETE
mode for deleting demand elements
@ DEMAND_ROUTEDISTRIBUTION
Mode for editing route distributions.
@ DEMAND_PERSON
Mode for editing person.
@ DEMAND_TYPEDISTRIBUTION
Mode for editing type distributions.
@ DEMAND_SELECT
mode for selecting demand elements
@ DEMAND_ROUTE
Mode for editing routes.
@ DEMAND_VEHICLE
Mode for editing vehicles.
@ DEMAND_MOVE
mode for moving demand elements
@ DEMAND_STOP
Mode for editing stops.
@ DEMAND_CONTAINERPLAN
Mode for editing container plan.
@ DEMAND_TYPE
Mode for editing types.
@ MID_GNE_NETWORKVIEWOPTIONS_AUTOOPPOSITEEDGES
automatically create opposite edge
Definition GUIAppEnum.h:849
@ MID_GNE_ADDSELECT_EDGE
Add edge to selected items - menu entry.
Definition GUIAppEnum.h:851
@ MID_HOTKEY_F3_SUPERMODE_DEMAND
select demand supermode in netedit
Definition GUIAppEnum.h:236
@ MID_GNE_LANE_EDIT_SHAPE
edit lane shape
@ MID_GNE_DEMANDVIEWOPTIONS_SHOWALLPERSONPLANS
show all person plans
Definition GUIAppEnum.h:933
@ MID_HOTKEY_SHIFT_S_LOCATESTOP
Locate stop - button.
Definition GUIAppEnum.h:188
@ MID_GNE_LANE_TRANSFORM_BIKE
transform lane to bikelane
@ MID_GNE_DATAVIEWOPTIONS_TAZRELDRAWING
toggle TAZRel drawing
Definition GUIAppEnum.h:957
@ MID_GNE_EDGE_REVERSE
reverse an edge
@ MID_GNE_JUNCTION_ADDTLS
Add TLS into junction.
@ MID_ADDSELECT
Add to selected items - menu entry.
Definition GUIAppEnum.h:487
@ MID_HOTKEY_U_MODE_DECAL_TYPEDISTRIBUTION
hotkey for mode decal AND type distribution
Definition GUIAppEnum.h:69
@ MID_GNE_LANE_ADD_BUS
add busLane
@ MID_GNE_NETWORKVIEWOPTIONS_DRAWSPREADVEHICLES
Draw vehicles in begin position or spread in lane.
Definition GUIAppEnum.h:823
@ MID_GNE_JUNCTION_RESET_EDGE_ENDPOINTS
reset edge endpoints
@ MID_GNE_NETWORKVIEWOPTIONS_MOVEELEVATION
move elevation instead of x,y
Definition GUIAppEnum.h:845
@ MID_GNE_NETWORKVIEWOPTIONS_HIDECONNECTIONS
hide connections
Definition GUIAppEnum.h:831
@ MID_GNE_REMOVESELECT_EDGE
Remove edge from selected items - Menu Entry.
Definition GUIAppEnum.h:853
@ MID_GNE_NETWORKVIEWOPTIONS_SHOWCONNECTIONS
show connections
Definition GUIAppEnum.h:829
@ MID_GNE_INTERVALBAR_BEGIN
begin changed in InterbalBar
Definition GUIAppEnum.h:977
@ MID_GNE_DATAVIEWOPTIONS_TAZRELONLYTO
toggle draw TAZRel only to
Definition GUIAppEnum.h:963
@ MID_GNE_ADDREVERSE
add reverse element
@ MID_GNE_CONNECTION_SMOOTH_SHAPE
@ brief smooth connection shape
@ MID_GNE_DATAVIEWOPTIONS_TOGGLEDRAWJUNCTIONSHAPE
toggle draw junction shape
Definition GUIAppEnum.h:949
@ MID_GNE_NETWORKVIEWOPTIONS_SHOWTAZELEMENTS
show TAZ elements
Definition GUIAppEnum.h:835
@ MID_GNE_DEMANDVIEWOPTIONS_LOCKPERSON
lock person
Definition GUIAppEnum.h:935
@ MID_HOTKEY_Z_MODE_TAZ_TAZREL
hotkey for mode editing TAZ and TAZRel
Definition GUIAppEnum.h:75
@ MID_GNE_DEMANDVIEWOPTIONS_TOGGLEDRAWJUNCTIONSHAPE
toggle draw junction shape
Definition GUIAppEnum.h:923
@ MID_GNE_JUNCTION_CLEAR_CONNECTIONS
clear junction's connections
@ MID_HOTKEY_A_MODE_STARTSIMULATION_ADDITIONALS_STOPS
hotkey for start simulation in SUMO and set editing mode additionals AND stops in netedit
Definition GUIAppEnum.h:43
@ MID_GNE_JUNCTION_SELECT_ROUNDABOUT
select all roundabout nodes and edges of the current roundabout
@ MID_GNE_JUNCTION_RESET_SHAPE
reset junction shape
@ MID_GNE_JUNCTION_RESET_CONNECTIONS
reset junction's connections
@ MID_GNE_DEMANDVIEWOPTIONS_SHOWGRID
show grid
Definition GUIAppEnum.h:921
@ MID_GNE_POLYGON_TRIANGULATE
triangulate polygon
@ MID_GNE_JUNCTION_SPLIT
turn junction into multiple junctions
@ MID_GNE_EDGE_STRAIGHTEN_ELEVATION
interpolate z values linear between junctions
@ MID_HOTKEY_D_MODE_SINGLESIMULATIONSTEP_DELETE
hotkey for perform a single simulation step in SUMO and set delete mode in netedit
Definition GUIAppEnum.h:49
@ MID_GNE_NETWORKVIEWOPTIONS_CHAINEDGES
create edges in chain mode
Definition GUIAppEnum.h:847
@ MID_GNE_DATAVIEWOPTIONS_SHOWDEMANDELEMENTS
show demand elements
Definition GUIAppEnum.h:955
@ MID_GNE_POLYGON_CLOSE
close opened polygon
@ MID_GNE_EDGE_SMOOTH
smooth geometry
@ MID_HOTKEY_C_MODE_CONNECT_CONTAINER
hotkey for mode connecting lanes AND container
Definition GUIAppEnum.h:45
@ MID_HOTKEY_H_MODE_PROHIBITION_CONTAINERPLAN
hotkey for mode prohibition AND container plan
Definition GUIAppEnum.h:53
@ MID_HOTKEY_SHIFT_O_LOCATEPOI
Locate poi - button.
Definition GUIAppEnum.h:182
@ MID_HOTKEY_W_MODE_WIRE_ROUTEDISTRIBUTION
hotkey for mode editing overhead wires AND route distributions
Definition GUIAppEnum.h:73
@ MID_HOTKEY_T_MODE_TLS_TYPE
hotkey for mode editing TLS AND Vehicle Types
Definition GUIAppEnum.h:67
@ MID_GNE_LANE_RESET_CUSTOMSHAPE
reset custom shape
@ MID_GNE_EDGE_STRAIGHTEN
remove inner geometry
@ MID_GNE_DEMANDVIEWOPTIONS_HIDESHAPES
hide shapes
Definition GUIAppEnum.h:929
@ MID_GNE_LANE_TRANSFORM_BUS
transform lane to busLane
@ MID_GNE_POLYGON_SET_FIRST_POINT
Set a vertex of polygon as first vertex.
@ MID_GNE_SHAPEEDITED_DELETE_GEOMETRY_POINT
delete geometry point in shape edited
@ MID_HOTKEY_SHIFT_A_LOCATEADDITIONAL
Locate additional structure - button.
Definition GUIAppEnum.h:172
@ MID_GNE_LANE_DUPLICATE
duplicate a lane
@ MID_GNE_DATAVIEWOPTIONS_SHOWADDITIONALS
show additionals
Definition GUIAppEnum.h:951
@ MID_HOTKEY_SHIFT_R_LOCATEROUTE
Locate route - button.
Definition GUIAppEnum.h:186
@ MID_GNE_NETWORKVIEWOPTIONS_SHOWBUBBLES
show junctions as bubbles
Definition GUIAppEnum.h:843
@ MID_GNE_LANE_ADD_GREENVERGE_FRONT
add greenVerge front of current lane
@ MID_GNE_INTERVALBAR_END
end changed in InterbalBar
Definition GUIAppEnum.h:979
@ MID_HOTKEY_SHIFT_W_LOCATEWALKINGAREA
Locate edge - button.
Definition GUIAppEnum.h:194
@ MID_GNE_NETWORKVIEWOPTIONS_EXTENDSELECTION
extend selection
Definition GUIAppEnum.h:837
@ MID_GNE_LANE_REMOVE_GREENVERGE
remove greenVerge
@ MID_HOTKEY_S_MODE_STOPSIMULATION_SELECT
hotkey for stop simulation in SUMO and set select mode in netedit
Definition GUIAppEnum.h:63
@ MID_GNE_EDGE_ADD_REVERSE_DISCONNECTED
add reverse edge disconnected (used for for spreadtype center)
@ MID_GNE_EDGE_SPLIT_BIDI
split an edge
@ MID_GNE_NETWORKVIEWOPTIONS_SHOWSUBADDITIONALS
show sub-additionals
Definition GUIAppEnum.h:833
@ MID_GNE_JUNCTION_REPLACE
turn junction into geometry node
@ MID_HOTKEY_SHIFT_C_LOCATECONTAINER
Locate container - button.
Definition GUIAppEnum.h:174
@ MID_GNE_DEMANDVIEWOPTIONS_SHOWALLCONTAINERPLANS
show all container plans
Definition GUIAppEnum.h:937
@ MID_HOTKEY_SHIFT_V_LOCATEVEHICLE
Locate vehicle - button.
Definition GUIAppEnum.h:192
@ MID_GNE_VIEW_DEFAULT
set default view
Definition GUIAppEnum.h:785
@ MID_HOTKEY_F4_SUPERMODE_DATA
select data supermode in netedit
Definition GUIAppEnum.h:238
@ MID_HOTKEY_SHIFT_L_LOCATEPOLY
Locate polygons - button.
Definition GUIAppEnum.h:180
@ MID_GNE_LANE_REMOVE_BIKE
remove bikelane
@ MID_GNE_SHAPEEDITED_RESET
reset shape
@ MID_HOTKEY_SHIFT_E_LOCATEEDGE
Locate edge - button.
Definition GUIAppEnum.h:176
@ MID_GNE_VIEW_JUPEDSIM
set juPedSim view
Definition GUIAppEnum.h:787
@ MID_GNE_SHAPEEDITED_STRAIGHTEN
straighten shape edited geometry
@ MID_GNE_LANE_RESET_OPPOSITELANE
reset opposite lane
@ MID_GNE_INTERVALBAR_PARAMETER
parameter changed in InterbalBar
Definition GUIAppEnum.h:981
@ MID_HOTKEY_R_MODE_CROSSING_ROUTE_EDGERELDATA
hotkey for mode editing crossing, routes and edge rel datas
Definition GUIAppEnum.h:65
@ MID_GNE_JUNCTION_CONVERT_ROUNDABOUT
convert junction to roundabout
@ MID_GNE_DATAVIEWOPTIONS_TAZDRAWFILL
toggle draw TAZ fill
Definition GUIAppEnum.h:959
@ MID_REACHABILITY
show reachability from a given lane
Definition GUIAppEnum.h:533
@ MID_HOTKEY_L_MODE_PERSONPLAN
hotkey for mode person plan
Definition GUIAppEnum.h:57
@ MID_GNE_EDGE_RESET_LENGTH
reset custom lengths
@ MID_HOTKEY_V_MODE_VEHICLE
hotkey for mode create vehicles
Definition GUIAppEnum.h:71
@ MID_HOTKEY_SHIFT_P_LOCATEPERSON
Locate person - button.
Definition GUIAppEnum.h:184
@ MID_HOTKEY_I_MODE_INSPECT
hotkey for mode inspecting object attributes
Definition GUIAppEnum.h:55
@ MID_GNE_LANE_REMOVE_BUS
remove busLane
@ MID_GNE_NETWORKVIEWOPTIONS_SHOWDEMANDELEMENTS
show demand elements
Definition GUIAppEnum.h:825
@ MID_HOTKEY_SHIFT_J_LOCATEJUNCTION
Locate junction - button.
Definition GUIAppEnum.h:178
@ MID_GNE_POLYGON_SELECT
select elements within polygon boundary
@ MID_GNE_JUNCTION_SPLIT_RECONNECT
turn junction into multiple junctions and reconnect them heuristically
@ MID_GNE_REVERSE
reverse current element
@ MID_OPEN_ADDITIONAL_DIALOG
open additional dialog (used in netedit)
Definition GUIAppEnum.h:471
@ MID_GNE_WALKINGAREA_EDIT_SHAPE
edit crossing shape
@ MID_GNE_DEMANDVIEWOPTIONS_HIDENONINSPECTED
hide non-inspected demand element
Definition GUIAppEnum.h:927
@ MID_GNE_JUNCTION_EDIT_SHAPE
edit junction shape
@ MID_GNE_LANE_REMOVE_SIDEWALK
remove sidewalk
@ MID_GNE_SHAPEEDITED_OPEN
open closed shape edited
@ MID_GNE_EDGE_RESET_ENDPOINT
reset default geometry endpoints
@ MID_GNE_INTERVALBAR_GENERICDATATYPE
generic data selected
Definition GUIAppEnum.h:971
@ MID_GNE_LANE_ADD_GREENVERGE_BACK
add greenVerge back of current lane
@ MID_GNE_NETWORKVIEWOPTIONS_MERGEAUTOMATICALLY
don't ask before merging junctions
Definition GUIAppEnum.h:841
@ MID_GNE_EDGE_SMOOTH_ELEVATION
smooth elevation with regard to adjoining edges
@ MID_GNE_NETWORKVIEWOPTIONS_CHANGEALLPHASES
change all phases
Definition GUIAppEnum.h:839
@ MID_GNE_DATAVIEWOPTIONS_SHOWSHAPES
show shapes
Definition GUIAppEnum.h:953
@ MID_HOTKEY_E_MODE_EDGE_EDGEDATA
hotkey for mode adding edges AND edgeDatas
Definition GUIAppEnum.h:51
@ MID_GNE_DATAVIEWOPTIONS_TAZRELONLYFROM
toggle draw TAZRel only from
Definition GUIAppEnum.h:961
@ MID_GNE_EDGE_ADD_REVERSE
add reverse edge
@ MID_GNE_EDGE_APPLYTEMPLATE
apply template
@ MID_GNE_EDGE_USEASTEMPLATE
use edge as tempalte
@ MID_GNE_NETWORKVIEWOPTIONS_TOGGLEDRAWJUNCTIONSHAPE
toggle draw junction shape
Definition GUIAppEnum.h:821
@ MID_GNE_SHAPEEDITED_SIMPLIFY
simplify shape edited geometry
@ MID_GNE_DEMANDVIEWOPTIONS_DRAWSPREADVEHICLES
Draw vehicles in begin position or spread in lane.
Definition GUIAppEnum.h:925
@ MID_GNE_LANE_ADD_SIDEWALK
add sidewalk
@ MID_GNE_DEMANDVIEWOPTIONS_SHOWOVERLAPPEDROUTES
show overlapped routes
Definition GUIAppEnum.h:941
@ MID_GNE_SHAPEEDITED_FINISH
finish editing shape edited
@ MID_GNE_RESET_GEOMETRYPOINT
reset geometry point
@ MID_GNE_CONNECTION_EDIT_SHAPE
edit connection shape
@ MID_GNE_SHAPEEDITED_CLOSE
close opened shape edited
@ MID_GNE_POI_ATTACH
attach POI to lane
@ MID_GNE_INTERVALBAR_DATASET
data set selected
Definition GUIAppEnum.h:973
@ MID_HOTKEY_SHIFT_T_LOCATETLS
Locate TLS - button.
Definition GUIAppEnum.h:190
@ MID_GNE_LANE_TRANSFORM_SIDEWALK
transform lane to sidewalk
@ MID_GNE_SHAPEEDITED_SET_FIRST_POINT
Set a vertex of shape edited as first vertex.
@ MID_GNE_LANE_ADD_BIKE
add bikelane
@ MID_HOTKEY_M_MODE_MOVE_MEANDATA
hotkey for mode moving element AND mean data
Definition GUIAppEnum.h:59
@ MID_HOTKEY_F2_SUPERMODE_NETWORK
select network supermode in netedit
Definition GUIAppEnum.h:234
@ MID_GNE_DEMANDVIEWOPTIONS_LOCKCONTAINER
lock container
Definition GUIAppEnum.h:939
@ MID_GNE_NETWORKVIEWOPTIONS_SELECTEDGES
select edges
Definition GUIAppEnum.h:827
@ MID_GNE_EDGE_SPLIT
split an edge
@ MID_GNE_LANE_TRANSFORM_GREENVERGE
transform lane to greenVerge
@ MID_GNE_CUSTOM_GEOMETRYPOINT
set custom geometry point
@ MID_GNE_POI_TRANSFORM_POIGEO
Transform to POI Geo.
@ MID_GNE_POI_RELEASE
release POI from lane
@ MID_GNE_DEMANDVIEWOPTIONS_SHOWTRIPS
show all trips
Definition GUIAppEnum.h:931
@ MID_GNE_NETWORKVIEWOPTIONS_TOGGLEGRID
show grid
Definition GUIAppEnum.h:819
@ MID_GNE_INTERVALBAR_LIMITED
enable/disable show data elements by interval
Definition GUIAppEnum.h:975
@ MID_GNE_EDGE_EDIT_ENDPOINT
change default geometry endpoints
@ MID_GNE_POLYGON_DELETE_GEOMETRY_POINT
delete geometry point
@ MID_HOTKEY_P_MODE_POLYGON_PERSON
hotkey for mode creating polygons
Definition GUIAppEnum.h:61
@ MID_GNE_JUNCTION_ADDJOINTLS
Add join TLS into junctions.
@ MID_GNE_CROSSING_EDIT_SHAPE
edit crossing shape
@ MID_GNE_POLYGON_OPEN
open closed polygon
@ MID_GNE_POI_TRANSFORM_POI
Transform to POI.
@ MID_GNE_POLYGON_SIMPLIFY_SHAPE
simplify polygon geometry
@ MID_REMOVESELECT
Remove from selected items - Menu Entry.
Definition GUIAppEnum.h:489
GUICompleteSchemeStorage gSchemeStorage
@ MOVEELEMENT
move element cursor
@ MOVEVIEW
move view cursor
@ SELECT_LANE
select lanecursor
@ DEFAULT
default cursor
@ SELECT
select cursor
@ DELETE_CURSOR
delete cursor
@ INSPECT_LANE
inspect lane cursor
@ INSPECT
inspect cursor
#define GUIDesignButtonPopup
checkable button placed in popup (for example, locate buttons)
Definition GUIDesigns.h:130
#define GUIDesignVerticalSeparator
vertical separator
Definition GUIDesigns.h:497
unsigned int GUIGlID
Definition GUIGlObject.h:44
GUIGlObjectType
@ GLO_TAZRELDATA
TAZ relation data.
@ GLO_WALKINGAREA
a walkingArea
@ GLO_TEMPORALSHAPE
temporal shape (used in netedit)
@ GLO_TESTELEMENT
test element (used in netedit)
@ GLO_JUNCTION
a junction
@ GLO_LANE
a lane
@ GLO_CONNECTION
a connection
@ GLO_EDGE
an edge
@ GLO_VEHICLE
a vehicle
@ GLO_TLLOGIC
a tl-logic
@ GLO_CROSSING
a tl-logic
GUIViewObjectsHandler gViewObjectsHandler
GUIViewUpdater gViewUpdater
@ LOCATEVEHICLE
@ LOCATEWALKINGAREA
@ LOCATEPERSON
@ LOCATECONTAINER
@ LOCATEJUNCTION
#define WRITE_WARNINGF(...)
Definition MsgHandler.h:287
#define WRITE_ERROR(msg)
Definition MsgHandler.h:295
#define WRITE_WARNING(msg)
Definition MsgHandler.h:286
#define TL(string)
Definition MsgHandler.h:304
#define TLF(string,...)
Definition MsgHandler.h:306
StringBijection< SUMOVehicleClass > SumoVehicleClassStrings(sumoVehicleClassStringInitializer, SVC_CUSTOM2, false)
long long int SVCPermissions
bitset where each bit declares whether a certain SVC may use this edge/lane
SUMOVehicleClass
Definition of vehicle classes to differ between different lane usage and authority types.
@ SVC_IGNORING
vehicles ignoring classes
@ SVC_BICYCLE
vehicle is a bicycle
@ SVC_BUS
vehicle is a bus
@ SVC_PEDESTRIAN
pedestrian
@ SUMO_TAG_EDGEREL
a relation between two edges
@ SUMO_TAG_DATAINTERVAL
@ SUMO_TAG_TAZ
a traffic assignment zone
@ SUMO_TAG_TAZSINK
a sink within a district (connection road)
@ GNE_TAG_EDGEREL_SINGLE
@ SUMO_TAG_POI
begin/end of the description of a Point of interest
@ SUMO_TAG_VEHICLE
description of a vehicle
@ GNE_TAG_FLOW_ROUTE
a flow definition using a route instead of a from-to edges route
@ SUMO_TAG_ROUTE_DISTRIBUTION
distribution of a route
@ GNE_TAG_POIGEO
Point of interest over view with GEO attributes.
@ SUMO_TAG_FLOW
a flow definition using from and to edges or a route
@ SUMO_TAG_CONNECTION
connectioon between two lanes
@ SUMO_TAG_JUNCTION
begin/end of the description of a junction
@ SUMO_TAG_CROSSING
crossing between edges for pedestrians
@ SUMO_TAG_POLY
begin/end of the description of a polygon
@ SUMO_TAG_LANE
begin/end of the description of a single lane
@ GNE_TAG_POILANE
Point of interest over Lane.
@ SUMO_TAG_DATASET
@ GNE_TAG_JPS_OBSTACLE
polygon used for draw juPedSim obstacles
@ SUMO_TAG_TAZREL
a relation between two TAZs
@ SUMO_TAG_TAZSOURCE
a source within a district (connection road)
@ GNE_TAG_ROUTE_EMBEDDED
embedded route
@ SUMO_TAG_INDUCTION_LOOP
alternative tag for e1 detector
@ GNE_TAG_JPS_WALKABLEAREA
polygon used for draw juPedSim walkable areas
@ SUMO_TAG_VIEWSETTINGS
@ SUMO_TAG_VIEWPORT
@ SUMO_TAG_TRIP
a single trip definition (used by router)
@ SUMO_TAG_EDGE
begin/end of the description of an edge
@ SUMO_ATTR_LANE
@ SUMO_ATTR_LON
@ GNE_ATTR_OPPOSITE
to busStop (used by personPlans)
@ SUMO_ATTR_Y
@ SUMO_ATTR_X
@ GNE_ATTR_SELECTED
element is selected
@ SUMO_ATTR_CUSTOMSHAPE
whether a given shape is user-defined
@ SUMO_ATTR_POSITION_LAT
@ SUMO_ATTR_ZOOM
@ SUMO_ATTR_SHAPE
edge: the shape in xml-definition
@ SUMO_ATTR_ANGLE
@ GNE_ATTR_SHAPE_END
last coordinate of edge shape
@ SUMO_ATTR_TLID
link,node: the traffic light id responsible for this link
@ SUMO_ATTR_FRIENDLY_POS
@ SUMO_ATTR_LAT
@ SUMO_ATTR_TYPE
@ SUMO_ATTR_LENGTH
@ SUMO_ATTR_ID
@ GNE_ATTR_SHAPE_START
first coordinate of edge shape
@ SUMO_ATTR_POSITION
const double SUMO_const_laneWidth
Definition StdDefs.h:52
T MIN2(T a, T b)
Definition StdDefs.h:80
T MAX2(T a, T b)
Definition StdDefs.h:86
const unsigned char TLS[]
Definition TLS.cpp:22
std::string toString(const T &t, std::streamsize accuracy=gPrecision)
Definition ToString.h:46
void parseSumoBaseObject(CommonXMLStructure::SumoBaseObject *obj)
parse SumoBaseObject (it's called recursivelly)
A class that stores a 2D geometrical boundary.
Definition Boundary.h:39
void add(double x, double y, double z=0)
Makes the boundary include the given coordinate.
Definition Boundary.cpp:75
double ymin() const
Returns minimum y-coordinate.
Definition Boundary.cpp:127
double xmin() const
Returns minimum x-coordinate.
Definition Boundary.cpp:115
Boundary & grow(double by)
extends the boundary by the given amount
Definition Boundary.cpp:340
double ymax() const
Returns maximum y-coordinate.
Definition Boundary.cpp:133
double xmax() const
Returns maximum x-coordinate.
Definition Boundary.cpp:121
void addBoolAttribute(const SumoXMLAttr attr, const bool value)
add bool attribute into current SumoBaseObject node
void addDoubleAttribute(const SumoXMLAttr attr, const double value)
add double attribute into current SumoBaseObject node
void addStringAttribute(const SumoXMLAttr attr, const std::string &value)
add string attribute into current SumoBaseObject node
static void drawLine(const Position &beg, double rot, double visLength)
Draws a thin line.
Definition GLHelper.cpp:433
static void setColor(const RGBColor &c)
Sets the gl-color to this value.
Definition GLHelper.cpp:649
static void drawOutlineCircle(double radius, double iRadius, int steps=8)
Draws an unfilled circle around (0,0)
Definition GLHelper.cpp:591
static void drawFilledCircle(const double widradiusth, const int steps=8)
Draws a filled circle around (0,0)
Definition GLHelper.cpp:564
static void popMatrix()
pop matrix
Definition GLHelper.cpp:131
static void pushMatrix()
push matrix
Definition GLHelper.cpp:118
GNEConsecutiveSelector * getConsecutiveLaneSelector() const
get consecutive lane selector
bool createPath(const bool useLastRoute)
create path
bool addAdditional(const GNEViewNetHelper::ViewObjectsSelector &viewObjects)
add additional element
GNEViewObjectSelector * getViewObjetsSelector() const
get module for select view objects
virtual void openAdditionalDialog()
open Additional Dialog
GNEApplicationWindowHelper::EditMenuCommands & getEditMenuCommands()
get Edit Menu Commands (needed for show/hide menu commands)
bool allowInputSignals(FXObject *obj) const
check if ignore input signal (using during netedit tests)
GNEApplicationWindowHelper::ToolbarsGrip & getToolbarsGrip()
get ToolbarsGrip
bool isAttributeCarrierSelected() const
check if attribute carrier is selected
void selectAttributeCarrier()
select attribute carrier using GUIGlobalSelection
virtual GNEMoveElement * getMoveElement() const =0
get GNEMoveElement associated with this AttributeCarrier
const std::string getID() const override
get ID (all Attribute Carriers have one)
void unselectAttributeCarrier()
unselect attribute carrier using GUIGlobalSelection
const std::string & getTagStr() const
get tag assigned to this object in string format
const std::string & getFilename() const
get filename in which save this AC
const GNETagProperties * getTagProperty() const
get tagProperty associated with this Attribute Carrier
virtual GUIGlObject * getGUIGlObject()=0
get GUIGlObject associated with this AttributeCarrier
void setNewParent(const GNEAttributeCarrier *AC)
set new parent
static void changeAttribute(GNEAttributeCarrier *AC, SumoXMLAttr key, const std::string &value, GNEUndoList *undoList, const bool force=false)
change attribute
void smootShape()
smoothShape
long onCmdSaveModifications(FXObject *, FXSelector, void *)
Called when the user presses the OK-Button saves any connection modifications.
long onCmdCancelModifications(FXObject *, FXSelector, void *)
Called when the user presses the Cancel-button discards any connection modifications.
ConnectionModifications * getConnectionModifications() const
get pointer to ConnectionModifications module
void handleLaneClick(const GNEViewNetHelper::ViewObjectsSelector &viewObjects)
either sets the current lane or toggles the connection of the
void drawTemporalConsecutiveLanePath() const
draw temporal consecutive lane path
void abortPathCreation()
abort path creation
void removeLastElement()
remove path element
GNEPlanCreator * getPlanCreator() const
get plan creator module
bool addContainer(const GNEViewNetHelper::ViewObjectsSelector &viewObjects)
add vehicle element
void show()
show Frame
GNEPlanCreator * getPlanCreator() const
get plan creator module
bool addContainerPlanElement(const GNEViewNetHelper::ViewObjectsSelector &viewObjects)
add container plan element
void processClick(const Position &clickedPosition, const GNEViewNetHelper::ViewObjectsSelector &viewObjects, const bool oppositeEdge, const bool chainEdge)
handle processClick and set the relative coloring
void abortEdgeCreation()
abort current edge creation
void show()
show create edge frame
const GNEJunction * getJunctionSource() const
get junction source for new edge
void clearEdgesHotkey()
clear edges (used when user press ESC key in Crossing mode)
void createCrossingHotkey()
create crossing (used when user press ENTER key in Crossing mode)
void addCrossing(const GNEViewNetHelper::ViewObjectsSelector &viewObjects)
add Crossing element
bool deleteOnlyGeometryPoints() const
check if only delete geometry points checkbox is enabled
bool removeGeometryPoint(const GNEViewNetHelper::ViewObjectsSelector &viewObjects)
remove geometry point
DeleteOptions * getDeleteOptions() const
get delete options modul
void removeSelectedAttributeCarriers()
remove selected attribute carriers (element)
void removeAttributeCarrier(const GNEViewNetHelper::ViewObjectsSelector &viewObjects)
remove attribute carrier (element)
void show()
show delete frame
void startDrawing()
start drawing
bool isDrawing() const
return true if currently a shape is drawed
bool getDeleteLastCreatedPoint()
get flag delete last created point
void abortDrawing()
abort drawing
void setDeleteLastCreatedPoint(bool value)
enable or disable delete last created point
void stopDrawing()
stop drawing and check if shape can be created
const PositionVector & getTemporalShape() const
get Temporal shape
bool addEdgeData(const GNEViewNetHelper::ViewObjectsSelector &viewObjects, const GNEViewNetHelper::MouseButtonKeyPressed &mouseButtonKeyPressed)
add additional element
void smooth(GNEUndoList *undoList)
make geometry smooth
Definition GNEEdge.cpp:2341
void setAttribute(SumoXMLAttr key, const std::string &value, GNEUndoList *undoList) override
Definition GNEEdge.cpp:1226
NBEdge * getNBEdge() const
returns the internal NBEdge
Definition GNEEdge.cpp:753
void smoothElevation(GNEUndoList *undoList)
smooth elevation with regard to adjoining edges
Definition GNEEdge.cpp:2353
std::vector< GNEEdge * > getOppositeEdges() const
get opposite edges
Definition GNEEdge.cpp:687
void copyTemplate(const GNEEdgeTemplate *edgeTemplate, GNEUndoList *undoList)
copy edge attributes from edgetemplate
Definition GNEEdge.cpp:1022
void editEndpoint(Position pos, GNEUndoList *undoList)
makes pos the new geometry endpoint at the appropriate end, or remove current existent endpoint
Definition GNEEdge.cpp:775
Position getSplitPos(const Position &clickPos)
Definition GNEEdge.cpp:759
void straightenElevation(GNEUndoList *undoList)
interpolate z values linear between junctions
Definition GNEEdge.cpp:2258
void resetEndpoint(const Position &pos, GNEUndoList *undoList)
restores the endpoint to the junction position at the appropriate end
Definition GNEEdge.cpp:827
bool addEdgeRelationData(const GNEViewNetHelper::ViewObjectsSelector &viewObjects, const GNEViewNetHelper::MouseButtonKeyPressed &mouseButtonKeyPressed)
add additional element
void focusUpperElement()
focus upper element of frame
Definition GNEFrame.cpp:104
virtual void show()
show Frame
Definition GNEFrame.cpp:110
GNEPathCreator * getPathCreator() const
get GNEPathCreator modul
const GNEHierarchicalContainerParents< GNEDemandElement * > & getParentDemandElements() const
get parent demand elements
const GNEHierarchicalContainerChildren< GNELane * > & getChildLanes() const
get child lanes
const GNEHierarchicalContainerParents< GNEJunction * > & getParentJunctions() const
get parent junctions
void setEdgeTemplate(const GNEEdge *edge)
set edge template
GNEEdgeTemplate * getEdgeTemplate() const
get edge template (to copy attributes from)
TemplateEditor * getTemplateEditor() const
get template editor
bool inspectClickedElements(GNEViewNetHelper::ViewObjectsSelector &viewObjects, const Position &clickedPosition, const bool shiftKeyPressed)
process click over Viewnet
void show()
show inspector frame
GNEOverlappedInspection * getOverlappedInspection() const
get GNEOverlappedInspection modul
void clearInspection()
clear inspection
GNEAttributesEditor * getAttributesEditor() const
get AttributesEditor
void inspectElement(GNEAttributeCarrier *AC, GNEAttributeCarrier *previousInspectedAC=nullptr)
Inspect a single element.
const std::vector< GNEEdge * > & getGNEIncomingEdges() const
Returns incoming GNEEdges.
std::string getAttribute(SumoXMLAttr key) const override
void setAttribute(SumoXMLAttr key, const std::string &value, GNEUndoList *undoList) override
Position getPositionInView() const
Returns position of hierarchical element in view.
const std::vector< GNEEdge * > & getGNEOutgoingEdges() const
Returns incoming GNEEdges.
NBNode * getNBNode() const
Return net build node.
const PositionVector & getLaneShape() const
get elements shape
Definition GNELane.cpp:232
int getIndex() const
returns the index of the lane
Definition GNELane.cpp:624
void setAttribute(SumoXMLAttr key, const std::string &value, GNEUndoList *undoList) override
Definition GNELane.cpp:763
GNEEdge * getParentEdge() const
get parent edge
Definition GNELane.cpp:214
void show()
show Frame
virtual void removeGeometryPoint(const Position clickedPosition, GNEUndoList *undoList)=0
remove geometry point in the clicked position
void show()
show prohibition frame
const std::unordered_map< SumoXMLTag, std::unordered_map< const GUIGlObject *, GNEDemandElement * >, std::hash< int > > & getDemandElements() const
get demand elements
GNETAZSourceSink * retrieveTAZSourceSink(const GNEAttributeCarrier *sourceSink, bool hardFail=true) const
Returns the named sourceSink.
GNEAttributeCarrier * retrieveAttributeCarrier(const GUIGlID id, bool hardFail=true) const
get a single attribute carrier based on a GLID
std::vector< GNEAdditional * > getSelectedShapes() const
get selected shapes
GNELane * retrieveLane(const std::string &id, bool hardFail=true, bool checkVolatileChange=false) const
get lane by id
const std::unordered_map< SumoXMLTag, std::unordered_map< const GUIGlObject *, GNEGenericData * >, std::hash< int > > & getGenericDatas() const
get all generic datas
GNECrossing * retrieveCrossing(const GUIGlObject *glObject, bool hardFail=true) const
get Crossing by AC
GNEAdditional * retrieveAdditional(SumoXMLTag type, const std::string &id, bool hardFail=true) const
Returns the named additional.
GNEWalkingArea * retrieveWalkingArea(const GUIGlObject *glObject, bool hardFail=true) const
get WalkingArea by GlObject
GNEJunction * retrieveJunction(const std::string &id, bool hardFail=true) const
get junction by id
GNEDataSet * retrieveDataSet(const std::string &id, bool hardFail=true) const
Returns the named data set.
std::vector< GNELane * > getSelectedLanes() const
get selected lanes
const std::map< std::string, GNEEdge * > & getEdges() const
map with the ID and pointer to edges of net
std::string generateAdditionalID(SumoXMLTag type) const
generate additional id
std::vector< GNEJunction * > getSelectedJunctions() const
return selected junctions
GNEDataInterval * retrieveDataInterval(const GNEAttributeCarrier *AC, bool hardFail=true) const
Returns the data interval.
GNEEdge * retrieveEdge(const std::string &id, bool hardFail=true) const
get edge by id
const std::unordered_map< const GUIGlObject *, GNELane * > & getLanes() const
get lanes
std::vector< GNEEdge * > getSelectedEdges() const
return all edges
const std::map< std::string, GNEJunction * > & getJunctions() const
get junctions
GNEDemandElement * retrieveDemandElement(SumoXMLTag type, const std::string &id, bool hardFail=true) const
Returns the named demand element.
std::vector< std::string > getPOIParamKeys() const
return list of available POI parameters
GNEGenericData * retrieveGenericData(const GUIGlObject *glObject, bool hardFail=true) const
Returns the generic data.
std::vector< GNEAttributeCarrier * > getSelectedAttributeCarriers(const bool ignoreCurrentSupermode)
get all selected attribute carriers (or only relative to current supermode
GNEConnection * retrieveConnection(const std::string &id, bool hardFail=true) const
get Connection by id
A NBNetBuilder extended by visualisation and editing capabilities.
Definition GNENet.h:42
void deleteEdge(GNEEdge *edge, GNEUndoList *undoList, bool recomputeConnections)
removes edge
Definition GNENet.cpp:458
void deleteLane(GNELane *lane, GNEUndoList *undoList, bool recomputeConnections)
removes lane
Definition GNENet.cpp:637
void deleteCrossing(GNECrossing *crossing, GNEUndoList *undoList)
remove crossing
Definition GNENet.cpp:694
SUMORTree & getGrid()
Returns the RTree used for visualisation speed-up.
Definition GNENet.cpp:193
void deleteAdditional(GNEAdditional *additional, GNEUndoList *undoList)
remove additional
Definition GNENet.cpp:712
void computeAndUpdate(OptionsCont &neteditOptions, bool volatileOptions)
recompute the network and update lane geometries
Definition GNENet.cpp:2977
GNEPathManager * getDataPathManager()
get data path manager
Definition GNENet.cpp:180
void reverseEdge(GNEEdge *edge, GNEUndoList *undoList)
reverse edge
Definition GNENet.cpp:1114
NBTrafficLightLogicCont & getTLLogicCont()
returns the tllcont of the underlying netbuilder
Definition GNENet.cpp:2199
bool restrictLane(SUMOVehicleClass vclass, GNELane *lane, GNEUndoList *undoList)
transform lane to restricted lane
Definition GNENet.cpp:853
void setViewNet(GNEViewNet *viewNet)
Set the net to be notified of network changes.
Definition GNENet.cpp:1422
void deleteDemandElement(GNEDemandElement *demandElement, GNEUndoList *undoList)
remove demand element
Definition GNENet.cpp:746
void duplicateLane(GNELane *lane, GNEUndoList *undoList, bool recomputeConnections)
duplicates lane
Definition GNENet.cpp:837
void deleteDataInterval(GNEDataInterval *dataInterval, GNEUndoList *undoList)
remove data interval
Definition GNENet.cpp:785
void deleteConnection(GNEConnection *connection, GNEUndoList *undoList)
remove connection
Definition GNENet.cpp:679
GNEPathManager * getDemandPathManager()
get demand path manager
Definition GNENet.cpp:174
void resetJunctionConnections(GNEJunction *junction, GNEUndoList *undoList)
reset junction's connections
Definition GNENet.cpp:2114
void deleteGenericData(GNEGenericData *genericData, GNEUndoList *undoList)
remove generic data
Definition GNENet.cpp:798
std::pair< GNEJunction *, GNEEdge * > splitEdge(GNEEdge *edge, const Position &pos, GNEUndoList *undoList, GNEJunction *newJunction=0)
split edge at position by inserting a new junction
Definition GNENet.cpp:973
GNENetHelper::AttributeCarriers * getAttributeCarriers() const
get all attribute carriers used in this net
Definition GNENet.cpp:144
GNEEdge * addReversedEdge(GNEEdge *edge, const bool disconnected, GNEUndoList *undoList)
add reversed edge
Definition GNENet.cpp:1130
void splitEdgesBidi(GNEEdge *edge, GNEEdge *oppositeEdge, const Position &pos, GNEUndoList *undoList)
split all edges at position by inserting one new junction
Definition GNENet.cpp:1090
bool removeRestrictedLane(SUMOVehicleClass vclass, GNEEdge *edge, GNEUndoList *undoList)
remove restricted lane
Definition GNENet.cpp:959
void deleteTAZSourceSink(GNETAZSourceSink *TAZSourceSink, GNEUndoList *undoList)
remove TAZSourceSink
Definition GNENet.cpp:737
bool addRestrictedLane(SUMOVehicleClass vclass, GNEEdge *edge, int index, GNEUndoList *undoList)
add restricted lane to edge
Definition GNENet.cpp:906
bool addGreenVergeLane(GNEEdge *edge, int index, GNEUndoList *undoList)
add restricted lane to edge
Definition GNENet.cpp:942
void deleteDataSet(GNEDataSet *dataSet, GNEUndoList *undoList)
remove data set
Definition GNENet.cpp:772
GNEPathManager * getNetworkPathManager()
get network path manager
Definition GNENet.cpp:168
void splitJunction(GNEJunction *junction, bool reconnect, GNEUndoList *undoList)
replace the selected junction by a list of junctions for each unique edge endpoint
Definition GNENet.cpp:2017
void selectRoundabout(GNEJunction *junction, GNEUndoList *undoList)
select all roundabout edges and junctions for the current roundabout
Definition GNENet.cpp:1199
void replaceJunctionByGeometry(GNEJunction *junction, GNEUndoList *undoList)
replace the selected junction by geometry node(s) and merge the edges
Definition GNENet.cpp:1972
void createRoundabout(GNEJunction *junction, GNEUndoList *undoList)
transform the given junction into a roundabout
Definition GNENet.cpp:1218
void requireRecompute()
inform the net about the need for recomputation
Definition GNENet.cpp:1598
void initGNEConnections()
initialize GNEConnections
Definition GNENet.cpp:2964
void deleteJunction(GNEJunction *junction, GNEUndoList *undoList)
removes junction and all incident edges
Definition GNENet.cpp:411
NBEdgeCont & getEdgeCont()
returns the NBEdgeCont of the underlying netbuilder
Definition GNENet.cpp:2205
void drawGL(const GUIVisualizationSettings &s) const override
Draws the object.
Definition GNENet.cpp:227
GNEViewNet * getViewNet() const
get view net
Definition GNENet.cpp:2193
void clearJunctionConnections(GNEJunction *junction, GNEUndoList *undoList)
clear junction's connections
Definition GNENet.cpp:2102
void computeDemandElements(GNEApplicationWindow *window)
compute demand elements param[in] window The window to inform about delay
Definition GNENet.cpp:1547
void closeShapeEdited(GNEUndoList *undoList)
close shape edited
void setFirstGeometryPointShapeEdited(const int index, GNEUndoList *undoList)
set first geometry point shape edited
void openShapeEdited(GNEUndoList *undoList)
open shape edited
int getGeometryPointUnderCursorShapeEdited() const
get index geometry point under cursor of shape edited
void simplifyShapeEdited(GNEUndoList *undoList)
simplify shape edited
void straigthenShapeEdited(GNEUndoList *undoList)
straighten shape edited
void deleteGeometryPointShapeEdited(const int index, GNEUndoList *undoList)
delete geometry point shape edited
void resetShapeEdited(GNEUndoList *undoList)
reset shape edited
bool overlappedInspectionShown() const
check if overlappedInspection modul is shown
long onCmdCreatePath(FXObject *, FXSelector, void *)
void abortPathCreation()
abort path creation
void removeLastElement()
remove path element
bool createPath(const bool useLastRoute)
create path
void drawTemporalRoute(const GUIVisualizationSettings &s) const
draw temporal route
void calculateReachability(const SUMOVehicleClass vClass, GNEEdge *originEdge)
calculate reachability for given edge
void clearPathDraw()
clear path draw
PathCalculator * getPathCalculator()
obtain instance of PathCalculator
PathDraw * getPathDraw()
obtain instance of PathDraw
void redrawPathElements(const GUIVisualizationSettings &s) const
redraw path elements saved in gViewObjectsHandler buffer
void show()
show Frame
GNEPlanCreator * getPlanCreator() const
get plan creator module
GNEPlanSelector * getPlanSelector() const
get personPlan selector
bool addPerson(const GNEViewNetHelper::ViewObjectsSelector &viewObjects)
add vehicle element
bool addPersonPlanElement(const GNEViewNetHelper::ViewObjectsSelector &viewObjects)
add person plan element
GNEPlanCreator * getPlanCreator() const
get plan creator module
GNEPlanSelector * getPlanSelector() const
get personPlan selector
void removeLastElement()
remove path element
long onCmdCreatePath(FXObject *, FXSelector, void *)
void abortPathCreation()
abort path creation
void drawTemporalRoute(const GUIVisualizationSettings &s) const
draw temporal route
const GNETagProperties * getCurrentPlanTagProperties() const
get current plan tag properties
int getVertexIndex(Position pos, bool snapToGrid)
return index of a vertex of shape, or of a new vertex if position is over an shape's edge
Definition GNEPoly.cpp:358
void closePolygon(bool allowUndo=true)
close polygon
Definition GNEPoly.cpp:437
void changeFirstGeometryPoint(int oldIndex, bool allowUndo=true)
change first geometry point
Definition GNEPoly.cpp:458
void deleteGeometryPoint(const Position &pos, bool allowUndo=true)
delete the geometry point closest to the given pos
Definition GNEPoly.cpp:374
CommonXMLStructure::SumoBaseObject * getSumoBaseObject() const
get SUMOBaseObject with all polygon attributes
Definition GNEPoly.cpp:530
void simplifyShape(bool allowUndo=true)
replace the current shape with a rectangle
Definition GNEPoly.cpp:498
void openPolygon(bool allowUndo=true)
open polygon
Definition GNEPoly.cpp:416
long onCmdCancel(FXObject *, FXSelector, void *)
Called when the user presses the Cancel-button discards any prohibition modifications.
void handleProhibitionClick(const GNEViewNetHelper::ViewObjectsSelector &viewObjects)
handle prohibitions and set the relative coloring
GNEProhibitionFrame::Selection * getSelectionModul() const
get selection module
void show()
show prohibition frame
GNEDistributionFrame::DistributionSelector * getDistributionSelector() const
get route distribution selector
void show()
show delete frame
GNEPathCreator * getPathCreator() const
get path creator module
bool addEdgeRoute(GNEEdge *clickedEdge, const GNEViewNetHelper::MouseButtonKeyPressed &mouseButtonKeyPressed)
add route edge
static void addReverse(GNEDemandElement *element)
add reverse for given demand element
static void reverse(GNEDemandElement *element)
reverse given demand element
void show()
show Frame
void clearCurrentSelection() const
clear current selection with possibility of undo/redo
bool selectAttributeCarrier(const GNEViewNetHelper::ViewObjectsSelector &viewObjects)
select attribute carrier (element)
void show()
show Frame
bool processClick(const Position &clickedPosition, const GNEViewNetHelper::ViewObjectsSelector &viewObjects, bool &updateTemporalShape)
process click over Viewnet
GNEDrawingShape * getDrawingShapeModule() const
get drawing mode editor
void show()
show Frame
bool addStop(const GNEViewNetHelper::ViewObjectsSelector &viewObjects, const GNEViewNetHelper::MouseButtonKeyPressed &mouseButtonKeyPressed)
add Stop element
void setTAZ(GNETAZ *editedTAZ)
set current TAZ
GNETAZ * getTAZ() const
get current TAZ
bool isChangesPending() const
return true if there is changes to save
long onCmdSaveChanges(FXObject *, FXSelector, void *)
TAZSaveChanges * getTAZSaveChangesModule() const
get TAZ Save Changes module
GNEDrawingShape * getDrawingShapeModule() const
get drawing mode module
CurrentTAZ * getCurrentTAZModule() const
get Current TAZ module
void show()
show TAZ Frame
void processEdgeSelection(const std::vector< GNEEdge * > &edges)
process selection of edges in view net
bool processClick(const Position &clickedPosition, const GNEViewNetHelper::ViewObjectsSelector &viewObjects)
process click over Viewnet
bool setTAZ(const GNEViewNetHelper::ViewObjectsSelector &viewObjects)
set clicked TAZ
void buildTAZRelationData()
build TAZRelation data
void clearTAZSelection()
clear TAZ selection
bool isSetDetectorsToggleButtonEnabled() const
toggle button for set detectors mode
void disableE1DetectorMode()
disable detector mode
const std::map< std::string, std::string > & getE1Detectors() const
get E1 detectors vinculated with this TLS
const std::vector< std::string > & getSelectedJunctionIDs() const
get selected junction IDs
long onCmdCancelJoin(FXObject *, FXSelector, void *)
cancel join
long onCmdAcceptJoin(FXObject *, FXSelector, void *)
accept join
GNEJunction * getCurrentJunction() const
get current modified junction
bool isJoiningJunctions() const
is joining junctions
bool checkHaveModifications() const
check if current TLS was modified
long onCmdSaveChanges(FXObject *, FXSelector, void *)
Called when the user presses the save-Button.
void discardChanges(const bool editJunctionAgain)
discard changes
GNETLSEditorFrame::TLSAttributes * getTLSAttributes() const
get module for TLS attributes
void editJunction(GNEJunction *junction)
edits the traffic light for the given junction
GNETLSEditorFrame::TLSJunction * getTLSJunction() const
get module for TLS Junction
void editTLS(GNEViewNetHelper::ViewObjectsSelector &viewObjects, const Position &clickedPosition, const bool shiftKeyPressed)
edits the traffic light for the given clicked junction
GNETLSEditorFrame::TLSPrograms * getTLSPrograms() const
get module for TLS Definition
void show()
show inspector frame
bool isContainer() const
return true if tag correspond to a container element
bool planRoute() const
return true if tag correspond to a plan placed over route
bool isPlacedInRTree() const
return true if Tag correspond to an element that has to be placed in RTREE
SumoXMLTag getTag() const
get Tag vinculated with this attribute Property
bool hasDialog() const
return true if tag correspond to an element that can be edited using a dialog
bool isAdditionalElement() const
return true if tag correspond to an additional element (note: this include TAZ, shapes and wires)
bool isPerson() const
return true if tag correspond to a person element
GNEDistributionFrame::DistributionSelector * getDistributionSelector() const
get type distribution selector
void show()
show Frame
void end()
End undo command sub-group. If the sub-group is still empty, it will be deleted; otherwise,...
void begin(GUIIcon icon, const std::string &description)
Begin undo command sub-group with current supermode. This begins a new group of commands that are tre...
void abortAllChangeGroups()
reverts and discards ALL active chained change groups
void add(GNEChange *command, bool doit=false, bool merge=true)
Add new command, executing it if desired. The new command will be merged with the previous command if...
GNEPathCreator * getPathCreator() const
get GNEPathCreator module
void show()
show Frame
bool addVehicle(const GNEViewNetHelper::ViewObjectsSelector &viewObjects, const GNEViewNetHelper::MouseButtonKeyPressed &mouseButtonKeyPressed)
add vehicle element
class used for group inspected elements
bool isInspectingElements() const
check if we're inspecting at least one element
const std::unordered_set< GNEAttributeCarrier * > & getACs() const
get hash table with all inspected ACs
GNEAttributeCarrier * getFirstAC() const
class used to group all variables related to interval bar
void hideIntervalBar()
hide all options menu checks
void setGenericDataType()
set generic data type
void showIntervalBar()
show interval option bar
void buildIntervalBarElements()
build interval bar elements
void setInterval()
update limit by interval
void updateLockMenuBar()
update lock inspect menuBar
bool isObjectLocked(GUIGlObjectType objectType, const bool selected) const
check if given GLObject is locked for inspect, select, delete and move
class used for group front elements
const std::unordered_set< GNEAttributeCarrier * > & getACs() const
get hash table with all fronted ACs
class used to group all variables related with objects under cursor after a click over view
void updateObjects()
update objects (using gViewObjectsHandler)
void filterConnections()
filter (remove) connections
void updateMergingJunctions()
update merging junctions
GNEConnection * getConnectionFront() const
get front connection or a pointer to nullptr
const std::vector< GNEAttributeCarrier * > & getAttributeCarriers() const
get vector with ACs
void filterEdges()
filter (remove) edges
void filterLockedElements(const std::vector< GUIGlObjectType > ignoreFilter={})
filter locked elements (except the ignoreFilter)
void filterCrossings()
filter (remove) crossings
GNEPOI * getPOIFront() const
get front POI or a pointer to nullptr
GNEEdge * getEdgeFront() const
get front edge or a pointer to nullptr
GNEAttributeCarrier * getAttributeCarrierFront() const
get front attribute carrier or a pointer to nullptr
void filterDemandElements(const bool includeRoutes)
filter (remove) demand elements
void filterWalkingAreas()
filter (remove) walkingAreas
void filterAdditionals(const bool includeStoppigPlaces, const bool includeTAZs)
filter (remove) additionals
GNELane * getLaneFront() const
get front lane or a pointer to nullptr
GNELane * getLaneFrontNonLocked() const
get front lane or a pointer to nullptr checking if is locked
const GUIGlObject * getGUIGlObjectFront() const
get front GUIGLObject or a pointer to nullptr
GNENetworkElement * getNetworkElementFront() const
get front network element or a pointer to nullptr
void filterLanes()
filter (remove) lanes
const std::vector< GUIGlObject * > & getGLObjects() const
get vector with GL objects
void filterShapes()
filter (remove) polys and POIs
const std::vector< GNELane * > & getLanes() const
get lanes
GNEViewNetHelper::EditNetworkElementShapes myEditNetworkElementShapes
struct for grouping all variables related with edit shapes
Definition GNEViewNet.h:713
long onCmdToggleShowDemandElementsNetwork(FXObject *, FXSelector, void *)
toggle show demand elements (network)
long onMouseMove(FXObject *, FXSelector, void *) override
called when user moves mouse
void openObjectDialogAtCursor(const FXEvent *ev) override
open object dialog
long onCmdClosePolygon(FXObject *, FXSelector, void *)
close opened polygon
bool isCurrentlyMovingElements() const
check if an element is being moved
long onCmdEditCrossingShape(FXObject *, FXSelector, void *)
edit crossing shape
void processMoveMouseNetwork(const bool mouseLeftButtonPressed)
process move mouse function in Supermode Network
const GNEViewNetHelper::DataViewOptions & getDataViewOptions() const
get data view options
GNENet * getNet() const
get the net object
long onCmdSetFirstGeometryPoint(FXObject *, FXSelector, void *)
set as first geometry point the closes geometry point
long onCmdEdgeUseAsTemplate(FXObject *, FXSelector, void *)
use edge as template
long onCmdSmoothConnectionShape(FXObject *, FXSelector, void *)
edit connection shape
GNEViewNetHelper::CommonCheckableButtons myCommonCheckableButtons
variable used to save checkable buttons for common supermodes
Definition GNEViewNet.h:651
void hotkeyBackSpace()
handle backspace keypress
GNEViewNetHelper::MarkFrontElements myMarkFrontElements
front element
Definition GNEViewNet.h:722
GNEDemandElement * myLastCreatedRoute
last created route
Definition GNEViewNet.h:737
const GNEViewNetHelper::EditModes & getEditModes() const
get edit modes
long onCmdAddSelected(FXObject *, FXSelector, void *)
select AC under cursor
const GNEViewNetHelper::EditNetworkElementShapes & getEditNetworkElementShapes() const
get Edit Shape module
GNECrossing * getCrossingAtPopupPosition()
try to retrieve a crossing at popup position
std::vector< std::string > getPOIParamKeys() const override
return list of available POI parameters
void updateNetworkModeSpecificControls()
updates Network mode specific controls
long onCmdAddTLS(FXObject *, FXSelector, void *)
add TLS
long onCmdSmoothEdges(FXObject *, FXSelector, void *)
smooth geometry
long onCmdStraightenEdges(FXObject *, FXSelector, void *)
makes selected edges straight
const GNEViewNetHelper::MouseButtonKeyPressed & getMouseButtonKeyPressed() const
get Key Pressed module
void updateCursor()
update cursor after every click/key press/release
void updateDataModeSpecificControls()
updates Data mode specific controls
GNEEdge * getEdgeAtPopupPosition()
try to retrieve an edge at popup position
long onCmdToggleShowDemandElementsData(FXObject *, FXSelector, void *)
toggle show demand elements (data)
GNEViewNetHelper::EditModes myEditModes
variable used to save variables related with edit moves modes
Definition GNEViewNet.h:632
long onCmdReplaceJunction(FXObject *, FXSelector, void *)
replace node by geometry
bool restrictLane(GNELane *lane, SUMOVehicleClass vclass)
restrict lane
long onCmdSplitJunction(FXObject *, FXSelector, void *)
split junction into multiple junctions
void drawGrid() const
draw grid and update grid button
void deleteDemandAttributeCarrier(const GNEAttributeCarrier *AC)
delete given demand attribute carriers
long onCmdClearConnections(FXObject *, FXSelector, void *)
clear junction connections
void abortOperation(bool clearSelection=true)
abort current edition operation
long onCmdToggleTAZDrawFill(FXObject *, FXSelector, void *)
toggle TAZdrawFill
long onCmdResetEndPoints(FXObject *, FXSelector, void *)
reset edge end points
void updateObjectsInPosition(const Position &pos)
update objects and boundaries in position
GNEViewNetHelper::TestingMode myTestingMode
variable used to save variables related with testing mode
Definition GNEViewNet.h:635
GNEDemandElement * getLastCreatedRoute() const
get last created route
GNEViewNetHelper::InspectedElements & getInspectedElements()
get inspected elements
long onCmdToggleDrawSpreadVehicles(FXObject *, FXSelector, void *)
toggle draw vehicles in begin position or spread in lane
GNEPOI * getPOIAtPopupPosition()
try to retrieve a POILane at popup position
GNEViewNetHelper::SelectingArea mySelectingArea
variable used for grouping all variables related with selecting areas
Definition GNEViewNet.h:710
GNENetworkElement * getShapeEditedAtPopupPosition()
try to retreive a edited shape at popup position
const GNEViewNetHelper::MoveSingleElementModul & getMoveSingleElementValues() const
get move single element values
long onCmdToggleShowConnections(FXObject *, FXSelector, void *)
toggle show connections
long onCmdLaneReachability(FXObject *, FXSelector sel, void *)
show lane reachability
long onCmdToggleShowTAZElements(FXObject *, FXSelector, void *)
toggle show TAZ elements
long onLeftBtnPress(FXObject *, FXSelector, void *) override
GNEViewNetHelper::NetworkCheckableButtons myNetworkCheckableButtons
variable used to save checkable buttons for Supermode Network
Definition GNEViewNet.h:654
long onCmdCloseShapeEdited(FXObject *, FXSelector, void *)
close opened shape edited
bool myCreatedPopup
flag for mark if during this frame a popup was created (needed to avoid problems in linux with Cursor...
Definition GNEViewNet.h:743
void openSelectDialogAtCursor(const std::vector< GUIGlObject * > &GLObjects)
open select dialog at cursor
long onCmdSimplifyShapeEdited(FXObject *, FXSelector, void *)
void processClick(void *eventData)
Auxiliary function used by onLeftBtnPress(...)
void buildViewToolBars(GUIGlChildWindow *v) override
builds the view toolbars
void drawNeteditAttributesReferences()
draw circle in testing mode (needed for grid)
long onCmdSimplifyShape(FXObject *, FXSelector, void *)
simply shape of current polygon
GNELane * getLaneAtPopupPosition()
try to retrieve a lane at popup position
GNEViewNetHelper::MouseButtonKeyPressed myMouseButtonKeyPressed
variable used to save key status after certain events
Definition GNEViewNet.h:643
bool askMergeJunctions(const GNEJunction *movedJunction, const GNEJunction *targetJunction, bool &alreadyAsked)
ask merge junctions
GNEViewNetHelper::IntervalBar myIntervalBar
variable used to save IntervalBar
Definition GNEViewNet.h:679
GNEViewParent * myViewParent
view parent
Definition GNEViewNet.h:725
bool showJunctionAsBubbles() const
return true if junction must be showed as bubbles
bool changeAllPhases() const
change all phases
long onCmdEditJunctionShape(FXObject *, FXSelector, void *)
edit junction shape
long onCmdToggleMoveElevation(FXObject *, FXSelector, void *)
toggle move elevation
GNEWalkingArea * getWalkingAreaAtPopupPosition()
try to retrieve a walkingArea at popup position
long onCmdToggleShowAllPersonPlans(FXObject *, FXSelector, void *)
toggle show all person plans in super mode demand
long onLeftBtnRelease(FXObject *, FXSelector, void *) override
called when user releases mouse's left button
long onCmdOpenAdditionalDialog(FXObject *, FXSelector, void *)
open additional dialog
long onCmdToggleTAZRelOnlyTo(FXObject *, FXSelector, void *)
toggle TAZRez only to
long onCmdEgeApplyTemplate(FXObject *, FXSelector, void *)
apply template to edge
long onCmdSetNeteditView(FXObject *, FXSelector sel, void *)
called when a new view is set
const GNEViewNetHelper::NetworkViewOptions & getNetworkViewOptions() const
get network view options
void hotkeyFocusFrame()
handle focus frame keypress
long onCmdToggleChainEdges(FXObject *, FXSelector, void *)
toggle chain edges
GNEViewNetHelper::DemandViewOptions myDemandViewOptions
variable used to save variables related with view options in supermode Demand
Definition GNEViewNet.h:671
void drawTemporalJunctionTLSLines() const
draw temporal Junction TLS Lines
long onCmdLaneOperation(FXObject *, FXSelector sel, void *)
add/remove/restrict lane
void processMoveMouseData(const bool mouseLeftButtonPressed)
process move mouse function in Supermode Data
GNEFrame * myCurrentFrame
the current frame
Definition GNEViewNet.h:731
bool autoSelectNodes()
whether to autoselect nodes or to lanes
void drawTemporalRoundabout() const
draw temporal roundabout
void deleteDataAttributeCarrier(const GNEAttributeCarrier *AC)
delete data attribute carriers
long onCmdToggleLockContainer(FXObject *, FXSelector, void *)
toggle lock container in super mode demand
GNEUndoList * myUndoList
a reference to the undolist maintained in the application
Definition GNEViewNet.h:734
GNEViewNetHelper::NetworkViewOptions myNetworkViewOptions
variable used to save variables related with view options in supermode Network
Definition GNEViewNet.h:668
GUIGlID getToolTipID() override
returns the id of object under cursor to show their tooltip
long onCmdResetEdgeEndPoints(FXObject *, FXSelector, void *)
edit junction shape
void buildEditModeControls()
create edit mode buttons and elements
GNEViewNetHelper::MoveSingleElementModul myMoveSingleElement
modul used for moving single element
Definition GNEViewNet.h:685
int getDrawingToggle() const
get draw toggle (used to avoid drawing junctions twice)
GNEViewNetHelper::DataCheckableButtons myDataCheckableButtons
variable used to save checkable buttons for Supermode Data
Definition GNEViewNet.h:660
long onCmdToggleShowGrid(FXObject *, FXSelector, void *)
toggle show grid
void processLeftButtonPressDemand(void *eventData)
process left button press function in Supermode Demand
GNEDemandElement * getDemandElementAtPopupPosition()
try to retrieve a demand element at popup position
GNEViewNetHelper::TimeFormat myTimeFormat
variable used for grouping all variables related with switch time
Definition GNEViewNet.h:707
long onLeaveConvertRoundabout(FXObject *, FXSelector, void *)
leave to convert junction to roundabout
GNEViewNetHelper::IntervalBar & getIntervalBar()
get interval bar
long onCmdEditLaneShape(FXObject *, FXSelector, void *)
edit lane shape
GNEViewNetHelper::MarkFrontElements & getMarkFrontElements()
get marked for drawing front elements
long onCmdToggleHideNonInspecteDemandElements(FXObject *, FXSelector, void *)
toggle hide non inspected demand elements
GNEViewParent * getViewParent() const
get the net object
long onCmdToggleDrawJunctionShape(FXObject *, FXSelector, void *)
toggle draw junction shape
bool checkOverLockedElement(const GUIGlObject *GLObject, const bool isSelected) const
check if given element is locked (used for drawing select and delete contour)
long onCmdStraightenShapeEdited(FXObject *, FXSelector, void *)
straight shape edited
long onCmdAddReversedEdge(FXObject *, FXSelector, void *)
add reversed edge
void processLeftButtonReleaseNetwork()
process left button release function in Supermode Network
long onCmdDeleteGeometryPointShapeEdited(FXObject *, FXSelector, void *)
delete the closes geometry point in shape edited
long onMiddleBtnPress(FXObject *, FXSelector, void *) override
called when user press mouse's left button
bool checkSelectEdges() const
check if select edges (toggle using button or shift)
long onCmdAddReversedEdgeDisconnected(FXObject *, FXSelector, void *)
add reversed edge disconnected
long onCmdIntervalBarGenericDataType(FXObject *, FXSelector, void *)
change generic data type in interval bar
long onCmdConvertRoundabout(FXObject *, FXSelector, void *)
convert junction to roundabout
long onCmdRemoveEdgeSelected(FXObject *, FXSelector, void *)
unselect Edge under cursor
long onCmdAddReverse(FXObject *, FXSelector, void *)
add a reverse demand element
long onCmdToggleShowShapes(FXObject *, FXSelector, void *)
toggle show shapes in super mode data
long onCmdToggleMergeAutomatically(FXObject *, FXSelector, void *)
toggle warn for merge
long onCmdOpenPolygon(FXObject *, FXSelector, void *)
open closed polygon
GNEViewNetHelper::InspectedElements myInspectedElements
inspected element
Definition GNEViewNet.h:719
long onCmdSetCustomGeometryPoint(FXObject *, FXSelector, void *)
set custom geometry point
bool removeRestrictedLane(GNELane *lane, SUMOVehicleClass vclass)
remove restricted lane
long onCmdIntervalBarDataSet(FXObject *, FXSelector, void *)
change data set in interval bar
GNEViewNetHelper::SaveElements & getSaveElements()
get variable used to save elements
void processLeftButtonReleaseDemand()
process left button release function in Supermode Demand
const GNEViewNetHelper::TestingMode & getTestingMode() const
get testing mode
GNEUndoList * getUndoList() const
get the undoList object
void processLeftButtonPressData(void *eventData)
process left button press function in Supermode Data
long onCmdTransformPOI(FXObject *, FXSelector, void *)
transform to POI
void saveVisualizationSettings() const
GNEViewNetHelper::SaveElements mySaveElements
variable used for grouping all variables related with salve elements
Definition GNEViewNet.h:704
const GNEViewNetHelper::MoveMultipleElementModul & getMoveMultipleElementValues() const
get move multiple element values
void deleteNetworkAttributeCarrier(const GNEAttributeCarrier *AC)
delete given network attribute carriers
GNEViewNetHelper::LockManager myLockManager
lock manager
Definition GNEViewNet.h:716
long onCmdAddEdgeSelected(FXObject *, FXSelector, void *)
select Edge under cursor
long onCmdIntervalBarSetEnd(FXObject *, FXSelector, void *)
change end in interval bar
long onCmdTransformPOIGEO(FXObject *, FXSelector, void *)
transform to POIGEO
const GNEViewNetHelper::ViewObjectsSelector & getViewObjectsSelector() const
get objects under cursor
void drawTemporalDrawingShape() const
draw temporal polygon shape in Polygon Mode
void setLastCreatedRoute(GNEDemandElement *lastCreatedRoute)
set last created route
void drawTestsCircle() const
draw circle in testing mode (needed for grid)
long onCmdSplitEdgeBidi(FXObject *, FXSelector, void *)
split edge at cursor position
long onCmdAddJoinTLS(FXObject *, FXSelector, void *)
add Join TLS
GNEJunction * getJunctionAtPopupPosition()
try to retrieve a junction at popup position
void drawTemporalSplitJunction() const
draw temporal split junction in create edge mode
long onCmdSetSupermode(FXObject *, FXSelector sel, void *)
long onCmdToggleExtendSelection(FXObject *, FXSelector, void *)
toggle extend selection
long onCmdTriangulatePolygon(FXObject *, FXSelector, void *)
triangulate polygon
long onKeyPress(FXObject *o, FXSelector sel, void *data) override
called when user press a key
GNEViewNetHelper::DemandCheckableButtons myDemandCheckableButtons
variable used to save checkable buttons for Supermode Demand
Definition GNEViewNet.h:657
bool aksChangeSupermode(const std::string &operation, Supermode expectedSupermode)
ask about change supermode
GNETAZ * getTAZAtPopupPosition()
try to retrieve a TAZ at popup position
long onCmdSetMode(FXObject *, FXSelector sel, void *)
called when user press a mode button (Network or demand)
long onCmdResetEdgeEndpoint(FXObject *, FXSelector, void *)
change geometry endpoint
long onCmdIntervalBarSetBegin(FXObject *, FXSelector, void *)
change begin in interval bar
long onCmdResetLength(FXObject *, FXSelector, void *)
reset custom edge lengths
std::vector< std::string > getEdgeLaneParamKeys(bool edgeKeys) const override
return list of available edge parameters
long onCmdSelectPolygonElements(FXObject *, FXSelector, void *)
select elements within polygon boundary
long onCmdSetFirstGeometryPointShapeEdited(FXObject *, FXSelector, void *)
set first geometry point in shape edited
long onCmdRemoveSelected(FXObject *, FXSelector, void *)
unselect AC under cursor
long onCmdDeleteGeometryPoint(FXObject *, FXSelector, void *)
delete the closes geometry point
void doInit() override
called after some features are already initialized
long onCmdDuplicateLane(FXObject *, FXSelector, void *)
duplicate selected lane
long onRightBtnRelease(FXObject *, FXSelector, void *) override
called when user releases mouse's right button
void processLeftButtonPressNetwork(void *eventData)
mouse process functions
void hotkeyEnter()
handle enter keypress
GNEConnection * getConnectionAtPopupPosition()
try to retrieve a connection at popup position
long onCmdOpenShapeEdited(FXObject *, FXSelector, void *)
open closed shape edited
long onRightBtnPress(FXObject *, FXSelector, void *) override
called when user press mouse's right button
void recalculateBoundaries() override
recalculate boundaries
void buildColorRainbow(const GUIVisualizationSettings &s, GUIColorScheme &scheme, int active, GUIGlObjectType objectType, const GUIVisualizationRainbowSettings &rs) override
recalibrate color scheme according to the current value range
long onCmdToggleShowOverlappedRoutes(FXObject *, FXSelector, void *)
toggle hide non inspected demand elements
long onCmdToggleAutoOppositeEdge(FXObject *, FXSelector, void *)
toggle autoOpposite edge
long onCmdSplitEdge(FXObject *, FXSelector, void *)
split edge at cursor position
GNEViewNetHelper::LockManager & getLockManager()
get lock manager
long onCmdStraightenEdgesElevation(FXObject *, FXSelector, void *)
interpolate z values linear between junctions
void updateControls()
update control contents after undo/redo or recompute
~GNEViewNet()
destructor
GNEViewNetHelper::MoveMultipleElementModul myMoveMultipleElements
modul used for moving multiple elements
Definition GNEViewNet.h:688
long onCmdSplitJunctionReconnect(FXObject *, FXSelector, void *)
split junction into multiple junctions and reconnect them
long onCmdFinishShapeEdited(FXObject *, FXSelector, void *)
finish shape edited
void hotkeyDel()
handle del keypress
long onCmdToggleChangeAllPhases(FXObject *, FXSelector, void *)
toggle change all phases
long onEnterConvertRoundabout(FXObject *, FXSelector, void *)
enter to convert junction to roundabout
bool myDrawPreviewRoundabout
draw preview roundabout
Definition GNEViewNet.h:740
void redrawPathElementContours()
redraw elements only for calculating boundary
GNEViewNet()
FOX needs this.
long onCmdToggleTAZRelDrawing(FXObject *, FXSelector, void *)
toggle TAZRel drawing
long onCmdToggleShowJunctionBubbles(FXObject *, FXSelector, void *)
toggle show junction bubbles
bool selectingDetectorsTLSMode() const
check if we're selecting detectors in TLS mode
bool selectingJunctionsTLSMode() const
check if we're selecting junctions in TLS mode
long onCmdToggleShowAdditionalSubElements(FXObject *, FXSelector, void *)
toggle show additional sub-elements
long onCmdSmoothEdgesElevation(FXObject *, FXSelector, void *)
smooth elevation with regard to adjoining edges
long onCmdToggleShowAllContainerPlans(FXObject *, FXSelector, void *)
toggle show all container plans in super mode demand
long onCmdResetJunctionShape(FXObject *, FXSelector, void *)
reset junction shape
long onCmdToggleTAZRelOnlyFrom(FXObject *, FXSelector, void *)
toggle TAZRez only from
long onCmdResetShapeEdited(FXObject *, FXSelector, void *)
reset shape edited
long onKeyRelease(FXObject *o, FXSelector sel, void *data) override
called when user release a key
long onCmdIntervalBarSetParameter(FXObject *, FXSelector, void *)
change parameter in interval bar
void drawTemporalE1TLSLines() const
draw temporal E1 TLS Lines
int doPaintGL(int mode, const Boundary &drawingBoundary) override
do paintGL
long onCmdReverseEdge(FXObject *, FXSelector, void *)
reverse edge
bool setColorScheme(const std::string &name) override
set color scheme
void processLeftButtonReleaseData()
process left button release function in Supermode Data
std::vector< std::string > getEdgeDataAttrs() const override
return list of loaded edgeData attributes
long onCmdToggleShowAdditionals(FXObject *, FXSelector, void *)
toggle show additionals in super mode data
long onCmdToggleLockPerson(FXObject *, FXSelector, void *)
toggle lock person in super mode demand
GNEViewNetHelper::TimeFormat & getTimeFormat()
get variable used to switch between time formats
GNENet * myNet
Pointer to current net. (We are not responsible for deletion)
Definition GNEViewNet.h:728
GNEPoly * getPolygonAtPopupPosition()
try to retrieve a polygon at popup position
long onMiddleBtnRelease(FXObject *, FXSelector, void *) override
called when user releases mouse's left button
long onCmdToggleSelectEdges(FXObject *, FXSelector, void *)
toggle select edges
GNEViewNetHelper::DataViewOptions myDataViewOptions
variable used to save variables related with view options in supermode Data
Definition GNEViewNet.h:674
int myDrawingToggle
drawin toggle (used in drawGLElements to avoid draw elements twice)
Definition GNEViewNet.h:746
long onCmdToggleShowTrips(FXObject *, FXSelector, void *)
toggle show all trips in super mode demand
long onCmdToggleHideShapes(FXObject *, FXSelector, void *)
toggle hide shapes in super mode demand
long onCmdEditEdgeEndpoint(FXObject *, FXSelector, void *)
change geometry endpoint
const GNEViewNetHelper::DemandViewOptions & getDemandViewOptions() const
get demand view options
long onCmdToggleHideConnections(FXObject *, FXSelector, void *)
toggle hide connections
void openDeleteDialogAtCursor(const std::vector< GUIGlObject * > &GLObjects)
open delete dialog at cursor
long onCmdResetConnections(FXObject *, FXSelector, void *)
reset junction connections
long onCmdResetLaneCustomShape(FXObject *, FXSelector, void *)
reset custom shapes of selected lanes
bool addRestrictedLane(GNELane *lane, SUMOVehicleClass vclass, const bool insertAtFront)
add restricted lane
void setStatusBarText(const std::string &text)
set statusBar text
long onCmdEditWalkingAreaShape(FXObject *, FXSelector, void *)
edit walkingArea shape
void processMoveMouseDemand(const bool mouseLeftButtonPressed)
process move mouse function in Supermode Demand
long onCmdReleasePOI(FXObject *, FXSelector, void *)
release POI from lane
long onCmdResetOppositeLane(FXObject *, FXSelector, void *)
reset oppositeLane of current lane
void setSelectorFrameScale(double selectionScale)
set selection scaling (in GNESelectorFrame)
void viewUpdated()
called when view is updated
long onCmdEditConnectionShape(FXObject *, FXSelector, void *)
edit connection shape
void updateObjectsInShape(const PositionVector &shape)
get objects in the given shape (using triangulation)
void updateDemandModeSpecificControls()
updates Demand mode specific controls
void forceSupemodeNetwork()
force supermode network(used after load/create new network)
long onCmdAttachPOI(FXObject *, FXSelector, void *)
attach POI in lane
std::vector< std::string > getRelDataAttrs() const override
return list of loaded edgeRelation and tazRelation attributes
GNEAdditional * getAdditionalAtPopupPosition()
try to retrieve a additional at popup position
long onCmdReverse(FXObject *, FXSelector, void *)
reverse current demand element
void drawTemporalJunction() const
draw temporal junction in create edge mode
long onCmdSelectRoundabout(FXObject *, FXSelector, void *)
select all roundabout nodes and edges
void updateViewNet(const bool ignoreViewUpdater=true) const
Mark the entire GNEViewNet to be repainted later.
int drawGLElements(const Boundary &bound)
draw functions
long onCmdIntervalBarLimit(FXObject *, FXSelector, void *)
change limit interval in interval bar
GNEViewNetHelper::ViewObjectsSelector myViewObjectsSelector
variable use to select objects in view
Definition GNEViewNet.h:626
void clearSelection()
clear selection
A single child window which contains a view of the simulation area.
GNECrossingFrame * getCrossingFrame() const
get frame for NETWORK_CROSSING
GNEConnectorFrame * getConnectorFrame() const
get frame for NETWORK_CONNECT
GNEStopFrame * getStopFrame() const
get frame for DEMAND_STOP
GNEProhibitionFrame * getProhibitionFrame() const
get frame for NETWORK_PROHIBITION
GNEPersonPlanFrame * getPersonPlanFrame() const
get frame for DEMAND_PERSONFRAME
GNEMeanDataFrame * getMeanDataFrame() const
get frame for DATA_TAZRELDATA
GNEShapeFrame * getShapeFrame() const
get frame for NETWORK_SHAPE
GNETAZRelDataFrame * getTAZRelDataFrame() const
get frame for DATA_TAZRELDATA
GNEMoveFrame * getMoveFrame() const
get frame for move elements
GNESelectorFrame * getSelectorFrame() const
get frame for select elements
GNEContainerPlanFrame * getContainerPlanFrame() const
get frame for DEMAND_CONTAINERFRAME
GNEEdgeDataFrame * getEdgeDataFrame() const
get frame for DATA_EDGEDATA
GNEDeleteFrame * getDeleteFrame() const
get frame for delete elements
GNETypeDistributionFrame * getTypeDistributionFrame() const
get frame for DEMAND_TYPEDISTRIBUTION
GNEVehicleFrame * getVehicleFrame() const
get frame for DEMAND_VEHICLE
GNEDecalFrame * getDecalFrame() const
get frame for NETWORK_DECAL
void hideAllFrames()
hide all frames
GNETypeFrame * getTypeFrame() const
get frame for DEMAND_TYPE
GNETAZFrame * getTAZFrame() const
get frame for NETWORK_TAZ
GNETLSEditorFrame * getTLSEditorFrame() const
get frame for NETWORK_TLS
GNEApplicationWindow * getGNEAppWindows() const
get GNE Application Windows
GNEContainerFrame * getContainerFrame() const
get frame for DEMAND_CONTAINER
GNEAdditionalFrame * getAdditionalFrame() const
get frame for NETWORK_ADDITIONAL
GNERouteDistributionFrame * getRouteDistributionFrame() const
get frame for DEMAND_ROUTEDISTRIBUTION
GNEWireFrame * getWireFrame() const
get frame for NETWORK_WIRE
GNEPersonFrame * getPersonFrame() const
get frame for DEMAND_PERSON
GNEInspectorFrame * getInspectorFrame() const
get frame for inspect elements
GNEEdgeRelDataFrame * getEdgeRelDataFrame() const
get frame for DATA_EDGERELDATA
GNECreateEdgeFrame * getCreateEdgeFrame() const
get frame for NETWORK_CREATEEDGE
GNERouteFrame * getRouteFrame() const
get frame for DEMAND_ROUTE
GNEConsecutiveSelector * getConsecutiveLaneSelector() const
get consecutive lane selector
bool createPath(const bool useLastRoute)
create path
void show()
show wire frame
bool addWire(const GNEViewNetHelper::ViewObjectsSelector &viewObjects)
add wire element
bool contains(const std::string &name) const
Returns the information whether a setting with the given name is stored.
GUIVisualizationSettings & get(const std::string &name)
Returns the named scheme.
const std::vector< std::string > & getNames() const
Returns a list of stored settings names.
Dialog for edit rerouter intervals.
static FXCursor * getCursor(GUICursor which)
returns a cursor previously defined in the enum GUICursor
std::string getCurrentScheme() const
Returns the name of the currently chosen scheme.
void setCurrentScheme(const std::string &)
Sets the named scheme as the current.
static void drawGeometry(const GUIVisualizationSettings::Detail d, const GUIGeometry &geometry, const double width, double offset=0)
draw geometry
static void drawChildLine(const GUIVisualizationSettings &s, const Position &child, const Position &parent, const RGBColor &color, const bool drawEntire, const double lineWidth)
draw line between child and parent (used in netedit)
void updateGeometry(const PositionVector &shape)
update entire geometry
MFXComboBoxIcon * getColoringSchemesCombo()
return combobox with the current coloring schemes (standard, fastest standard, real world....
FXPopup * getLocatorPopup()
@ brief return a pointer to locator popup
const std::string & getMicrosimID() const
Returns the id of the object as known to microsim.
GUIGlObjectType getType() const
Returns the type of the object as coded in GUIGlObjectType.
virtual bool isGLObjectLocked() const
check if element is locked (Currently used only in netedit)
GUIGlID getGlID() const
Returns the numerical id of the object.
static FXIcon * getIcon(const GUIIcon which)
returns a icon previously defined in the enum GUIIcon
MFXStaticToolTip * getStaticTooltipMenu() const
get static toolTip for menus
virtual void setStatusBarText(const std::string &)
get status bar text (can be implemented in children)
virtual double getRotation() const =0
Returns the rotation of the canvas stored in this changer.
virtual double getZoom() const =0
Returns the zoom factor computed stored in this changer.
virtual void onLeftBtnPress(void *data)
mouse functions
virtual double getXPos() const =0
Returns the x-offset of the field to show stored in this changer.
virtual double getYPos() const =0
Returns the y-offset of the field to show stored in this changer.
T getColor(const double value) const
const std::string & getName() const
int addColor(const T &color, const double threshold, const std::string &name="")
bool myAmInitialised
Internal information whether doInit() was called.
Position snapToActiveGrid(const Position &pos, bool snapXY=true) const
Returns a position that is mapped to the closest grid point if the grid is active.
std::vector< GUIGlObject * > myCurrentObjectsDialog
vector with current objects dialog
virtual long onLeftBtnRelease(FXObject *, FXSelector, void *)
const SUMORTree * myGrid
The visualization speed-up.
void openObjectDialog(const std::vector< GUIGlObject * > &objects, const bool filter=true)
open object dialog for the given object
void paintGLGrid() const
paints a grid
FXbool makeCurrent()
A reimplementation due to some internal reasons.
Position myClickedPopupPosition
clicked poup position
void buildMinMaxRainbow(const GUIVisualizationSettings &s, GUIColorScheme &scheme, const GUIVisualizationRainbowSettings &rs, double minValue, double maxValue, bool hasMissingData)
helper function for buildColorRainbow
virtual long onMiddleBtnRelease(FXObject *, FXSelector, void *)
virtual long onMouseMove(FXObject *, FXSelector, void *)
bool myPanning
Panning flag.
GUIMainWindow * myApp
The application.
std::vector< GUIGlID > getObjectsInBoundary(Boundary bound)
returns the ids of all objects in the given boundary
const Position & getPopupPosition() const
get position of current popup
double m2p(double meter) const
meter-to-pixels conversion method
GUIVisualizationSettings * myVisualizationSettings
visualization settings
void destroyPopup()
destroys the popup
virtual long onKeyPress(FXObject *o, FXSelector sel, void *data)
keyboard functions
virtual long onMiddleBtnPress(FXObject *, FXSelector, void *)
virtual Position getPositionInformation() const
Returns the cursor's x/y position within the network.
virtual long onKeyRelease(FXObject *o, FXSelector sel, void *data)
GUIDialog_ViewSettings * myGUIDialogViewSettings
Visualization changer.
void drawDecals()
Draws the stored decals.
virtual long onRightBtnRelease(FXObject *, FXSelector, void *)
GUIPerspectiveChanger * myChanger
The perspective changer.
GUIGLObjectPopupMenu * myPopup
The current popup-menu.
virtual long onPaint(FXObject *, FXSelector, void *)
virtual long onRightBtnPress(FXObject *, FXSelector, void *)
void openPopupDialog()
open popup dialog
static void resetTextures()
Reset textures.
void setSelectionPosition(const Position &pos)
set selection position
void addToRedrawPathElements(const GNEPathElement *pathElement)
add path element to redrawing set
void reverseSelectedObjects()
reverse selected objects
void isolateEdgeGeometryPoints()
isolate edge geometry points (used for moving)
void reset()
reset view objects handler
void setSelectionTriangle(const Triangle &triangle)
set selection triangle
const GLObjectsSortedContainer & getSelectedObjects() const
get all elements under cursor sorted by layer
const GNEEdge * markedEdge
marked edge (used in create edge mode, for splitting)
void updateFrontObject(const GUIGlObject *GLObject)
move the given object to the front (currently used only in netedit)
bool allowUpdate()
allow update
Stores the information about how to visualize structures.
GUIVisualizationSizeSettings junctionSize
bool drawForRectangleSelection
whether drawing is performed for the purpose of selecting objects using a rectangle
std::string name
The name of this setting.
bool drawJunctionShape
whether the shape of the junction should be drawn
bool disableLaneIcons
whether drawing is performed in left-hand networks
bool lefthand
whether drawing is performed in left-hand networks
bool showLane2Lane
Information whether lane-to-lane arrows shall be drawn.
GUIVisualizationColorSettings colorSettings
color settings
bool showGrid
Information whether a grid shall be shown.
void save(OutputDevice &dev) const
Writes the settings into an output device.
double scale
information about a lane's width (temporary, used for a single view)
void updateIgnoreHideByZoom()
update ignore hide by zoom (call BEFORE drawing all elements).
bool drawForViewObjectsHandler
whether drawing is performed for the purpose of selecting objects in view using ViewObjectsHandler
GUIVisualizationAdditionalSettings additionalSettings
Additional settings.
double selectorFrameScale
the current selection scaling in netedit (set in SelectorFrame)
GUIColorer junctionColorer
The junction colorer.
static const std::string SCHEME_NAME_PERMISSION_CODE
GUIVisualizationNeteditSizeSettings neteditSizeSettings
netedit size settings
static const GeoConvHelper & getFinal()
the coordinate transformation for writing the location element and for tracking the original coordina...
void cartesian2geo(Position &cartesian) const
Converts the given cartesian (shifted) position to its geo (lat/long) representation.
bool amChecked() const
check if this MFXCheckableButton is checked
void setChecked(bool val, const bool inform=false)
check or uncheck this MFXCheckableButton
long setCurrentItem(const FXint index, FXbool notify=FALSE)
Set the current item (index is zero-based)
FXint getNumItems() const
Return the number of items in the list.
FXint appendIconItem(const FXString &text, FXIcon *icon=nullptr, FXColor bgColor=FXRGB(255, 255, 255), void *ptr=nullptr)
append icon item in the last position
EdgeVector getAllEdges() const
return all edges
The representation of a single edge during network building.
Definition NBEdge.h:92
const PositionVector & getGeometry() const
Returns the geometry of the edge.
Definition NBEdge.h:789
const PositionVector getInnerGeometry() const
Returns the geometry of the edge without the endpoints.
Definition NBEdge.cpp:613
const std::set< NBTrafficLightDefinition * > & getControllingTLS() const
Returns the traffic lights that were assigned to this node (The set of tls that control this node)
Definition NBNode.h:345
const Position & getPosition() const
Definition NBNode.h:260
const PositionVector & getShape() const
retrieve the junction shape
Definition NBNode.cpp:2783
bool exist(const std::string &newID, bool requireComputed=true) const
check if exists a definition with the given ID
bool getBool(const std::string &name) const
Returns the boolean-value of the named option (only for Option_Bool)
static OptionsCont & getOptions()
Retrieves the options.
Static storage of an output device and its base (abstract) implementation.
OutputDevice & writeAttr(const SumoXMLAttr attr, const T &val)
writes a named attribute
void close()
Closes the device and removes it from the dictionary.
OutputDevice & openTag(const std::string &xmlElement)
Opens an XML tag.
bool closeTag(const std::string &comment="")
Closes the most recently opened tag and optionally adds a comment.
static OutputDevice & getDevice(const std::string &name, bool usePrefix=true)
Returns the described OutputDevice.
C++ TraCI client API implementation.
A point in 2D or 3D with translation and scaling methods.
Definition Position.h:37
double distanceTo(const Position &p2) const
returns the euclidean distance in 3 dimensions
Definition Position.h:263
double distanceSquaredTo(const Position &p2) const
returns the square of the distance to another position
Definition Position.h:268
double x() const
Returns the x-position.
Definition Position.h:52
double y() const
Returns the y-position.
Definition Position.h:57
A list of positions.
Position positionAtOffset(double pos, double lateralOffset=0) const
Returns the position at the given length.
double nearest_offset_to_point2D(const Position &p, bool perpendicular=true) const
return the nearest offest to point 2D
int indexOfClosest(const Position &p, bool twoD=false) const
void move2side(double amount, double maxExtension=100)
move position vector to side using certain amount
void setAlpha(unsigned char alpha)
Sets a new alpha value.
Definition RGBColor.cpp:108
static const RGBColor BLUE
Definition RGBColor.h:190
static const RGBColor ORANGE
Definition RGBColor.h:194
static const RGBColor GREEN
Definition RGBColor.h:189
static RGBColor fromHSV(double h, double s, double v)
Converts the given hsv-triplet to rgb, inspired by http://alvyray.com/Papers/CG/hsv2rgb....
Definition RGBColor.cpp:403
static const RGBColor BLACK
Definition RGBColor.h:196
static const RGBColor RED
named colors
Definition RGBColor.h:188
const PositionVector & getShape() const
Returns the shape of the polygon.
void addAdditionalGLObject(GUIGlObject *o, const double exaggeration=1)
Adds an additional object (detector/shape/trigger) for visualisation.
Definition SUMORTree.h:122
void removeAdditionalGLObject(GUIGlObject *o, const double exaggeration=1)
Removes an additional object (detector/shape/trigger) from being visualised.
Definition SUMORTree.h:158
virtual int Search(const float a_min[2], const float a_max[2], const GUIVisualizationSettings &c) const
Find all within search rectangle.
Definition SUMORTree.h:114
static std::vector< Triangle > triangulate(PositionVector shape)
Definition Triangle.cpp:129
DemandViewOptions demandViewOptions
demand view options
NetworkViewOptions networkViewOptions
network view options
FXMenuBar * modes
The application menu bar (for select, inspect...)
void buildCommonCheckableButtons()
build checkable buttons
void updateCommonCheckableButtons()
update Common checkable buttons
void disableCommonCheckableButtons()
hide all options menu checks
MFXCheckableButton * selectButton
checkable button for edit mode select
MFXCheckableButton * inspectButton
checkable button for edit mode inspect
MFXCheckableButton * deleteButton
checkable button for edit mode delete
void disableDataCheckableButtons()
hide all options menu checks
void buildDataCheckableButtons()
build checkable buttons
void updateDataCheckableButtons()
update Data checkable buttons
MFXCheckableButton * edgeDataButton
checkable button for edit mode "edgeData"
MFXCheckableButton * edgeRelDataButton
checkable button for edit mode "edgeRelData"
MFXCheckableButton * TAZRelDataButton
checkable button for edit mode "TAZRelData"
MFXCheckableButton * meanDataButton
checkable button for edit mode "meanData"
struct used to group all variables related to view options in supermode Data
void hideDataViewOptionsMenuChecks()
hide all options menu checks
MFXCheckableButton * menuCheckToggleTAZDrawFill
menu check to toggle TAZ draw fill
MFXCheckableButton * menuCheckShowAdditionals
menu check to show Additionals
MFXCheckableButton * menuCheckShowShapes
menu check to show Shapes
MFXCheckableButton * menuCheckToggleTAZRelOnlyFrom
menu check to toggle TAZRel only from
MFXCheckableButton * menuCheckToggleDrawJunctionShape
checkable button to show junction shapes
void buildDataViewOptionsMenuChecks()
build menu checks
MFXCheckableButton * menuCheckToggleTAZRelDrawing
menu check to toggle TAZ Rel drawing
MFXCheckableButton * menuCheckShowDemandElements
menu check to show Demand Elements
MFXCheckableButton * menuCheckToggleTAZRelOnlyTo
menu check to toggle TAZRel only to
MFXCheckableButton * routeDistributionButton
checkable button for edit mode create route distributions
MFXCheckableButton * containerButton
checkable button for edit mode create containers
MFXCheckableButton * moveDemandElementsButton
checkable button for edit mode "move demand elements"
MFXCheckableButton * typeButton
checkable button for edit mode create type
void buildDemandCheckableButtons()
build checkable buttons
MFXCheckableButton * vehicleButton
checkable button for edit mode create vehicles
MFXCheckableButton * containerPlanButton
checkable button for edit mode create container plans
MFXCheckableButton * routeButton
checkable button for edit mode create routes
MFXCheckableButton * stopButton
checkable button for edit mode create stops
MFXCheckableButton * personPlanButton
checkable button for edit mode create person plans
MFXCheckableButton * personButton
checkable button for edit mode create persons
void updateDemandCheckableButtons()
update Demand checkable buttons
MFXCheckableButton * typeDistributionButton
checkable button for edit mode create type distribution
void disableDemandCheckableButtons()
hide all options menu checks
struct used to group all variables related to view options in supermode Demand
MFXCheckableButton * menuCheckShowAllTrips
show all trips
void lockPerson(const GNEDemandElement *person)
lock person
MFXCheckableButton * menuCheckToggleGrid
menu check to show grid button
MFXCheckableButton * menuCheckToggleDrawJunctionShape
checkable button to show junction shapes
void lockContainer(const GNEDemandElement *container)
lock container
void buildDemandViewOptionsMenuChecks()
build menu checks
const GNEDemandElement * getLockedPerson() const
get locked person
MFXCheckableButton * menuCheckDrawSpreadVehicles
menu check to draw vehicles in begin position or spread in lane
MFXCheckableButton * menuCheckShowOverlappedRoutes
show overlapped routes
void hideDemandViewOptionsMenuChecks()
hide all options menu checks
MFXCheckableButton * menuCheckShowAllPersonPlans
show all person plans
MFXCheckableButton * menuCheckShowAllContainerPlans
show all container plans
MFXCheckableButton * menuCheckHideNonInspectedDemandElements
Hide non inspected demand elements.
MFXCheckableButton * menuCheckHideShapes
Hide shapes (Polygons and POIs)
MFXCheckableButton * menuCheckLockPerson
Lock Person.
MFXCheckableButton * menuCheckLockContainer
Lock Container.
struct used to group all variables related with Supermodes
DataEditMode dataEditMode
the current Data edit mode
void buildSuperModeButtons()
build checkable buttons
DemandEditMode demandEditMode
the current Demand edit mode
Supermode currentSupermode
the current supermode
NetworkEditMode networkEditMode
the current Network edit mode
bool isCurrentSupermodeDemand() const
@check if current supermode is Demand
void setDemandEditMode(DemandEditMode demandMode, const bool force=false)
set Demand edit mode
MFXCheckableButton * dataButton
checkable button for supermode Data
bool isCurrentSupermodeData() const
@check if current supermode is Data
void setView(FXSelector sel)
set view
bool isCurrentSupermodeNetwork() const
@check if current supermode is Network
MFXCheckableButton * networkButton
checkable button for supermode Network
bool isJuPedSimView() const
check if default view is enabled
void setSupermode(Supermode supermode, const bool force)
set supermode
MFXCheckableButton * demandButton
checkable button for supermode Demand
void setNetworkEditMode(NetworkEditMode networkMode, const bool force=false)
set Network edit mode
void setDataEditMode(DataEditMode dataMode, const bool force=false)
set Data edit mode
struct used to group all variables related with edit shapes of NetworkElements
GNENetworkElement * getEditedNetworkElement() const
pointer to edited network element
void startEditCustomShape(GNENetworkElement *element)
start edit custom shape
class used to group all variables related with mouse buttons and key pressed after certain events
bool shiftKeyPressed() const
check if SHIFT is pressed during current event
bool altKeyPressed() const
check if ALT is pressed during current event
void update(void *eventData)
update status of MouseButtonKeyPressed during current event
bool controlKeyPressed() const
check if CONTROL is pressed during current event
bool mouseLeftButtonPressed() const
check if mouse left button is pressed during current event
struct used to group all variables related with movement of groups of elements
void moveSelection(const bool mouseLeftButtonPressed)
move selection
bool isCurrentlyMovingMultipleElements() const
check if there are moving elements
void finishMoveSelection()
finish moving selection
bool isMovingSelection() const
check if currently there is element being moved
void resetMovingSelectedEdge()
reset flag for moving edge
struct used to group all variables related with movement of single elements
bool beginMoveSingleElementDemandMode()
begin move single element in Demand mode
void moveSingleElement(const bool mouseLeftButtonPressed)
move single element in Network AND Demand mode
bool isCurrentlyMovingSingleElement() const
check if there are moving elements
bool beginMoveSingleElementNetworkMode()
begin move single element in Network mode
bool beginMoveNetworkElementShape()
begin move network elementshape
void finishMoveSingleElement()
finish moving single elements in Network AND Demand mode
void updateNetworkCheckableButtons()
update network checkable buttons
MFXCheckableButton * trafficLightButton
checkable button for edit mode traffic light
MFXCheckableButton * moveNetworkElementsButton
checkable button for edit mode "move network elements"
MFXCheckableButton * additionalButton
checkable button for edit mode additional
MFXCheckableButton * crossingButton
checkable button for edit mode crossing
MFXCheckableButton * createEdgeButton
checkable button for edit mode create edge
MFXCheckableButton * prohibitionButton
checkable button for edit mode prohibition
void buildNetworkCheckableButtons()
build checkable buttons
MFXCheckableButton * shapeButton
checkable button for edit mode shape
MFXCheckableButton * connectionButton
checkable button for edit mode connection
MFXCheckableButton * TAZButton
checkable button for edit mode TAZ
void disableNetworkCheckableButtons()
hide all options menu checks
MFXCheckableButton * wireButton
checkable button for edit mode wires
MFXCheckableButton * decalButton
checkable button for edit mode decals
struct used to group all variables related to view options in supermode Network
MFXCheckableButton * menuCheckSelectEdges
checkable button to select only edges
MFXCheckableButton * menuCheckChainEdges
checkable button to the endpoint for a created edge should be set as the new source
MFXCheckableButton * menuCheckShowDemandElements
checkable button to show Demand Elements
MFXCheckableButton * menuCheckMoveElevation
checkable button to apply movement to elevation
MFXCheckableButton * menuCheckShowTAZElements
checkable button to show TAZ elements
MFXCheckableButton * menuCheckAutoOppositeEdge
check checkable to create auto create opposite edge
MFXCheckableButton * menuCheckDrawSpreadVehicles
checkable button to draw vehicles in begin position or spread in lane
MFXCheckableButton * menuCheckShowConnections
checkable button to show connections
MFXCheckableButton * menuCheckHideConnections
checkable button to hide connections in connect mode
MFXCheckableButton * menuCheckToggleDrawJunctionShape
checkable button to show junction shapes
MFXCheckableButton * menuCheckToggleGrid
checkable button to show grid button
MFXCheckableButton * menuCheckMergeAutomatically
checkable button to we should't warn about merging junctions
bool selectEdges() const
check if select edges checkbox is enabled
MFXCheckableButton * menuCheckShowJunctionBubble
checkable button to show connection as bubble in "Move" mode.
void hideNetworkViewOptionsMenuChecks()
hide all options menu checks
MFXCheckableButton * menuCheckShowAdditionalSubElements
checkable button to show additional sub-elements
void buildNetworkViewOptionsMenuChecks()
build menu checks
MFXCheckableButton * menuCheckChangeAllPhases
checkable button to set change all phases
MFXCheckableButton * menuCheckExtendSelection
checkable button to extend to edge nodes
struct used to group all variables related with save elements
void buildSaveElementsButtons()
build save buttons
void finishRectangleSelection()
finish rectangle selection
void drawRectangleSelection(const RGBColor &color) const
draw rectangle selection
void beginRectangleSelection()
begin rectangle selection
bool selectingUsingRectangle
whether we have started rectangle-selection
void moveRectangleSelection()
move rectangle selection
bool startDrawing
whether we have started rectangle-selection
void processRectangleSelection()
process rectangle Selection
std::vector< GNEEdge * > processEdgeRectangleSelection()
process rectangle Selection (only limited to Edges)
struct used to group all variables related with testing
void drawTestingElements(GUIMainWindow *mainWindow)
draw testing element
void initTestingMode()
init testing mode
struct used to group all variables related with time format
void buildTimeFormatButtons()
build time format buttons
static const RGBColor TLSConnectionColor
connection color between E1/junctions and TLS
RGBColor selectionColor
basic selection color
static const double junctionBubbleRadius
junction bubble radius
double getExaggeration(const GUIVisualizationSettings &s, const GUIGlObject *o, double factor=20) const
return the drawing size including exaggeration and constantSize values