/****************************************************************************/1// Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo2// Copyright (C) 2001-2025 German Aerospace Center (DLR) and others.3// This program and the accompanying materials are made available under the4// terms of the Eclipse Public License 2.0 which is available at5// https://www.eclipse.org/legal/epl-2.0/6// This Source Code may also be made available under the following Secondary7// Licenses when the conditions for such availability set forth in the Eclipse8// Public License 2.0 are satisfied: GNU General Public License, version 29// or later which is available at10// https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html11// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-or-later12/****************************************************************************/13/// @file GNEViewNet.h14/// @author Jakob Erdmann15/// @date Feb 201116///17// A view on the network being edited (adapted from GUIViewTraffic)18/****************************************************************************/19#pragma once20#include <config.h>2122#include <utils/gui/windows/GUISUMOAbstractView.h>2324#include "GNEViewNetHelper.h"2526// ===========================================================================27// class definitions28// ===========================================================================2930class GNEViewNet : public GUISUMOAbstractView {31/// @brief FOX-declaration32FXDECLARE(GNEViewNet)3334/// @brief declare GNEViewNetHelper as friend struct35friend struct GNEViewNetHelper;3637public:38/* @brief constructor39* @param[in] tmpParent temporal FXFrame parent so that we can add items to view area in the desired order40* @param[in] actualParent FXFrame parent of GNEViewNet41* @param[in] app main windows42* @param[in] viewParent viewParent of this viewNet43* @param[in] net traffic net44* @param[in] undoList pointer to UndoList module45* @param[in] glVis a reference to GLVisuals46* @param[in] share a reference to FXCanvas47*/48GNEViewNet(FXComposite* tmpParent, FXComposite* actualParent, GUIMainWindow& app,49GNEViewParent* viewParent, GNENet* net, GNEUndoList* undoList,50FXGLVisual* glVis, FXGLCanvas* share);5152/// @brief destructor53~GNEViewNet();5455/// @brief recalculate boundaries56void recalculateBoundaries();5758/// @brief builds the view toolbars59void buildViewToolBars(GUIGlChildWindow* v);6061/// @brief Mark the entire GNEViewNet to be repainted later62void updateViewNet(const bool ignoreViewUpdater = true) const;6364/// @brief force supermode network(used after load/create new network)65void forceSupemodeNetwork();6667/// @brief called when view is updated68void viewUpdated();6970/// @brief get objects under cursor71const GNEViewNetHelper::ViewObjectsSelector& getViewObjectsSelector() const;7273/// @brief get move single element values74const GNEViewNetHelper::MoveSingleElementModul& getMoveSingleElementValues() const;7576/// @brief get move multiple element values77const GNEViewNetHelper::MoveMultipleElementModul& getMoveMultipleElementValues() const;7879/// @brief update objects and boundaries in position80void updateObjectsInPosition(const Position& pos);8182/// @brief get objects in the given shape (using triangulation)83void updateObjectsInShape(const PositionVector& shape);8485/// @brief redraw elements only for calculating boundary86void redrawPathElementContours();8788/// @brief set color scheme89bool setColorScheme(const std::string& name);9091///@brief recalibrate color scheme according to the current value range92void buildColorRainbow(const GUIVisualizationSettings& s, GUIColorScheme& scheme, int active, GUIGlObjectType objectType,93const GUIVisualizationRainbowSettings& rs);9495/// @brief return list of available edge parameters96std::vector<std::string> getEdgeLaneParamKeys(bool edgeKeys) const;9798/// @brief return list of loaded edgeData attributes99std::vector<std::string> getEdgeDataAttrs() const;100101/// @brief return list of loaded edgeRelation and tazRelation attributes102std::vector<std::string> getRelDataAttrs() const;103104/// @brief get draw toggle (used to avoid drawing junctions twice)105int getDrawingToggle() const;106107/// @brief check if select edges (toggle using button or shift)108bool checkSelectEdges() const;109110/// @brief open object dialog111void openObjectDialogAtCursor(const FXEvent* ev);112113/// @brief open delete dialog at cursor114void openDeleteDialogAtCursor(const std::vector<GUIGlObject*>& GLObjects);115116/// @brief open select dialog at cursor117void openSelectDialogAtCursor(const std::vector<GUIGlObject*>& GLObjects);118119// save visualization settings120void saveVisualizationSettings() const;121122/// @brief get edit modes123const GNEViewNetHelper::EditModes& getEditModes() const;124125/// @brief get testing mode126const GNEViewNetHelper::TestingMode& getTestingMode() const;127128/// @brief get network view options129const GNEViewNetHelper::NetworkViewOptions& getNetworkViewOptions() const;130131/// @brief get demand view options132const GNEViewNetHelper::DemandViewOptions& getDemandViewOptions() const;133134/// @brief get data view options135const GNEViewNetHelper::DataViewOptions& getDataViewOptions() const;136137/// @brief get Key Pressed module138const GNEViewNetHelper::MouseButtonKeyPressed& getMouseButtonKeyPressed() const;139140/// @brief get Edit Shape module141const GNEViewNetHelper::EditNetworkElementShapes& getEditNetworkElementShapes() const;142143/// @name overloaded handlers144/// @{145/// @brief called when user press mouse's left button146long onLeftBtnPress(FXObject*, FXSelector, void*);147148/// @brief called when user releases mouse's left button149long onLeftBtnRelease(FXObject*, FXSelector, void*);150151/// @brief called when user press mouse's left button152long onMiddleBtnPress(FXObject*, FXSelector, void*);153154/// @brief called when user releases mouse's left button155long onMiddleBtnRelease(FXObject*, FXSelector, void*);156157/// @brief called when user press mouse's right button158long onRightBtnPress(FXObject*, FXSelector, void*);159160/// @brief called when user releases mouse's right button161long onRightBtnRelease(FXObject*, FXSelector, void*);162163/// @brief called when user moves mouse164long onMouseMove(FXObject*, FXSelector, void*);165166/// @brief called when user press a key167long onKeyPress(FXObject* o, FXSelector sel, void* data);168169/// @brief called when user release a key170long onKeyRelease(FXObject* o, FXSelector sel, void* data);171/// @}172173/// @name set modes call backs174/// @{175/// @brief called when user press a supermode button176long onCmdSetSupermode(FXObject*, FXSelector sel, void*);177178/// @brief called when user press a mode button (Network or demand)179long onCmdSetMode(FXObject*, FXSelector sel, void*);180181/// @}182183/// @brief split edge at cursor position184long onCmdSplitEdge(FXObject*, FXSelector, void*);185186/// @brief split edge at cursor position187long onCmdSplitEdgeBidi(FXObject*, FXSelector, void*);188189/// @brief reverse edge190long onCmdReverseEdge(FXObject*, FXSelector, void*);191192/// @brief add reversed edge193long onCmdAddReversedEdge(FXObject*, FXSelector, void*);194195/// @brief add reversed edge disconnected196long onCmdAddReversedEdgeDisconnected(FXObject*, FXSelector, void*);197198/// @brief change geometry endpoint199long onCmdEditEdgeEndpoint(FXObject*, FXSelector, void*);200201/// @brief change geometry endpoint202long onCmdResetEdgeEndpoint(FXObject*, FXSelector, void*);203204/// @brief makes selected edges straight205long onCmdStraightenEdges(FXObject*, FXSelector, void*);206207/// @brief smooth geometry208long onCmdSmoothEdges(FXObject*, FXSelector, void*);209210/// @brief interpolate z values linear between junctions211long onCmdStraightenEdgesElevation(FXObject*, FXSelector, void*);212213/// @brief smooth elevation with regard to adjoining edges214long onCmdSmoothEdgesElevation(FXObject*, FXSelector, void*);215216/// @brief reset custom edge lengths217long onCmdResetLength(FXObject*, FXSelector, void*);218219/// @brief use edge as template220long onCmdEdgeUseAsTemplate(FXObject*, FXSelector, void*);221222/// @brief apply template to edge223long onCmdEgeApplyTemplate(FXObject*, FXSelector, void*);224225/// @name specific of shape edited226/// @{227228/// @brief simply shape of current polygon229long onCmdSimplifyShape(FXObject*, FXSelector, void*);230231/// @brief delete the closes geometry point232long onCmdDeleteGeometryPoint(FXObject*, FXSelector, void*);233234/// @brief close opened polygon235long onCmdClosePolygon(FXObject*, FXSelector, void*);236237/// @brief open closed polygon238long onCmdOpenPolygon(FXObject*, FXSelector, void*);239240/// @brief select elements within polygon boundary241long onCmdSelectPolygonElements(FXObject*, FXSelector, void*);242243/// @brief triangulate polygon244long onCmdTriangulatePolygon(FXObject*, FXSelector, void*);245246/// @brief set as first geometry point the closes geometry point247long onCmdSetFirstGeometryPoint(FXObject*, FXSelector, void*);248249/// @}250251/// @name specific of shape edited252/// @{253/// @brief simply shape edited254long onCmdSimplifyShapeEdited(FXObject*, FXSelector, void*);255256/// @brief straight shape edited257long onCmdStraightenShapeEdited(FXObject*, FXSelector, void*);258259/// @brief close opened shape edited260long onCmdCloseShapeEdited(FXObject*, FXSelector, void*);261262/// @brief open closed shape edited263long onCmdOpenShapeEdited(FXObject*, FXSelector, void*);264265/// @brief set first geometry point in shape edited266long onCmdSetFirstGeometryPointShapeEdited(FXObject*, FXSelector, void*);267268/// @brief delete the closes geometry point in shape edited269long onCmdDeleteGeometryPointShapeEdited(FXObject*, FXSelector, void*);270271/// @brief reset shape edited272long onCmdResetShapeEdited(FXObject*, FXSelector, void*);273274/// @brief finish shape edited275long onCmdFinishShapeEdited(FXObject*, FXSelector, void*);276277/// @}278279/// @brief transform POI to POILane, and vice versa280long onCmdTransformPOI(FXObject*, FXSelector, void*);281282/// @brief reverse current demand element283long onCmdReverse(FXObject*, FXSelector, void*);284285/// @brief add a reverse demand element286long onCmdAddReverse(FXObject*, FXSelector, void*);287288/// @brief set custom geometry point289long onCmdSetCustomGeometryPoint(FXObject*, FXSelector, void*);290291/// @brief reset edge end points292long onCmdResetEndPoints(FXObject*, FXSelector, void*);293294/// @brief duplicate selected lane295long onCmdDuplicateLane(FXObject*, FXSelector, void*);296297/// @brief edit lane shape298long onCmdEditLaneShape(FXObject*, FXSelector, void*);299300/// @brief reset custom shapes of selected lanes301long onCmdResetLaneCustomShape(FXObject*, FXSelector, void*);302303/// @brief reset oppositeLane of current lane304long onCmdResetOppositeLane(FXObject*, FXSelector, void*);305306/// @brief add/remove/restrict lane307long onCmdLaneOperation(FXObject*, FXSelector sel, void*);308309/// @brief show lane reachability310long onCmdLaneReachability(FXObject*, FXSelector sel, void*);311312/// @brief open additional dialog313long onCmdOpenAdditionalDialog(FXObject*, FXSelector, void*);314315/// @brief edit junction shape316long onCmdResetEdgeEndPoints(FXObject*, FXSelector, void*);317318/// @brief edit junction shape319long onCmdEditJunctionShape(FXObject*, FXSelector, void*);320321/// @brief reset junction shape322long onCmdResetJunctionShape(FXObject*, FXSelector, void*);323324/// @brief replace node by geometry325long onCmdReplaceJunction(FXObject*, FXSelector, void*);326327/// @brief split junction into multiple junctions328long onCmdSplitJunction(FXObject*, FXSelector, void*);329330/// @brief split junction into multiple junctions and reconnect them331long onCmdSplitJunctionReconnect(FXObject*, FXSelector, void*);332333/// @brief select all roundabout nodes and edges334long onCmdSelectRoundabout(FXObject*, FXSelector, void*);335336/// @brief convert junction to roundabout337long onCmdConvertRoundabout(FXObject*, FXSelector, void*);338339/// @brief enter to convert junction to roundabout340long onEnterConvertRoundabout(FXObject*, FXSelector, void*);341342/// @brief leave to convert junction to roundabout343long onLeaveConvertRoundabout(FXObject*, FXSelector, void*);344345/// @brief clear junction connections346long onCmdClearConnections(FXObject*, FXSelector, void*);347348/// @brief reset junction connections349long onCmdResetConnections(FXObject*, FXSelector, void*);350351/// @brief add TLS352long onCmdAddTLS(FXObject*, FXSelector, void*);353354/// @brief add Join TLS355long onCmdAddJoinTLS(FXObject*, FXSelector, void*);356357/// @brief edit connection shape358long onCmdEditConnectionShape(FXObject*, FXSelector, void*);359360/// @brief edit connection shape361long onCmdSmoothConnectionShape(FXObject*, FXSelector, void*);362363/// @brief edit crossing shape364long onCmdEditCrossingShape(FXObject*, FXSelector, void*);365366/// @brief edit walkingArea shape367long onCmdEditWalkingAreaShape(FXObject*, FXSelector, void*);368369/// @name View options network call backs370/// @{371372/// @brief toggle select edges373long onCmdToggleSelectEdges(FXObject*, FXSelector, void*);374375/// @brief toggle show connections376long onCmdToggleShowConnections(FXObject*, FXSelector, void*);377378/// @brief toggle hide connections379long onCmdToggleHideConnections(FXObject*, FXSelector, void*);380381/// @brief toggle show additional sub-elements382long onCmdToggleShowAdditionalSubElements(FXObject*, FXSelector, void*);383384/// @brief toggle show TAZ elements385long onCmdToggleShowTAZElements(FXObject*, FXSelector, void*);386387/// @brief toggle extend selection388long onCmdToggleExtendSelection(FXObject*, FXSelector, void*);389390/// @brief toggle change all phases391long onCmdToggleChangeAllPhases(FXObject*, FXSelector, void*);392393/// @brief toggle show grid394long onCmdToggleShowGrid(FXObject*, FXSelector, void*);395396/// @brief toggle draw junction shape397long onCmdToggleDrawJunctionShape(FXObject*, FXSelector, void*);398399/// @brief toggle draw vehicles in begin position or spread in lane400long onCmdToggleDrawSpreadVehicles(FXObject*, FXSelector, void*);401402/// @brief toggle warn for merge403long onCmdToggleMergeAutomatically(FXObject*, FXSelector, void*);404405/// @brief toggle show junction bubbles406long onCmdToggleShowJunctionBubbles(FXObject*, FXSelector, void*);407408/// @brief toggle move elevation409long onCmdToggleMoveElevation(FXObject*, FXSelector, void*);410411/// @brief toggle chain edges412long onCmdToggleChainEdges(FXObject*, FXSelector, void*);413414/// @brief toggle autoOpposite edge415long onCmdToggleAutoOppositeEdge(FXObject*, FXSelector, void*);416417/// @brief toggle hide non inspected demand elements418long onCmdToggleHideNonInspecteDemandElements(FXObject*, FXSelector, void*);419420/// @brief toggle hide non inspected demand elements421long onCmdToggleShowOverlappedRoutes(FXObject*, FXSelector, void*);422423/// @brief toggle hide shapes in super mode demand424long onCmdToggleHideShapes(FXObject*, FXSelector, void*);425426/// @brief toggle show all trips in super mode demand427long onCmdToggleShowTrips(FXObject*, FXSelector, void*);428429/// @brief toggle show all person plans in super mode demand430long onCmdToggleShowAllPersonPlans(FXObject*, FXSelector, void*);431432/// @brief toggle lock person in super mode demand433long onCmdToggleLockPerson(FXObject*, FXSelector, void*);434435/// @brief toggle show all container plans in super mode demand436long onCmdToggleShowAllContainerPlans(FXObject*, FXSelector, void*);437438/// @brief toggle lock container in super mode demand439long onCmdToggleLockContainer(FXObject*, FXSelector, void*);440441/// @brief toggle show additionals in super mode data442long onCmdToggleShowAdditionals(FXObject*, FXSelector, void*);443444/// @brief toggle show shapes in super mode data445long onCmdToggleShowShapes(FXObject*, FXSelector, void*);446447/// @brief toggle show demand elements (network)448long onCmdToggleShowDemandElementsNetwork(FXObject*, FXSelector, void*);449450/// @brief toggle show demand elements (data)451long onCmdToggleShowDemandElementsData(FXObject*, FXSelector, void*);452453/// @brief toggle TAZRel drawing454long onCmdToggleTAZRelDrawing(FXObject*, FXSelector, void*);455456/// @brief toggle TAZdrawFill457long onCmdToggleTAZDrawFill(FXObject*, FXSelector, void*);458459/// @brief toggle TAZRez only from460long onCmdToggleTAZRelOnlyFrom(FXObject*, FXSelector, void*);461462/// @brief toggle TAZRez only to463long onCmdToggleTAZRelOnlyTo(FXObject*, FXSelector, void*);464465/// @}466467//// @name interval bar functions468/// @{469470/// @brief change generic data type in interval bar471long onCmdIntervalBarGenericDataType(FXObject*, FXSelector, void*);472473/// @brief change data set in interval bar474long onCmdIntervalBarDataSet(FXObject*, FXSelector, void*);475476/// @brief change limit interval in interval bar477long onCmdIntervalBarLimit(FXObject*, FXSelector, void*);478479/// @brief change begin in interval bar480long onCmdIntervalBarSetBegin(FXObject*, FXSelector, void*);481482/// @brief change end in interval bar483long onCmdIntervalBarSetEnd(FXObject*, FXSelector, void*);484485/// @brief change parameter in interval bar486long onCmdIntervalBarSetParameter(FXObject*, FXSelector, void*);487488/// @}489490/// @brief select AC under cursor491long onCmdAddSelected(FXObject*, FXSelector, void*);492493/// @brief unselect AC under cursor494long onCmdRemoveSelected(FXObject*, FXSelector, void*);495496/// @brief select Edge under cursor497long onCmdAddEdgeSelected(FXObject*, FXSelector, void*);498499/// @brief unselect Edge under cursor500long onCmdRemoveEdgeSelected(FXObject*, FXSelector, void*);501502/// @brief called when a new view is set503long onCmdSetNeteditView(FXObject*, FXSelector sel, void*);504505/// @brief abort current edition operation506void abortOperation(bool clearSelection = true);507508/// @brief handle del keypress509void hotkeyDel();510511/// @brief handle enter keypress512void hotkeyEnter();513514/// @brief handle backspace keypress515void hotkeyBackSpace();516517/// @brief handle focus frame keypress518void hotkeyFocusFrame();519520/// @brief get the net object521GNEViewParent* getViewParent() const;522523/// @brief get the net object524GNENet* getNet() const;525526/// @brief get the undoList object527GNEUndoList* getUndoList() const;528529/// @brief get interval bar530GNEViewNetHelper::IntervalBar& getIntervalBar();531532/// @brief get lock manager533GNEViewNetHelper::LockManager& getLockManager();534535/// @brief get inspected elements536GNEViewNetHelper::InspectedElements& getInspectedElements();537538/// @brief get marked for drawing front elements539GNEViewNetHelper::MarkFrontElements& getMarkFrontElements();540541/// @brief check if an element is being moved542bool isCurrentlyMovingElements() const;543544/// @brief check if given element is locked (used for drawing select and delete contour)545bool checkOverLockedElement(const GUIGlObject* GLObject, const bool isSelected) const;546547/// @brief get last created route548GNEDemandElement* getLastCreatedRoute() const;549550/// @brief set last created route551void setLastCreatedRoute(GNEDemandElement* lastCreatedRoute);552553/// @brief set statusBar text554void setStatusBarText(const std::string& text);555556/// @brief whether to autoselect nodes or to lanes557bool autoSelectNodes();558559/// @brief set selection scaling (in GNESelectorFrame)560void setSelectorFrameScale(double selectionScale);561562/// @brief update control contents after undo/redo or recompute563void updateControls();564565/// @brief change all phases566bool changeAllPhases() const;567568/// @brief return true if junction must be showed as bubbles569bool showJunctionAsBubbles() const;570571/// @brief ask merge junctions572bool askMergeJunctions(const GNEJunction* movedJunction, const GNEJunction* targetJunction, bool& alreadyAsked);573574/// @brief ask about change supermode575bool aksChangeSupermode(const std::string& operation, Supermode expectedSupermode);576577/// @brief check if we're selecting detectors in TLS mode578bool selectingDetectorsTLSMode() const;579580/// @brief check if we're selecting junctions in TLS mode581bool selectingJunctionsTLSMode() const;582583/// @brief get variable used to save elements584GNEViewNetHelper::SaveElements& getSaveElements();585586/// @brief get variable used to switch between time formats587GNEViewNetHelper::TimeFormat& getTimeFormat();588589/// @brief restrict lane590bool restrictLane(GNELane* lane, SUMOVehicleClass vclass);591592/// @brief add restricted lane593bool addRestrictedLane(GNELane* lane, SUMOVehicleClass vclass, const bool insertAtFront);594595/// @brief remove restricted lane596bool removeRestrictedLane(GNELane* lane, SUMOVehicleClass vclass);597598protected:599/// @brief FOX needs this600GNEViewNet();601602/// @brief do paintGL603int doPaintGL(int mode, const Boundary& drawingBoundary);604605/// @brief called after some features are already initialized606void doInit();607608/// @brief returns the id of object under cursor to show their tooltip609GUIGlID getToolTipID();610611private:612/// @brief variable use to select objects in view613GNEViewNetHelper::ViewObjectsSelector myViewObjectsSelector;614615/// @name structs related with modes and testing mode616/// @{617618/// @brief variable used to save variables related with edit moves modes619GNEViewNetHelper::EditModes myEditModes;620621/// @brief variable used to save variables related with testing mode622GNEViewNetHelper::TestingMode myTestingMode;623624/// @}625626/// @name structs related with input (keyboard and mouse)627/// @{628629/// @brief variable used to save key status after certain events630GNEViewNetHelper::MouseButtonKeyPressed myMouseButtonKeyPressed;631632/// @}633634/// @name structs related with checkable buttons635/// @{636637/// @brief variable used to save checkable buttons for common supermodes638GNEViewNetHelper::CommonCheckableButtons myCommonCheckableButtons;639640/// @brief variable used to save checkable buttons for Supermode Network641GNEViewNetHelper::NetworkCheckableButtons myNetworkCheckableButtons;642643/// @brief variable used to save checkable buttons for Supermode Demand644GNEViewNetHelper::DemandCheckableButtons myDemandCheckableButtons;645646/// @brief variable used to save checkable buttons for Supermode Data647GNEViewNetHelper::DataCheckableButtons myDataCheckableButtons;648649/// @}650651/// @name structs related with view options652/// @{653654/// @brief variable used to save variables related with view options in supermode Network655GNEViewNetHelper::NetworkViewOptions myNetworkViewOptions;656657/// @brief variable used to save variables related with view options in supermode Demand658GNEViewNetHelper::DemandViewOptions myDemandViewOptions;659660/// @brief variable used to save variables related with view options in supermode Data661GNEViewNetHelper::DataViewOptions myDataViewOptions;662663/// @}664665/// @brief variable used to save IntervalBar666GNEViewNetHelper::IntervalBar myIntervalBar;667668/// @name structs related with move elements669/// @{670671/// @brief modul used for moving single element672GNEViewNetHelper::MoveSingleElementModul myMoveSingleElement;673674/// @brief modul used for moving multiple elements675GNEViewNetHelper::MoveMultipleElementModul myMoveMultipleElements;676677// @}678679/// @name structs related with Demand options680/// @{681682/// @brief variable used to save variables related with vehicle options683GNEViewNetHelper::VehicleOptions myVehicleOptions;684685/// @brief variable used to save variables related with vehicle type options686GNEViewNetHelper::VehicleTypeOptions myVehicleTypeOptions;687688// @}689690/// @brief variable used for grouping all variables related with salve elements691GNEViewNetHelper::SaveElements mySaveElements;692693/// @brief variable used for grouping all variables related with switch time694GNEViewNetHelper::TimeFormat myTimeFormat;695696/// @brief variable used for grouping all variables related with selecting areas697GNEViewNetHelper::SelectingArea mySelectingArea;698699/// @brief struct for grouping all variables related with edit shapes700GNEViewNetHelper::EditNetworkElementShapes myEditNetworkElementShapes;701702/// @brief lock manager703GNEViewNetHelper::LockManager myLockManager;704705/// @brief inspected element706GNEViewNetHelper::InspectedElements myInspectedElements;707708/// @brief front element709GNEViewNetHelper::MarkFrontElements myMarkFrontElements;710711/// @brief view parent712GNEViewParent* myViewParent = nullptr;713714/// @brief Pointer to current net. (We are not responsible for deletion)715GNENet* myNet = nullptr;716717/// @brief the current frame718GNEFrame* myCurrentFrame = nullptr;719720/// @brief a reference to the undolist maintained in the application721GNEUndoList* myUndoList = nullptr;722723/// @brief last created route724GNEDemandElement* myLastCreatedRoute = nullptr;725726/// @brief draw preview roundabout727bool myDrawPreviewRoundabout = false;728729/// @brief flag for mark if during this frame a popup was created (needed to avoid problems in linux with CursorDialogs)730bool myCreatedPopup = false;731732/// @brief drawin toggle (used in drawGLElements to avoid draw elements twice)733int myDrawingToggle = 0;734735/// @brief create edit mode buttons and elements736void buildEditModeControls();737738/// @brief updates Network mode specific controls739void updateNetworkModeSpecificControls();740741/// @brief updates Demand mode specific controls742void updateDemandModeSpecificControls();743744/// @brief updates Data mode specific controls745void updateDataModeSpecificControls();746747/// @brief delete given network attribute carriers748void deleteNetworkAttributeCarrier(const GNEAttributeCarrier* AC);749750/// @brief delete given demand attribute carriers751void deleteDemandAttributeCarrier(const GNEAttributeCarrier* AC);752753/// @brief delete data attribute carriers754void deleteDataAttributeCarrier(const GNEAttributeCarrier* AC);755756/// @brief try to retrieve an edge at popup position757GNEEdge* getEdgeAtPopupPosition();758759/// @brief try to retrieve a lane at popup position760GNELane* getLaneAtPopupPosition();761762/// @brief try to retrieve a junction at popup position763GNEJunction* getJunctionAtPopupPosition();764765/// @brief try to retrieve a connection at popup position766GNEConnection* getConnectionAtPopupPosition();767768/// @brief try to retrieve a crossing at popup position769GNECrossing* getCrossingAtPopupPosition();770771/// @brief try to retrieve a walkingArea at popup position772GNEWalkingArea* getWalkingAreaAtPopupPosition();773774/// @brief try to retrieve a additional at popup position775GNEAdditional* getAdditionalAtPopupPosition();776777/// @brief try to retrieve a demand element at popup position778GNEDemandElement* getDemandElementAtPopupPosition();779780/// @brief try to retrieve a polygon at popup position781GNEPoly* getPolygonAtPopupPosition();782783/// @brief try to retrieve a POILane at popup position784GNEPOI* getPOIAtPopupPosition();785786/// @brief try to retrieve a TAZ at popup position787GNETAZ* getTAZAtPopupPosition();788789/// @brief try to retreive a edited shape at popup position790GNENetworkElement* getShapeEditedAtPopupPosition();791792/// @brief Auxiliary function used by onLeftBtnPress(...)793void processClick(void* eventData);794795/// @brief update cursor after every click/key press/release796void updateCursor();797798/// @brief draw functions799/// @{800801/// @brief draw all gl elements of netedit802int drawGLElements(const Boundary& bound);803804/// @brief draw grid and update grid button805void drawGrid() const;806807/// @brief draw temporal polygon shape in Polygon Mode808void drawTemporalDrawingShape() const;809810/// @brief draw temporal junction in create edge mode811void drawTemporalJunction() const;812813/// @brief draw temporal split junction in create edge mode814void drawTemporalSplitJunction() const;815816/// @brief draw temporal roundabout817void drawTemporalRoundabout() const;818819/// @brief draw temporal E1 TLS Lines820void drawTemporalE1TLSLines() const;821822/// @brief draw temporal Junction TLS Lines823void drawTemporalJunctionTLSLines() const;824825/// @brief draw circle in testing mode (needed for grid)826void drawNeteditAttributesReferences();827828/// @brief draw circle in testing mode (needed for grid)829void drawTestsCircle() const;830831/// @}832833/// @brief mouse process functions834/// @{835836/// @brief process left button press function in Supermode Network837void processLeftButtonPressNetwork(void* eventData);838839/// @brief process left button release function in Supermode Network840void processLeftButtonReleaseNetwork();841842/// @brief process move mouse function in Supermode Network843void processMoveMouseNetwork(const bool mouseLeftButtonPressed);844845/// @brief process left button press function in Supermode Demand846void processLeftButtonPressDemand(void* eventData);847848/// @brief process left button release function in Supermode Demand849void processLeftButtonReleaseDemand();850851/// @brief process move mouse function in Supermode Demand852void processMoveMouseDemand(const bool mouseLeftButtonPressed);853854/// @brief process left button press function in Supermode Data855void processLeftButtonPressData(void* eventData);856857/// @brief process left button release function in Supermode Data858void processLeftButtonReleaseData();859860/// @brief process move mouse function in Supermode Data861void processMoveMouseData(const bool mouseLeftButtonPressed);862863/// @brief Invalidated copy constructor.864GNEViewNet(const GNEViewNet&) = delete;865866/// @brief Invalidated assignment operator.867GNEViewNet& operator=(const GNEViewNet&) = delete;868};869870871