SUMO - Simulation of Urban MObility
GNEViewNet.h
Go to the documentation of this file.
1 /****************************************************************************/
7 // A view on the network being edited (adapted from GUIViewTraffic)
8 /****************************************************************************/
9 // SUMO, Simulation of Urban MObility; see http://sumo.dlr.de/
10 // Copyright (C) 2001-2016 DLR (http://www.dlr.de/) and contributors
11 /****************************************************************************/
12 //
13 // This file is part of SUMO.
14 // SUMO is free software: you can redistribute it and/or modify
15 // it under the terms of the GNU General Public License as published by
16 // the Free Software Foundation, either version 3 of the License, or
17 // (at your option) any later version.
18 //
19 /****************************************************************************/
20 #ifndef GNEViewNet_h
21 #define GNEViewNet_h
22 
23 
24 // ===========================================================================
25 // included modules
26 // ===========================================================================
27 #ifdef _MSC_VER
28 #include <windows_config.h>
29 #else
30 #include <config.h>
31 #endif
32 
33 #include <string>
35 #include <utils/geom/Boundary.h>
36 #include <utils/geom/Position.h>
37 #include <utils/common/RGBColor.h>
39 #include <utils/shapes/Polygon.h>
42 
43 // ===========================================================================
44 // enum
45 // ===========================================================================
46 enum EditMode {
63 };
64 
65 // ===========================================================================
66 // class declarations
67 // ===========================================================================
68 class GNENet;
69 class GNEJunction;
70 class GNEEdge;
71 class GNELane;
72 class GNEViewParent;
73 class GNEUndoList;
74 class GNEInspector;
75 class GNESelector;
76 class GNEConnector;
77 class GNETLSEditor;
78 class GNEPoly;
79 
80 // ===========================================================================
81 // class definitions
82 // ===========================================================================
88  // FOX-declarations
89  FXDECLARE(GNEViewNet)
90 
91 public:
92  /* @brief constructor
93  * @param[in] toolbar A reference to the parents toolbar
94  */
95  GNEViewNet(FXComposite* tmpParent, FXComposite* actualParent,
96  GUIMainWindow& app, GNEViewParent* viewParent, GNENet* net, FXGLVisual* glVis,
97  FXGLCanvas* share, FXToolBar* toolBar);
98 
100  virtual ~GNEViewNet();
101 
103  virtual void buildViewToolBars(GUIGlChildWindow&);
104 
105 
106  bool setColorScheme(const std::string& name);
107 
108 
111  long onLeftBtnPress(FXObject*, FXSelector, void*);
112  long onLeftBtnRelease(FXObject*, FXSelector, void*);
113  long onMouseMove(FXObject*, FXSelector, void*);
115 
117  long onCmdChangeMode(FXObject*, FXSelector, void*);
118 
120  long onCmdSplitEdge(FXObject*, FXSelector, void*);
121 
123  long onCmdSplitEdgeBidi(FXObject*, FXSelector, void*);
124 
126  long onCmdReverseEdge(FXObject*, FXSelector, void*);
127 
129  long onCmdAddReversedEdge(FXObject*, FXSelector, void*);
130 
132  long onCmdSetEdgeEndpoint(FXObject*, FXSelector, void*);
133 
135  long onCmdResetEdgeEndpoint(FXObject*, FXSelector, void*);
136 
138  long onCmdStraightenEdges(FXObject*, FXSelector, void*);
139 
141  long onCmdSimplifyShape(FXObject*, FXSelector, void*);
142 
144  long onCmdDeleteGeometry(FXObject*, FXSelector, void*);
145 
147  long onCmdDuplicateLane(FXObject*, FXSelector, void*);
148 
150  long onCmdNodeShape(FXObject*, FXSelector, void*);
151 
153  long onCmdNodeReplace(FXObject*, FXSelector, void*);
154 
158  void setEditModeFromHotkey(FXushort selid);
159 
160  // abort current edition operation
161  void abortOperation(bool clearSelection = true);
162 
163  // handle del keypress
164  void hotkeyDel();
165 
166  // handle enter keypress
167  void hotkeyEnter();
168 
169  // store the position where a popup-menu was requested
170  void markPopupPosition();
171 
172  // @brief get the net object
174  return myNet;
175  };
176 
177  void setStatusBarText(const std::string& text);
178 
179  /* @brief whether inspection, selection and inversion should apply to edges
180  * or to lanes */
181  bool selectEdges() {
182  return mySelectEdges->getCheck() != 0;
183  }
184 
185  /* @brief whether to autoselect nodes
186  * or to lanes */
188  return myExtendToEdgeNodes->getCheck() != 0;
189  }
190 
192  return mySelector;
193  }
194 
195 
196  void setSelectionScaling(SUMOReal selectionScale) {
197  myVisualizationSettings->selectionScale = selectionScale;
198  }
199 
201  void updateControls();
202 
204  return myTLSEditor;
205  }
206 
207  bool changeAllPhases() const {
208  return myChangeAllPhases->getCheck() != FALSE;
209  }
210 
211 protected:
212  int doPaintGL(int mode, const Boundary& bound);
213 
215  void doInit();
216 
219 
220 private:
221  // we are not responsible for deletion
223 
224  // the current edit mode
226 
227  // the previous edit mode used for toggling
229 
230  FXMenuCheck* mySelectEdges;
231  FXMenuCheck* myExtendToEdgeNodes;
232  FXMenuCheck* myChangeAllPhases;
233 
235  // @{
236  /* @brief source junction for new edge
237  * 0 if no edge source is selected
238  * an existing (or newly created) junction otherwise
239  */
241 
242  /* @brief whether the endpoint for a created edge should be set as the new
243  * source
244  */
245  FXMenuCheck* myChainCreateEdge;
247  // @}
248 
250  // @{
251  /* @brief the Junction to be moved
252  * 0 if nothing is grabbed
253  * otherwise the junction being moved
254  */
256 
259 
262 
265 
268 
270  FXMenuCheck* myWarnAboutMerge;
271  // @}
272 
274  //
276  // @{
277  // @brief whether we have started rectangle-selection
279  // @brief corner of the rectangle-selection
282  // @}
283 
284  //@name toolbar related stuff
286  FXToolBar* myToolbar;
289  FXComboBox* myEditModesCombo;
290 
294 
296 
299 
300  // @brief the panel for GNE_MODE_INSPECT
302 
303  // @brief the panel for GNE_MODE_SELECT
305 
306  // @brief the panel for GNE_MODE_CONNECT
308 
309  // @brief the panel for GNE_MODE_TLS
311 
313 
315 
316 private:
317  // set edit mode
318  void setEditMode(EditMode mode);
319 
321  void buildEditModeControls();
322 
325 
328 
330  void deleteSelectedEdges();
331 
334  bool mergeJunctions(GNEJunction* moved);
335 
338 
341 
344 
346  std::set<GNEEdge*> getEdgesAtCursorPosition(Position& pos);
347 
349  void removeCurrentPoly();
350 
351 };
352 
353 
354 #endif
355 
356 /****************************************************************************/
357 
long onCmdResetEdgeEndpoint(FXObject *, FXSelector, void *)
restore geometry endpoint to node position
Definition: GNEViewNet.cpp:889
long onCmdDeleteGeometry(FXObject *, FXSelector, void *)
delete the closes geometry point
Definition: GNEViewNet.cpp:930
GNEConnector * myConnector
Definition: GNEViewNet.h:307
FXMenuCheck * mySelectEdges
Definition: GNEViewNet.h:230
bool selectEdges()
Definition: GNEViewNet.h:181
GNEJunction * getJunctionAtCursorPosition(Position &pos)
try to retrieve a junction at the given position
Definition: GNEViewNet.cpp:749
Position myPopupSpot
Definition: GNEViewNet.h:312
void abortOperation(bool clearSelection=true)
Definition: GNEViewNet.cpp:653
void deleteSelectedJunctions()
delete all currently selected junctions
bool setColorScheme(const std::string &name)
Definition: GNEViewNet.cpp:294
bool changeAllPhases() const
Definition: GNEViewNet.h:207
void markPopupPosition()
Definition: GNEViewNet.cpp:743
long onCmdDuplicateLane(FXObject *, FXSelector, void *)
duplicate selected lane
Definition: GNEViewNet.cpp:940
StringBijection< EditMode > myEditModeNames
since we cannot switch on strings we map the mode names to an enum
Definition: GNEViewNet.h:293
long onMouseMove(FXObject *, FXSelector, void *)
Definition: GNEViewNet.cpp:632
GNEViewNet()
FOX needs this.
Definition: GNEViewNet.h:218
FXMenuCheck * myChainCreateEdge
Definition: GNEViewNet.h:245
long onCmdSplitEdge(FXObject *, FXSelector, void *)
split edge at cursor position
Definition: GNEViewNet.cpp:839
FXMenuCheck * myChangeAllPhases
Definition: GNEViewNet.h:232
void setEditMode(EditMode mode)
Position mySelCorner2
Definition: GNEViewNet.h:281
void setSelectionScaling(SUMOReal selectionScale)
Definition: GNEViewNet.h:196
long onCmdNodeShape(FXObject *, FXSelector, void *)
input custom node shape
Definition: GNEViewNet.cpp:961
A NBNetBuilder extended by visualisation and editing capabilities.
Definition: GNENet.h:77
FXComboBox * myEditModesCombo
combo box for selecting the edit mode
Definition: GNEViewNet.h:289
This lane is powered by an underlying GNEEdge and basically knows how to draw itself.
Definition: GNELane.h:56
void setEditModeFromHotkey(FXushort selid)
sets edit mode (from hotkey)
Definition: GNEViewNet.cpp:711
GNENet * getNet()
Definition: GNEViewNet.h:173
long onCmdSetEdgeEndpoint(FXObject *, FXSelector, void *)
set non-default geometry endpoint
Definition: GNEViewNet.cpp:879
void updateControls()
update control contents after undo/redo or recompute
EditMode myPreviousEditMode
Definition: GNEViewNet.h:228
GNEEdge * myEdgeToMove
the edge of which geometry is being moved
Definition: GNEViewNet.h:258
A class that stores a 2D geometrical boundary.
Definition: Boundary.h:48
long onCmdChangeMode(FXObject *, FXSelector, void *)
sets edit mode via combo box
Definition: GNEViewNet.cpp:704
A single child window which contains a view of the simulation area.
Definition: GNEViewParent.h:65
GNETLSEditor * myTLSEditor
Definition: GNEViewNet.h:310
bool myMoveSelection
whether a selection is being moved
Definition: GNEViewNet.h:267
void buildEditModeControls()
adds controls for setting the edit mode
std::set< GNEEdge * > getEdgesAtCursorPosition(Position &pos)
try to retrieve multiple edges at the given position
Definition: GNEViewNet.cpp:813
GNESelector * getSelector()
Definition: GNEViewNet.h:191
long onLeftBtnPress(FXObject *, FXSelector, void *)
Definition: GNEViewNet.cpp:375
long onCmdSimplifyShape(FXObject *, FXSelector, void *)
simply shape of current polygon
Definition: GNEViewNet.cpp:920
GNEPoly * myCurrentPoly
Definition: GNEViewNet.h:314
SUMOReal selectionScale
the current selection scaling in NETEDIT (temporary)
FXMenuCheck * myWarnAboutMerge
whether we should warn about merging junctions
Definition: GNEViewNet.h:270
virtual ~GNEViewNet()
destructor
Definition: GNEViewNet.cpp:252
GNEInspector * myInspector
Definition: GNEViewNet.h:301
A point in 2D or 3D with translation and scaling methods.
Definition: Position.h:46
FXToolBar * myToolbar
a reference to the toolbar in myParent
Definition: GNEViewNet.h:287
long onCmdSplitEdgeBidi(FXObject *, FXSelector, void *)
split edge at cursor position
Definition: GNEViewNet.cpp:849
bool autoSelectNodes()
Definition: GNEViewNet.h:187
void removeCurrentPoly()
remove the currently edited polygon
Definition: GNEViewNet.cpp:994
GNEJunction * myJunctionToMove
Definition: GNEViewNet.h:255
GNELane * getLaneAtCurserPosition(Position &pos)
try to retrieve a lane at the given position
Definition: GNEViewNet.cpp:796
Position mySelCorner1
Definition: GNEViewNet.h:280
EditMode
Definition: GNEViewNet.h:46
void doInit()
called after some features are already initialized
Definition: GNEViewNet.cpp:256
FXMenuCheck * myAutoCreateOppositeEdge
Definition: GNEViewNet.h:246
bool mergeJunctions(GNEJunction *moved)
try to merge moved junction with another junction in that spot return true if merging did take place ...
A road/street connecting two junctions (netedit-version)
Definition: GNEEdge.h:61
GNESelector * mySelector
Definition: GNEViewNet.h:304
FXMenuCheck * myExtendToEdgeNodes
Definition: GNEViewNet.h:231
GUIVisualizationSettings * myVisualizationSettings
Position myMoveSrc
position from which to move edge geometry
Definition: GNEViewNet.h:264
long onCmdReverseEdge(FXObject *, FXSelector, void *)
reverse edge
Definition: GNEViewNet.cpp:859
GNETLSEditor * getTLSEditor()
Definition: GNEViewNet.h:203
int doPaintGL(int mode, const Boundary &bound)
Definition: GNEViewNet.cpp:316
GNEJunction * myCreateEdgeSource
Definition: GNEViewNet.h:240
void updateModeSpecificControls()
updates mode specific controls
void setStatusBarText(const std::string &text)
Definition: GNEViewNet.cpp:310
#define SUMOReal
Definition: config.h:213
virtual void buildViewToolBars(GUIGlChildWindow &)
builds the view toolbars
Definition: GNEViewNet.cpp:260
long onCmdStraightenEdges(FXObject *, FXSelector, void *)
makes selected edges straight
Definition: GNEViewNet.cpp:899
GNEEdge * getEdgeAtCursorPosition(Position &pos)
try to retrieve an edge at the given position
Definition: GNEViewNet.cpp:772
long onCmdNodeReplace(FXObject *, FXSelector, void *)
replace node by geometry
void hotkeyDel()
Definition: GNEViewNet.cpp:675
long onCmdAddReversedEdge(FXObject *, FXSelector, void *)
add reversed edge
Definition: GNEViewNet.cpp:869
bool myAmInRectSelect
Definition: GNEViewNet.h:278
GNENet * myNet
Definition: GNEViewNet.h:222
void hotkeyEnter()
Definition: GNEViewNet.cpp:688
long onLeftBtnRelease(FXObject *, FXSelector, void *)
Definition: GNEViewNet.cpp:595
void deleteSelectedEdges()
delete all currently selected edges
GNEUndoList * myUndoList
a reference to the undolist maintained in the application
Definition: GNEViewNet.h:298
EditMode myEditMode
Definition: GNEViewNet.h:225
GNEPoly * myPolyToMove
the poly of which geometry is being moved
Definition: GNEViewNet.h:261