/****************************************************************************/1// Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo2// Copyright (C) 2001-2026 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 GNEViewNetHelper.h14/// @author Pablo Alvarez Lopez15/// @date Feb 201916///17// A file used to reduce the size of GNEViewNet.h grouping structs and classes18/****************************************************************************/19#pragma once20#include <config.h>2122#include <unordered_set>23#include <netedit/elements/moving/GNEMoveElement.h>24#include <utils/foxtools/MFXButtonTooltip.h>25#include <utils/foxtools/MFXCheckableButton.h>26#include <utils/foxtools/MFXLCDLabel.h>27#include <utils/foxtools/MFXMenuButtonTooltip.h>28#include <utils/gui/div/GUIGlobalViewObjectsHandler.h>29#include <utils/gui/globjects/GUIGlObject.h>30#include <utils/gui/globjects/GUIGlObjectTypes.h>31#include <utils/xml/CommonXMLStructure.h>3233// ===========================================================================34// enum35// ===========================================================================3637/// @brie enum for supermodes38enum class Supermode {39/// @brief Network mode (Edges, junctions, etc..)40NETWORK,41///@brief Demand mode (Routes, Vehicles etc..)42DEMAND,43///@brief Data mode (edgeData, LaneData etc..)44DATA45};4647/// @brie enum for network edit modes48enum class NetworkEditMode {49/// @brief empty Network mode50NETWORK_NONE,51///@brief mode for inspecting network elements52NETWORK_INSPECT,53///@brief mode for deleting network elements54NETWORK_DELETE,55///@brief mode for selecting network elements56NETWORK_SELECT,57///@brief mode for moving network elements58NETWORK_MOVE,59///@brief mode for creating new edges60NETWORK_CREATE_EDGE,61///@brief mode for connecting lanes62NETWORK_CONNECT,63///@brief mode for editing tls64NETWORK_TLS,65///@brief Mode for editing additionals66NETWORK_ADDITIONAL,67///@brief Mode for editing crossing68NETWORK_CROSSING,69///@brief Mode for editing TAZ70NETWORK_TAZ,71///@brief Mode for editing Polygons72NETWORK_SHAPE,73///@brief Mode for editing connection prohibitions74NETWORK_PROHIBITION,75///@brief Mode for editing wires76NETWORK_WIRE,77///@brief Mode for editing decals78NETWORK_DECAL79};8081/// @brie enum for demand edit modes82enum class DemandEditMode {83/// @brief empty Demand mode84DEMAND_NONE,85///@brief mode for inspecting demand elements86DEMAND_INSPECT,87///@brief mode for deleting demand elements88DEMAND_DELETE,89///@brief mode for selecting demand elements90DEMAND_SELECT,91///@brief mode for moving demand elements92DEMAND_MOVE,93///@brief Mode for editing routes94DEMAND_ROUTE,95///@brief Mode for editing route distributions96DEMAND_ROUTEDISTRIBUTION,97///@brief Mode for editing vehicles98DEMAND_VEHICLE,99///@brief Mode for editing types100DEMAND_TYPE,101///@brief Mode for editing type distributions102DEMAND_TYPEDISTRIBUTION,103///@brief Mode for editing stops104DEMAND_STOP,105///@brief Mode for editing person106DEMAND_PERSON,107///@brief Mode for editing person plan108DEMAND_PERSONPLAN,109///@brief Mode for editing container110DEMAND_CONTAINER,111///@brief Mode for editing container plan112DEMAND_CONTAINERPLAN113};114115/// @brief enum for data edit modes116enum class DataEditMode {117/// @brief empty Data mode118DATA_NONE,119/// @brief mode for inspecting data elements120DATA_INSPECT,121/// @brief mode for deleting data elements122DATA_DELETE,123/// @brief mode for selecting data elements124DATA_SELECT,125/// @brief mode for create edgeData elements126DATA_EDGEDATA,127/// @brief mode for create edgeRelData elements128DATA_EDGERELDATA,129/// @brief mode for create TAZRelData elements130DATA_TAZRELDATA,131/// @brief mode for create meanData elements132DATA_MEANDATA133};134135// ===========================================================================136// class declarations137// ===========================================================================138139class GNEAttributeCarrier;140class GNEFrame;141class GNENet;142class GNETagPropertiesDatabase;143class GNEUndoList;144class GNEViewNet;145class GNEViewParent;146// dialogs147class GNEVClassesDialog;148class GNEFixNetworkElements;149class GNEFixAdditionalElementsDialog;150class GNEFixDemandElementsDialog;151// network elements152class GNENetworkElement;153class GNEJunction;154class GNEEdge;155class GNELane;156class GNEConnection;157class GNECrossing;158class GNEWalkingArea;159class GNEInternalLane;160// additional elements161class GNEAdditional;162class GNEPoly;163class GNEPOI;164class GNETAZ;165// demand elements166class GNEDemandElement;167// data elements168class GNEDataSet;169class GNEGenericData;170class GNEEdgeData;171class GNEEdgeRelData;172class GNETAZRelData;173174// ===========================================================================175// classes and structs definitions176// ===========================================================================177178struct GNEViewNetHelper {179180/// @brief lock manager181class LockManager {182183public:184/// @brief constructor185LockManager(GNEViewNet* viewNet);186187/// @brief destructor188~LockManager();189190/// @brief check if given GLObject is locked for inspect, select, delete and move191bool isObjectLocked(GUIGlObjectType objectType, const bool selected) const;192193/// @brief update flags194void updateFlags();195196/// @brief update lock inspect menuBar197void updateLockMenuBar();198199private:200/// @brief operation locked201class OperationLocked {202203public:204/// @brief constructor205OperationLocked();206207/// @brief parameter constructor208OperationLocked(Supermode supermode);209210/// @brief destructor211~OperationLocked();212213/// @brief get supermode214Supermode getSupermode() const;215216/// @brief flag for lock/unlock217bool lock = false;218219private:220/// @brief supermode associated with this operation locked221Supermode mySupermode;222};223224/// @brief pointer to viewNet225GNEViewNet* myViewNet;226227/// @brief map with locked elements228std::map<GUIGlObjectType, OperationLocked> myLockedElements;229230/// @brief Invalidated copy constructor.231LockManager(const LockManager&) = delete;232233/// @brief Invalidated assignment operator.234LockManager& operator=(const LockManager&) = delete;235};236237/// @brief class used for group inspected elements238class InspectedElements {239240public:241/// @brief constructor242InspectedElements();243244/// @name inspect functions245/// @{246/// @brief inspect AC247void inspectAC(GNEAttributeCarrier* AC);248249/// @brief inspect multiple ACs250void inspectACs(const std::vector<GNEAttributeCarrier*>& ACs);251252/// @brief uninspect AC253void uninspectAC(GNEAttributeCarrier* AC);254255/// @brief clear inspected AC256void clearInspectedElements();257258/// @}259260/// @name get functions261/// @{262/// @brief get first inspected AC (needed because the main container is a hash)263GNEAttributeCarrier* getFirstAC() const;264265/// @brief get hash table with all inspected ACs266const std::unordered_set<GNEAttributeCarrier*>& getACs() const;267268/// @}269270/// @name check functions271/// @{272// @brief check if the given AC is inspected273bool isACInspected(GNEAttributeCarrier* AC) const;274275// @brief check if the given constant AC is inspected276bool isACInspected(const GNEAttributeCarrier* AC) const;277278/// @brief check if we're inspecting at least one element279bool isInspectingElements() const;280281/// @brief check if we're inspecting exactly one element282bool isInspectingSingleElement() const;283284/// @brief check if we're inspecting more than one elements285bool isInspectingMultipleElements() const;286287/// @}288289private:290/// @brief first inspected element (usually the clicked element)291GNEAttributeCarrier* myFirstInspectedAC = nullptr;292293/// @brief hash table with all inspected ACs (we use a set to make deletion of massive elements more quickly)294std::unordered_set<GNEAttributeCarrier*> myInspectedACs;295296/// @brief Invalidated copy constructor.297InspectedElements(const InspectedElements&) = delete;298299/// @brief Invalidated assignment operator.300InspectedElements& operator=(const InspectedElements&) = delete;301};302303/// @brief class used for group front elements304class MarkFrontElements {305306/// @brief only GNEAttributeCarrier have access to mark/unmarkAC307friend class GNEAttributeCarrier;308309public:310/// @brief constructor311MarkFrontElements();312313/// @brief get hash table with all fronted ACs314const std::unordered_set<GNEAttributeCarrier*>& getACs() const;315316/// @brief unmark all ACs317void unmarkAll();318319protected:320/// @brief mark AC as drawing front321void markAC(GNEAttributeCarrier* AC);322323/// @brief unmark AC for drawing front324void unmarkAC(GNEAttributeCarrier* AC);325326private:327/// @brief hash table with all marked ACs (we use a set to make deletion of massive elements more quickly)328std::unordered_set<GNEAttributeCarrier*> myMarkedACs;329330/// @brief Invalidated copy constructor.331MarkFrontElements(const MarkFrontElements&) = delete;332333/// @brief Invalidated assignment operator.334MarkFrontElements& operator=(const MarkFrontElements&) = delete;335};336337/// @brief class used to group all variables related with objects under cursor after a click over view338class ViewObjectsSelector {339340public:341/// @brief constructor342ViewObjectsSelector(GNEViewNet* viewNet);343344/// @brief update objects (using gViewObjectsHandler)345void updateObjects();346347/// @brief update merging junctions348void updateMergingJunctions();349350/// @brief fill the given SUMO base object with the current single objects351void fillSumoBaseObject(CommonXMLStructure::SumoBaseObject* baseObjet) const;352353/// @brief filter all elements except the given GLO type354void filterAllExcept(GUIGlObjectType exception);355356/// @brief filter by supermode357void filterBySuperMode();358359/// @brief filter (remove) junctions360void filterJunctions();361362/// @brief filter (remove) edges363void filterEdges();364365/// @brief filter (remove) lanes366void filterLanes();367368/// @brief filter (remove) connections369void filterConnections();370371/// @brief filter (remove) crossings372void filterCrossings();373374/// @brief filter (remove) walkingAreas375void filterWalkingAreas();376377/// @brief filter (remove) polys and POIs378void filterShapes();379380/// @brief filter (remove) additionals381void filterAdditionals(const bool includeStoppigPlaces, const bool includeTAZs);382383/// @brief filter (remove) network elements384void filterNetworkElements();385386/// @brief filter (remove) demand elements387void filterDemandElements(const bool includeRoutes);388389/// @brief filter (remove) datga elements390void filterDataElements();391392/// @brief filter locked elements (except the ignoreFilter)393void filterLockedElements(const std::vector<GUIGlObjectType> ignoreFilter = {});394395/// @brief get front GUIGLObject or a pointer to nullptr396const GUIGlObject* getGUIGlObjectFront() const;397398/// @brief get front attribute carrier or a pointer to nullptr399GNEAttributeCarrier* getAttributeCarrierFront() const;400401/// @brief get front network element or a pointer to nullptr402GNENetworkElement* getNetworkElementFront() const;403404/// @brief get front additional element or a pointer to nullptr405GNEAdditional* getAdditionalFront() const;406407/// @brief get front demand element or a pointer to nullptr408GNEDemandElement* getDemandElementFront() const;409410/// @brief get generic data element or a pointer to nullptr411GNEGenericData* getGenericDataElementFront() const;412413/// @brief get front junction or a pointer to nullptr414GNEJunction* getJunctionFront() const;415416/// @brief get front edge or a pointer to nullptr417GNEEdge* getEdgeFront() const;418419/// @brief get front lane or a pointer to nullptr420GNELane* getLaneFront() const;421422/// @brief get front lane or a pointer to nullptr checking if is locked423GNELane* getLaneFrontNonLocked() const;424425/// @brief get lanes426const std::vector<GNELane*>& getLanes() const;427428/// @brief get front crossing or a pointer to nullptr429GNECrossing* getCrossingFront() const;430431/// @brief get front walkingArea or a pointer to nullptr432GNEWalkingArea* getWalkingAreaFront() const;433434/// @brief get front connection or a pointer to nullptr435GNEConnection* getConnectionFront() const;436437/// @brief get front internal lane or a pointer to nullptr438GNEInternalLane* getInternalLaneFront() const;439440/// @brief get front TAZ or a pointer to nullptr441GNETAZ* getTAZFront() const;442443/// @brief get front POI or a pointer to nullptr444GNEPOI* getPOIFront() const;445446/// @brief get front Poly or a pointer to nullptr447GNEPoly* getPolyFront() const;448449/// @brief get edge data element or a pointer to nullptr450GNEEdgeData* getEdgeDataElementFront() const;451452/// @brief get edge rel data element or a pointer to nullptr453GNEEdgeRelData* getEdgeRelDataElementFront() const;454455/// @brief get TAZ rel data element or a pointer to nullptr456GNETAZRelData* getTAZRelDataElementFront() const;457458/// @brief get vector with GL objects459const std::vector<GUIGlObject*>& getGLObjects() const;460461/// @brief get vector with ACs462const std::vector<GNEAttributeCarrier*>& getAttributeCarriers() const;463464/// @brief get vector with junctions465const std::vector<GNEJunction*>& getJunctions() const;466467/// @brief get vector with edges468const std::vector<GNEEdge*>& getEdges() const;469470/// @brief get vector with TAZs471const std::vector<GNETAZ*>& getTAZs() const;472473/// @brief get vector with additionals474const std::vector<GNEAdditional*>& getAdditionals() const;475476/// @brief get vector with Demand Elements477const std::vector<GNEDemandElement*>& getDemandElements() const;478479/// @brief get merging junctions480const std::vector<const GNEJunction*>& getMergingJunctions() const;481482protected:483/// @brief objects container484class ViewObjectsContainer {485486public:487/// @brief constructor488ViewObjectsContainer();489490/// @brief clear elements491void clearElements();492493/// @brief reseve memory for all elements494void reserve(int size);495496/// @brief filter elements497void filterElements(const std::vector<const GUIGlObject*>& objects);498499/// @brief vector with the GUIGlObjects500std::vector<GUIGlObject*> GUIGlObjects;501502/// @brief vector with the attribute carriers503std::vector<GNEAttributeCarrier*> attributeCarriers;504505/// @brief vector with the network elements506std::vector<GNENetworkElement*> networkElements;507508/// @brief vector with the additional elements509std::vector<GNEAdditional*> additionals;510511/// @brief vector with the demand elements512std::vector<GNEDemandElement*> demandElements;513514/// @brief vector with the generic datas515std::vector<GNEGenericData*> genericDatas;516517/// @brief vector with the junctions518std::vector<GNEJunction*> junctions;519520/// @brief vector with the edges521std::vector<GNEEdge*> edges;522523/// @brief vector with the lanes524std::vector<GNELane*> lanes;525526/// @brief vector with the crossings527std::vector<GNECrossing*> crossings;528529/// @brief vector with the walkingAreas530std::vector<GNEWalkingArea*> walkingAreas;531532/// @brief vector with the connections533std::vector<GNEConnection*> connections;534535/// @brief vector with the internal lanes536std::vector<GNEInternalLane*> internalLanes;537538/// @brief vector with the TAZ elements539std::vector<GNETAZ*> TAZs;540541/// @brief vector with the POIs542std::vector<GNEPOI*> POIs;543544/// @brief vector with the polys545std::vector<GNEPoly*> polys;546547/// @brief vector with the edge datas548std::vector<GNEEdgeData*> edgeDatas;549550/// @brief vector with the edge relation datas551std::vector<GNEEdgeRelData*> edgeRelDatas;552553/// @brief vector with the TAZ relation datas554std::vector<GNETAZRelData*> TAZRelDatas;555556private:557/// @brief Invalidated copy constructor.558ViewObjectsContainer(const ViewObjectsContainer&) = delete;559560/// @brief Invalidated assignment operator.561ViewObjectsContainer& operator=(const ViewObjectsContainer&) = delete;562};563564/// @brief pointer to viewNet565const GNEViewNet* myViewNet;566567/// @brief objects container with selected objects568ViewObjectsContainer myViewObjects;569570/// @brief merging junctions571std::vector<const GNEJunction*> myMergingJunctions;572573private:574/// @brief update network elements575void updateNetworkElements(ViewObjectsContainer& container, const GUIGlObject* glObject);576577/// @brief update additional elements578void updateAdditionalElements(ViewObjectsContainer& container, const GUIGlObject* glObject);579580/// @brief update shape elements581void updateShapeElements(ViewObjectsContainer& container, const GUIGlObject* glObject);582583/// @brief update TAZ elements584void updateTAZElements(ViewObjectsContainer& container, const GUIGlObject* glObject);585586/// @brief update demand elements587void updateDemandElements(ViewObjectsContainer& container, const GUIGlObject* glObject);588589/// @brief update generic data elements590void updateGenericDataElements(ViewObjectsContainer& container, const GUIGlObject* glObject);591592/// @brief process GL objects593void processGUIGlObjects(const GUIViewObjectsHandler::GLObjectsSortedContainer& objectsContainer);594595/// @brief default constructor596ViewObjectsSelector();597598/// @brief Invalidated copy constructor.599ViewObjectsSelector(const ViewObjectsSelector&) = delete;600601/// @brief Invalidated assignment operator.602ViewObjectsSelector& operator=(const ViewObjectsSelector&) = delete;603};604605/// @brief class used to group all variables related with mouse buttons and key pressed after certain events606struct MouseButtonKeyPressed {607608/// @brief constructor609MouseButtonKeyPressed();610611/// @brief update status of MouseButtonKeyPressed during current event612void update(void* eventData);613614/// @brief check if SHIFT is pressed during current event615bool shiftKeyPressed() const;616617/// @brief check if CONTROL is pressed during current event618bool controlKeyPressed() const;619620/// @brief check if ALT is pressed during current event621bool altKeyPressed() const;622623/// @brief check if mouse left button is pressed during current event624bool mouseLeftButtonPressed() const;625626/// @brief check if mouse right button is pressed during current event627bool mouseRightButtonPressed() const;628629private:630/// @brief information of event (must be updated)631FXEvent* myEventInfo;632633/// @brief Invalidated copy constructor.634MouseButtonKeyPressed(const MouseButtonKeyPressed&) = delete;635636/// @brief Invalidated assignment operator.637MouseButtonKeyPressed& operator=(const MouseButtonKeyPressed&) = delete;638};639640/// @brief struct used to group all variables related with save elements641struct SaveElements {642643/// @brief default constructor644SaveElements(GNEViewNet* viewNet);645646/// @brief destructor647~SaveElements();648649/// @brief build save buttons650void buildSaveElementsButtons();651652/// @brief enable or disable save individual files653void setSaveIndividualFiles(bool value);654655private:656/// @brief pointer to net657GNEViewNet* myViewNet;658659/// The locator menu660FXPopup* mySaveIndividualFilesPopup = nullptr;661662/// @brief checkable button for save individual files663MFXMenuButtonTooltip* mySaveIndividualFiles = nullptr;664665/// @brief checkable button for save netedit config666MFXButtonTooltip* mySaveNeteditConfig = nullptr;667668/// @brief checkable button for save SUMO config669MFXButtonTooltip* mySaveSumoConfig = nullptr;670671/// @brief checkable button for save network672MFXButtonTooltip* mySaveNetwork = nullptr;673674/// @brief checkable button for save additional elements675MFXButtonTooltip* mySaveAdditionalElements = nullptr;676677/// @brief checkable button for save demand elements678MFXButtonTooltip* mySaveDemandElements = nullptr;679680/// @brief checkable button for save genericdata elements681MFXButtonTooltip* mySaveDataElements = nullptr;682683/// @brief checkable button for save meanData elements684MFXButtonTooltip* mySaveMeanDataElements = nullptr;685686/// @brief Invalidated copy constructor.687SaveElements(const SaveElements&) = delete;688689/// @brief Invalidated assignment operator.690SaveElements& operator=(const SaveElements&) = delete;691};692693/// @brief struct used to group all variables related with time format694struct TimeFormat {695696/// @brief default constructor697TimeFormat(GNEViewNet* viewNet);698699/// @brief build time format buttons700void buildTimeFormatButtons();701702/// @brief switch time format703void switchTimeFormat();704705/// @brief update button label706void updateButtonLabel();707708private:709/// @brief pointer to net710GNEViewNet* myViewNet;711712/// @brief checkable button for switch between timeSteps and HH:MM:SS713MFXButtonTooltip* mySwitchButton = nullptr;714715/// @brief Invalidated copy constructor.716TimeFormat(const TimeFormat&) = delete;717718/// @brief Invalidated assignment operator.719TimeFormat& operator=(const TimeFormat&) = delete;720};721722/// @brief struct used to group all variables related with Supermodes723struct EditModes {724725/// @brief constructor726EditModes(GNEViewNet* viewNet);727728/// @brief destructor729~EditModes();730731/// @brief build checkable buttons732void buildSuperModeButtons();733734/// @brief set supermode735void setSupermode(Supermode supermode, const bool force);736737/// @brief set Network edit mode738void setNetworkEditMode(NetworkEditMode networkMode, const bool force = false);739740/// @brief set Demand edit mode741void setDemandEditMode(DemandEditMode demandMode, const bool force = false);742743/// @brief set Data edit mode744void setDataEditMode(DataEditMode dataMode, const bool force = false);745746/// @check if current supermode is Network747bool isCurrentSupermodeNetwork() const;748749/// @check if current supermode is Demand750bool isCurrentSupermodeDemand() const;751752/// @check if current supermode is Data753bool isCurrentSupermodeData() const;754755/// @brief set view756void setView(FXSelector sel);757758/// @brief check if default view is enabled759bool isDefaultView() const;760761/// @brief check if default view is enabled762bool isJuPedSimView() const;763764/// @brief the current supermode765Supermode currentSupermode;766767/// @brief the current Network edit mode768NetworkEditMode networkEditMode;769770/// @brief the current Demand edit mode771DemandEditMode demandEditMode;772773/// @brief the current Data edit mode774DataEditMode dataEditMode;775776/// @brief checkable button for supermode Network777MFXCheckableButton* networkButton = nullptr;778779/// @brief checkable button for supermode Demand780MFXCheckableButton* demandButton = nullptr;781782/// @brief checkable button for supermode Data783MFXCheckableButton* dataButton = nullptr;784785private:786/// @brief pointer to net787GNEViewNet* myViewNet;788789/// @brief The netedit views menu790FXPopup* myNeteditViewsPopup = nullptr;791792/// @brief The netedit views button793MFXMenuButtonTooltip* myNeteditViewsButton = nullptr;794795/// @brief The default view button796MFXButtonTooltip* myDefaultViewButton = nullptr;797798/// @brief The jupedsim view button799MFXButtonTooltip* myJuPedSimViewButton = nullptr;800801/// @brief Invalidated copy constructor.802EditModes(const EditModes&) = delete;803804/// @brief Invalidated assignment operator.805EditModes& operator=(const EditModes&) = delete;806};807808/// @brief struct used to group all variables related to view options in supermode Network809struct NetworkViewOptions {810811/// @brief default constructor812NetworkViewOptions(GNEViewNet* viewNet);813814/// @brief build menu checks815void buildNetworkViewOptionsMenuChecks();816817/// @brief hide all options menu checks818void hideNetworkViewOptionsMenuChecks();819820/// @brief get visible network menu commands821void getVisibleNetworkMenuCommands(std::vector<MFXCheckableButton*>& commands) const;822823/// @brief check if vehicles must be drawn spread824bool drawSpreadVehicles() const;825826/// @brief check if show demand elements checkbox is enabled827bool showDemandElements() const;828829/// @brief check if select edges checkbox is enabled830bool selectEdges() const;831832/// @brief check if select show connections checkbox is enabled833bool showConnections() const;834835/// @brief check if show sub-additionals836bool showSubAdditionals() const;837838/// @brief check if show TAZ Elements839bool showTAZElements() const;840841/// @brief check if we're editing elevation842bool editingElevation() const;843844/// @brief checkable button to show grid button845MFXCheckableButton* menuCheckToggleGrid = nullptr;846847/// @brief checkable button to show junction shapes848MFXCheckableButton* menuCheckToggleDrawJunctionShape = nullptr;849850/// @brief checkable button to draw vehicles in begin position or spread in lane851MFXCheckableButton* menuCheckDrawSpreadVehicles = nullptr;852853/// @brief checkable button to show Demand Elements854MFXCheckableButton* menuCheckShowDemandElements = nullptr;855856/// @brief checkable button to select only edges857MFXCheckableButton* menuCheckSelectEdges = nullptr;858859/// @brief checkable button to show connections860MFXCheckableButton* menuCheckShowConnections = nullptr;861862/// @brief checkable button to hide connections in connect mode863MFXCheckableButton* menuCheckHideConnections = nullptr;864865/// @brief checkable button to show additional sub-elements866MFXCheckableButton* menuCheckShowAdditionalSubElements = nullptr;867868/// @brief checkable button to show TAZ elements869MFXCheckableButton* menuCheckShowTAZElements = nullptr;870871/// @brief checkable button to extend to edge nodes872MFXCheckableButton* menuCheckExtendSelection = nullptr;873874/// @brief checkable button to set change all phases875MFXCheckableButton* menuCheckChangeAllPhases = nullptr;876877/// @brief checkable button to we should't warn about merging junctions878MFXCheckableButton* menuCheckMergeAutomatically = nullptr;879880/// @brief checkable button to show connection as bubble in "Move" mode.881MFXCheckableButton* menuCheckShowJunctionBubble = nullptr;882883/// @brief checkable button to apply movement to elevation884MFXCheckableButton* menuCheckMoveElevation = nullptr;885886/// @brief checkable button to the endpoint for a created edge should be set as the new source887MFXCheckableButton* menuCheckChainEdges = nullptr;888889/// @brief check checkable to create auto create opposite edge890MFXCheckableButton* menuCheckAutoOppositeEdge = nullptr;891892private:893/// @brief pointer to net894GNEViewNet* myViewNet;895896/// @brief Invalidated copy constructor.897NetworkViewOptions(const NetworkViewOptions&) = delete;898899/// @brief Invalidated assignment operator.900NetworkViewOptions& operator=(const NetworkViewOptions&) = delete;901};902903/// @brief struct used to group all variables related to view options in supermode Demand904struct DemandViewOptions {905906/// @brief default constructor907DemandViewOptions(GNEViewNet* viewNet);908909/// @brief build menu checks910void buildDemandViewOptionsMenuChecks();911912/// @brief hide all options menu checks913void hideDemandViewOptionsMenuChecks();914915/// @brief get visible demand menu commands916void getVisibleDemandMenuCommands(std::vector<MFXCheckableButton*>& commands) const;917918/// @brief check if vehicles must be drawn spread919bool drawSpreadVehicles() const;920921/// @brief check if non inspected element has to be hidden922bool showNonInspectedDemandElements(const GNEDemandElement* demandElement) const;923924/// @brief check if shapes has to be drawn925bool showShapes() const;926927/// @brief check if trips has to be drawn928bool showAllTrips() const;929930/// @brief check all person plans has to be show931bool showAllPersonPlans() const;932933/// @brief lock person934void lockPerson(const GNEDemandElement* person);935936/// @brief unlock person937void unlockPerson();938939/// @brief get locked person940const GNEDemandElement* getLockedPerson() const;941942/// @brief check all container plans has to be show943bool showAllContainerPlans() const;944945/// @brief lock container946void lockContainer(const GNEDemandElement* container);947948/// @brief unlock container949void unlockContainer();950951/// @brief show overlapped routes952bool showOverlappedRoutes() const;953954/// @brief get locked container955const GNEDemandElement* getLockedContainer() const;956957/// @brief menu check to show grid button958MFXCheckableButton* menuCheckToggleGrid = nullptr;959960/// @brief checkable button to show junction shapes961MFXCheckableButton* menuCheckToggleDrawJunctionShape = nullptr;962963/// @brief menu check to draw vehicles in begin position or spread in lane964MFXCheckableButton* menuCheckDrawSpreadVehicles = nullptr;965966/// @brief Hide shapes (Polygons and POIs)967MFXCheckableButton* menuCheckHideShapes = nullptr;968969/// @brief show all trips970MFXCheckableButton* menuCheckShowAllTrips = nullptr;971972/// @brief show all person plans973MFXCheckableButton* menuCheckShowAllPersonPlans = nullptr;974975/// @brief Lock Person976MFXCheckableButton* menuCheckLockPerson = nullptr;977978/// @brief show all container plans979MFXCheckableButton* menuCheckShowAllContainerPlans = nullptr;980981/// @brief Lock Container982MFXCheckableButton* menuCheckLockContainer = nullptr;983984/// @brief Hide non inspected demand elements985MFXCheckableButton* menuCheckHideNonInspectedDemandElements = nullptr;986987/// @brief show overlapped routes988MFXCheckableButton* menuCheckShowOverlappedRoutes = nullptr;989990private:991/// @brief pointer to net992GNEViewNet* myViewNet;993994/// @brief pointer to locked person995const GNEDemandElement* myLockedPerson = nullptr;996997/// @brief pointer to locked container998const GNEDemandElement* myLockedContainer = nullptr;9991000/// @brief Invalidated copy constructor.1001DemandViewOptions(const DemandViewOptions&) = delete;10021003/// @brief Invalidated assignment operator.1004DemandViewOptions& operator=(const DemandViewOptions&) = delete;1005};10061007/// @brief struct used to group all variables related to view options in supermode Data1008struct DataViewOptions {10091010/// @brief default constructor1011DataViewOptions(GNEViewNet* viewNet);10121013/// @brief build menu checks1014void buildDataViewOptionsMenuChecks();10151016/// @brief hide all options menu checks1017void hideDataViewOptionsMenuChecks();10181019/// @brief get visible demand menu commands1020void getVisibleDataMenuCommands(std::vector<MFXCheckableButton*>& commands) const;10211022/// @brief check if additionals has to be drawn1023bool showAdditionals() const;10241025/// @brief check if shapes has to be drawn1026bool showShapes() const;10271028/// @brief check if show demand elements checkbox is enabled1029bool showDemandElements() const;10301031/// @brief check if toggle TAZRel drawing checkbox is enabled1032bool TAZRelDrawing() const;10331034/// @brief check if toggle TAZ draw fill checkbox is enabled1035bool TAZDrawFill() const;10361037/// @brief check if toggle TAZRel only from checkbox is enabled1038bool TAZRelOnlyFrom() const;10391040/// @brief check if toggle TAZRel only to checkbox is enabled1041bool TAZRelOnlyTo() const;10421043/// @brief checkable button to show junction shapes1044MFXCheckableButton* menuCheckToggleDrawJunctionShape = nullptr;10451046/// @brief menu check to show Additionals1047MFXCheckableButton* menuCheckShowAdditionals = nullptr;10481049/// @brief menu check to show Shapes1050MFXCheckableButton* menuCheckShowShapes = nullptr;10511052/// @brief menu check to show Demand Elements1053MFXCheckableButton* menuCheckShowDemandElements = nullptr;10541055/// @brief menu check to toggle TAZ Rel drawing1056MFXCheckableButton* menuCheckToggleTAZRelDrawing = nullptr;10571058/// @brief menu check to toggle TAZ draw fill1059MFXCheckableButton* menuCheckToggleTAZDrawFill = nullptr;10601061/// @brief menu check to toggle TAZRel only from1062MFXCheckableButton* menuCheckToggleTAZRelOnlyFrom = nullptr;10631064/// @brief menu check to toggle TAZRel only to1065MFXCheckableButton* menuCheckToggleTAZRelOnlyTo = nullptr;10661067private:1068/// @brief pointer to net1069GNEViewNet* myViewNet;10701071/// @brief Invalidated copy constructor.1072DataViewOptions(const DataViewOptions&) = delete;10731074/// @brief Invalidated assignment operator.1075DataViewOptions& operator=(const DataViewOptions&) = delete;1076};10771078/// @brief class used to group all variables related to interval bar1079class IntervalBar {10801081public:1082/// @brief default constructor1083IntervalBar(GNEViewNet* viewNet);10841085/// @brief build interval bar elements1086void buildIntervalBarElements();10871088/// @brief show interval option bar1089void showIntervalBar();10901091/// @brief hide all options menu checks1092void hideIntervalBar();10931094/// @brief update interval bar1095void updateIntervalBar();10961097// @brief mark for update1098void markForUpdate();10991100/// @name get functions (called by GNEViewNet)1101/// @{11021103/// @brief get generic data type1104SumoXMLTag getGenericDataType() const;11051106/// @brief get dataSet1107GNEDataSet* getDataSet() const;11081109/// @brief get begin1110double getBegin() const;11111112/// @brief get end1113double getEnd() const;11141115/// @brief get parameter1116std::string getParameter() const;11171118/// @}11191120/// @name set functions (called by GNEViewNet)1121/// @{11221123/// @brief set generic data type1124void setGenericDataType();11251126/// @brief set dataSet1127void setDataSet();11281129/// @brief update limit by interval1130void setInterval();11311132/// @brief set begin1133void setBegin();11341135/// @brief set end1136void setEnd();11371138/// @brief set parameter1139void setParameter();11401141/// @}11421143protected:1144/// @brief enable interval bar1145void enableIntervalBar();11461147/// @brief disable interval bar1148void disableIntervalBar();11491150private:1151/// @brief pointer to net1152GNEViewNet* myViewNet;11531154/// @brief flag for update interval bar1155bool myUpdateInterval = true;11561157/// @brief combo box for generic data types1158MFXComboBoxIcon* myGenericDataTypesComboBox = nullptr;11591160/// @brief combo box for data sets1161MFXComboBoxIcon* myDataSetsComboBox = nullptr;11621163/// @brief checkbox for limit data elements by interval1164FXCheckButton* myIntervalCheckBox = nullptr;11651166/// @brief text field for interval begin1167FXTextField* myBeginTextField = nullptr;11681169/// @brief text field for interval end1170FXTextField* myEndTextField = nullptr;11711172/// @brief combo box for filtered parameters1173MFXComboBoxIcon* myParametersComboBox = nullptr;11741175/// @brief current dataSets1176std::vector<std::string> myDataSets;11771178/// @brief current parameters1179std::set<std::string> myParameters;11801181/// @brief Invalidated copy constructor.1182IntervalBar(const IntervalBar&) = delete;11831184/// @brief Invalidated assignment operator.1185IntervalBar& operator=(const IntervalBar&) = delete;1186};11871188/// @brief struct used to group all variables related with movement of single elements1189struct MoveSingleElementModul {11901191/// @brief constructor1192MoveSingleElementModul(GNEViewNet* viewNet);11931194/// @brief begin move network elementshape1195bool beginMoveNetworkElementShape();11961197/// @brief begin move single element in Network mode1198bool beginMoveSingleElementNetworkMode();11991200/// @brief begin move single element in Demand mode1201bool beginMoveSingleElementDemandMode();12021203/// @brief move single element in Network AND Demand mode1204void moveSingleElement(const bool mouseLeftButtonPressed);12051206/// @brief finish moving single elements in Network AND Demand mode1207void finishMoveSingleElement();12081209/// @brief check if there are moving elements1210bool isCurrentlyMovingSingleElement() const;12111212/// @brief get moved element1213GNEMoveElement* getMovedElement() const;12141215protected:1216/// @brief calculate offset1217const GNEMoveOffset calculateMoveOffset() const;12181219private:1220/// @brief pointer to net1221GNEViewNet* myViewNet;12221223/// @brief relative position of Clicked Position regarding to originalGeometryPointPosition (Used when user doesn't click exactly over the center of element)1224Position myRelativeClickedPosition;12251226/// @brief move operations1227GNEMoveOperation* myMoveOperation = nullptr;12281229/// @brief Invalidated copy constructor.1230MoveSingleElementModul(const MoveSingleElementModul&) = delete;12311232/// @brief Invalidated assignment operator.1233MoveSingleElementModul& operator=(const MoveSingleElementModul&) = delete;1234};12351236/// @brief struct used to group all variables related with movement of groups of elements1237struct MoveMultipleElementModul {12381239/// @brief constructor1240MoveMultipleElementModul(GNEViewNet* viewNet);12411242/// @brief begin move selection1243void beginMoveSelection();12441245/// @brief move selection1246void moveSelection(const bool mouseLeftButtonPressed);12471248/// @brief finish moving selection1249void finishMoveSelection();12501251/// @brief check if currently there is element being moved1252bool isMovingSelection() const;12531254/// @brief flag for moving edge1255bool isMovingSelectedEdge() const;12561257/// @brief reset flag for moving edge1258void resetMovingSelectedEdge();12591260/// @brief edge offset1261double getEdgeOffset() const;12621263/// @brief check if there are moving elements1264bool isCurrentlyMovingMultipleElements() const;12651266protected:1267/// @brief calculate move offset1268const GNEMoveOffset calculateMoveOffset() const;12691270/// @brief calculate junction selection1271void calculateJunctionSelection();12721273/// @brief calculate edge selection1274void calculateEdgeSelection(const GNEEdge* clickedEdge);12751276private:1277/// @brief pointer to net1278GNEViewNet* myViewNet;12791280/// @brief original clicked position when moveSelection is called (used for calculate offset during moveSelection())1281Position myClickedPosition;12821283/// @brief flag for enable moving edge1284bool myMovingSelectedEdge;12851286/// @brief offset of moved edge1287double myEdgeOffset;12881289/// @brief move operations1290std::vector<GNEMoveOperation*> myMoveOperations;12911292/// @brief Invalidated copy constructor.1293MoveMultipleElementModul(const MoveMultipleElementModul&) = delete;12941295/// @brief Invalidated assignment operator.1296MoveMultipleElementModul& operator=(const MoveMultipleElementModul&) = delete;1297};12981299/// @brief struct used to group all variables related with movement of groups of elements1300struct VehicleOptions {13011302/// @brief constructor1303VehicleOptions(GNEViewNet* viewNet);13041305/// @brief build menu checks1306void buildVehicleOptionsMenuChecks();13071308/// @brief hide all options menu checks1309void hideVehicleOptionsMenuChecks();13101311private:1312/// @brief pointer to net1313GNEViewNet* myViewNet;13141315/// @brief Invalidated copy constructor.1316VehicleOptions(const VehicleOptions&) = delete;13171318/// @brief Invalidated assignment operator.1319VehicleOptions& operator=(const VehicleOptions&) = delete;1320};13211322/// @brief struct used to group all variables related with movement of groups of elements1323struct VehicleTypeOptions {13241325/// @brief constructor1326VehicleTypeOptions(GNEViewNet* viewNet);13271328/// @brief build menu checks1329void buildVehicleTypeOptionsMenuChecks();13301331/// @brief hide all options menu checks1332void hideVehicleTypeOptionsMenuChecks();13331334private:1335/// @brief pointer to net1336GNEViewNet* myViewNet;13371338/// @brief Invalidated copy constructor.1339VehicleTypeOptions(const VehicleTypeOptions&) = delete;13401341/// @brief Invalidated assignment operator.1342VehicleTypeOptions& operator=(const VehicleTypeOptions&) = delete;1343};13441345/// @brief struct used to group all variables related with selecting using a square or polygon1346/// @note in the future the variables used for selecting through a polygon will be placed here1347struct SelectingArea {13481349/// @brief default constructor1350SelectingArea(GNEViewNet* viewNet);13511352/// @brief begin rectangle selection1353void beginRectangleSelection();13541355/// @brief move rectangle selection1356void moveRectangleSelection();13571358/// @brief finish rectangle selection1359void finishRectangleSelection();13601361/// @brief process rectangle Selection1362void processRectangleSelection();13631364/// @brief process rectangle Selection (only limited to Edges)1365std::vector<GNEEdge*> processEdgeRectangleSelection();13661367/// @brief draw rectangle selection1368void drawRectangleSelection(const RGBColor& color) const;13691370/// @brief whether we have started rectangle-selection1371bool selectingUsingRectangle;13721373/// @brief whether we have started rectangle-selection1374bool startDrawing;13751376private:1377/// @brief Process boundary Selection1378void processBoundarySelection(const Boundary& boundary);13791380/// @brief first corner of the rectangle-selection1381Position selectionCorner1;13821383/// @brief second corner of the rectangle-selection1384Position selectionCorner2;13851386/// @brief pointer to net1387GNEViewNet* myViewNet;13881389/// @brief Invalidated copy constructor.1390SelectingArea(const SelectingArea&) = delete;13911392/// @brief Invalidated assignment operator.1393SelectingArea& operator=(const SelectingArea&) = delete;1394};13951396/// @brief struct used to group all variables related with testing1397struct TestingMode {13981399/// @brief default constructor1400TestingMode(GNEViewNet* viewNet);14011402/// @brief init testing mode1403void initTestingMode();14041405/// @brief draw testing element1406void drawTestingElements(GUIMainWindow* mainWindow);14071408private:1409/// @brief pointer to net1410GNEViewNet* myViewNet;14111412/// @brief Width of net in testing mode1413int myTestingWidth = 0;14141415/// @brief Height of net in testing mode1416int myTestingHeight = 0;14171418/// @brief Invalidated copy constructor.1419TestingMode(const TestingMode&) = delete;14201421/// @brief Invalidated assignment operator.1422TestingMode& operator=(const TestingMode&) = delete;1423};14241425/// @brief struct used to group all variables related with common checkable Buttons1426struct CommonCheckableButtons {14271428/// @brief default constructor1429CommonCheckableButtons(GNEViewNet* viewNet);14301431/// @brief build checkable buttons1432void buildCommonCheckableButtons();14331434/// @brief show all Common Checkable Buttons1435void showCommonCheckableButtons();14361437/// @brief hide all Common Checkable Buttons1438void hideCommonCheckableButtons();14391440/// @brief hide all options menu checks1441void disableCommonCheckableButtons();14421443/// @brief update Common checkable buttons1444void updateCommonCheckableButtons();14451446/// @brief checkable button for edit mode inspect1447MFXCheckableButton* inspectButton = nullptr;14481449/// @brief checkable button for edit mode delete1450MFXCheckableButton* deleteButton = nullptr;14511452/// @brief checkable button for edit mode select1453MFXCheckableButton* selectButton = nullptr;14541455private:1456/// @brief pointer to net1457GNEViewNet* myViewNet;14581459/// @brief Invalidated copy constructor.1460CommonCheckableButtons(const CommonCheckableButtons&) = delete;14611462/// @brief Invalidated assignment operator.1463CommonCheckableButtons& operator=(const CommonCheckableButtons&) = delete;1464};14651466/// @brief struct used to group all variables related with Network checkable Buttons1467struct NetworkCheckableButtons {14681469/// @brief default constructor1470NetworkCheckableButtons(GNEViewNet* viewNet);14711472/// @brief build checkable buttons1473void buildNetworkCheckableButtons();14741475/// @brief show all Network Checkable Buttons1476void showNetworkCheckableButtons();14771478/// @brief hide all Network Checkable Buttons1479void hideNetworkCheckableButtons();14801481/// @brief hide all options menu checks1482void disableNetworkCheckableButtons();14831484/// @brief update network checkable buttons1485void updateNetworkCheckableButtons();14861487/// @brief checkable button for edit mode "move network elements"1488MFXCheckableButton* moveNetworkElementsButton = nullptr;14891490/// @brief checkable button for edit mode create edge1491MFXCheckableButton* createEdgeButton = nullptr;14921493/// @brief checkable button for edit mode connection1494MFXCheckableButton* connectionButton = nullptr;14951496/// @brief checkable button for edit mode traffic light1497MFXCheckableButton* trafficLightButton = nullptr;14981499/// @brief checkable button for edit mode additional1500MFXCheckableButton* additionalButton = nullptr;15011502/// @brief checkable button for edit mode crossing1503MFXCheckableButton* crossingButton = nullptr;15041505/// @brief checkable button for edit mode TAZ1506MFXCheckableButton* TAZButton = nullptr;15071508/// @brief checkable button for edit mode shape1509MFXCheckableButton* shapeButton = nullptr;15101511/// @brief checkable button for edit mode prohibition1512MFXCheckableButton* prohibitionButton = nullptr;15131514/// @brief checkable button for edit mode wires1515MFXCheckableButton* wireButton = nullptr;15161517/// @brief checkable button for edit mode decals1518MFXCheckableButton* decalButton = nullptr;15191520private:1521/// @brief pointer to net1522GNEViewNet* myViewNet;15231524/// @brief Invalidated copy constructor.1525NetworkCheckableButtons(const NetworkCheckableButtons&) = delete;15261527/// @brief Invalidated assignment operator.1528NetworkCheckableButtons& operator=(const NetworkCheckableButtons&) = delete;1529};15301531/// @brief struct used to group all variables related with Demand checkable Buttons1532struct DemandCheckableButtons {15331534/// @brief default constructor1535DemandCheckableButtons(GNEViewNet* viewNet);15361537/// @brief build checkable buttons1538void buildDemandCheckableButtons();15391540/// @brief show all Demand Checkable Buttons1541void showDemandCheckableButtons();15421543/// @brief hide all Demand Checkable Buttons1544void hideDemandCheckableButtons();15451546/// @brief hide all options menu checks1547void disableDemandCheckableButtons();15481549/// @brief update Demand checkable buttons1550void updateDemandCheckableButtons();15511552/// @brief checkable button for edit mode "move demand elements"1553MFXCheckableButton* moveDemandElementsButton = nullptr;15541555/// @brief checkable button for edit mode create routes1556MFXCheckableButton* routeButton = nullptr;15571558/// @brief checkable button for edit mode create route distributions1559MFXCheckableButton* routeDistributionButton = nullptr;15601561/// @brief checkable button for edit mode create vehicles1562MFXCheckableButton* vehicleButton = nullptr;15631564/// @brief checkable button for edit mode create type1565MFXCheckableButton* typeButton = nullptr;15661567/// @brief checkable button for edit mode create type distribution1568MFXCheckableButton* typeDistributionButton = nullptr;15691570/// @brief checkable button for edit mode create stops1571MFXCheckableButton* stopButton = nullptr;15721573/// @brief checkable button for edit mode create persons1574MFXCheckableButton* personButton = nullptr;15751576/// @brief checkable button for edit mode create person plans1577MFXCheckableButton* personPlanButton = nullptr;15781579/// @brief checkable button for edit mode create containers1580MFXCheckableButton* containerButton = nullptr;15811582/// @brief checkable button for edit mode create container plans1583MFXCheckableButton* containerPlanButton = nullptr;15841585private:1586/// @brief pointer to net1587GNEViewNet* myViewNet;15881589/// @brief Invalidated copy constructor.1590DemandCheckableButtons(const DemandCheckableButtons&) = delete;15911592/// @brief Invalidated assignment operator.1593DemandCheckableButtons& operator=(const DemandCheckableButtons&) = delete;1594};15951596/// @brief struct used to group all variables related with Data checkable Buttons1597struct DataCheckableButtons {15981599/// @brief default constructor1600DataCheckableButtons(GNEViewNet* viewNet);16011602/// @brief build checkable buttons1603void buildDataCheckableButtons();16041605/// @brief show all Data Checkable Buttons1606void showDataCheckableButtons();16071608/// @brief hide all Data Checkable Buttons1609void hideDataCheckableButtons();16101611/// @brief hide all options menu checks1612void disableDataCheckableButtons();16131614/// @brief update Data checkable buttons1615void updateDataCheckableButtons();16161617/// @brief checkable button for edit mode "edgeData"1618MFXCheckableButton* edgeDataButton = nullptr;16191620/// @brief checkable button for edit mode "edgeRelData"1621MFXCheckableButton* edgeRelDataButton = nullptr;16221623/// @brief checkable button for edit mode "TAZRelData"1624MFXCheckableButton* TAZRelDataButton = nullptr;16251626/// @brief checkable button for edit mode "meanData"1627MFXCheckableButton* meanDataButton = nullptr;16281629private:1630/// @brief pointer to net1631GNEViewNet* myViewNet;16321633/// @brief Invalidated copy constructor.1634DataCheckableButtons(const DataCheckableButtons&) = delete;16351636/// @brief Invalidated assignment operator.1637DataCheckableButtons& operator=(const DataCheckableButtons&) = delete;1638};16391640/// @brief struct used to group all variables related with edit shapes of NetworkElements1641struct EditNetworkElementShapes {16421643/// @brief default constructor1644EditNetworkElementShapes(GNEViewNet* viewNet);16451646/// @brief start edit custom shape1647void startEditCustomShape(GNENetworkElement* element);16481649/// @brief edit edit shape1650void stopEditCustomShape();16511652/// @brief save edited shape1653void commitShapeEdited();16541655/// @brief pointer to edited network element1656GNENetworkElement* getEditedNetworkElement() const;16571658private:1659/// @brief pointer to viewNet1660GNEViewNet* myViewNet;16611662/// @brief pointer to edited network element1663GNENetworkElement* myEditedNetworkElement = nullptr;16641665/// @brief the previous edit mode before edit NetworkElement's shapes1666NetworkEditMode myPreviousNetworkEditMode;16671668/// @brief Invalidated copy constructor.1669EditNetworkElementShapes(const EditNetworkElementShapes&) = delete;16701671/// @brief Invalidated assignment operator.1672EditNetworkElementShapes& operator=(const EditNetworkElementShapes&) = delete;1673};16741675/// @brief struct for pack all variables and functions related with Block Icon1676struct LockIcon {1677/// @brief draw lock icon1678static void drawLockIcon(const GUIVisualizationSettings::Detail d, const GNEAttributeCarrier* AC, GUIGlObjectType type, const Position position,1679const double exaggeration, const double size = 0.5,1680const double offsetx = 0, const double offsety = 0);16811682/// @brief check if icon can be drawn1683static bool checkDrawing(const GUIVisualizationSettings::Detail d, const GNEAttributeCarrier* AC,1684GUIGlObjectType type, const double exaggeration);1685private:1686/// @brief constructor1687LockIcon();16881689/// @brief Invalidated copy constructor.1690LockIcon(const LockIcon&) = delete;16911692/// @brief Invalidated assignment operator.1693LockIcon& operator=(const LockIcon&) = delete;1694};16951696/// @brief get scaled rainbow colors1697static const std::vector<RGBColor>& getRainbowScaledColors();16981699/// @brief get rainbow scaled color1700static const RGBColor& getRainbowScaledColor(const double min, const double max, const double value);17011702/// @brief filter elements based on the layer1703static std::vector<GUIGlObject*> filterElementsByLayer(const std::vector<GUIGlObject*>& GLObjects);17041705private:1706/// @brief scale (rainbow) colors1707static std::vector<RGBColor> myRainbowScaledColors;1708};170917101711