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-2015 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 
156  long onCmdVisualizeHeight(FXObject*, FXSelector, void*);
157 
161  void setEditModeFromHotkey(FXushort selid);
162 
163  // abort current edition operation
164  void abortOperation(bool clearSelection = true);
165 
166  // handle del keypress
167  void hotkeyDel();
168 
169  // handle enter keypress
170  void hotkeyEnter();
171 
172  // store the position where a popup-menu was requested
173  void markPopupPosition();
174 
175  // @brief get the net object
177  return myNet;
178  };
179 
180  void setStatusBarText(const std::string& text);
181 
182  /* @brief whether inspection, selection and inversion should apply to edges
183  * or to lanes */
184  bool selectEdges() {
185  return mySelectEdges->getCheck() != 0;
186  }
187 
188  /* @brief whether to autoselect nodes
189  * or to lanes */
191  return myExtendToEdgeNodes->getCheck() != 0;
192  }
193 
195  return mySelector;
196  }
197 
198 
199  void setSelectionScaling(SUMOReal selectionScale) {
200  myVisualizationSettings->selectionScale = selectionScale;
201  }
202 
204  void updateControls();
205 
207  return myTLSEditor;
208  }
209 
210  bool changeAllPhases() const {
211  return myChangeAllPhases->getCheck() != FALSE;
212  }
213 
214 protected:
215  int doPaintGL(int mode, const Boundary& bound);
216 
218  void doInit();
219 
222 
223 private:
224  // we are not responsible for deletion
226 
227  // the current edit mode
229 
230  // the previous edit mode used for toggling
232 
233  FXMenuCheck* mySelectEdges;
234  FXMenuCheck* myExtendToEdgeNodes;
235  FXMenuCheck* myChangeAllPhases;
236 
238  // @{
239  /* @brief source junction for new edge
240  * 0 if no edge source is selected
241  * an existing (or newly created) junction otherwise
242  */
244 
245  /* @brief whether the endpoint for a created edge should be set as the new
246  * source
247  */
248  FXMenuCheck* myChainCreateEdge;
250  // @}
251 
253  // @{
254  /* @brief the Junction to be moved
255  * 0 if nothing is grabbed
256  * otherwise the junction being moved
257  */
259 
262 
265 
268 
271 
273  FXMenuCheck* myWarnAboutMerge;
274  // @}
275 
277  // @{
278  FXMenuCheck* myVisualizeHeight;
279  // @}
280  //
282  // @{
283  // @brief whether we have started rectangle-selection
285  // @brief corner of the rectangle-selection
288  // @}
289 
290  //@name toolbar related stuff
292  FXToolBar* myToolbar;
295  FXComboBox* myEditModesCombo;
296 
300 
302 
305 
306  // @brief the panel for GNE_MODE_INSPECT
308 
309  // @brief the panel for GNE_MODE_SELECT
311 
312  // @brief the panel for GNE_MODE_CONNECT
314 
315  // @brief the panel for GNE_MODE_TLS
317 
319 
321 
322 private:
323  // set edit mode
324  void setEditMode(EditMode mode);
325 
327  void buildEditModeControls();
328 
331 
334 
336  void deleteSelectedEdges();
337 
340  bool mergeJunctions(GNEJunction* moved);
341 
344 
347 
350 
352  std::set<GNEEdge*> getEdgesAtCursorPosition(Position& pos);
353 
355  void removeCurrentPoly();
356 
357 };
358 
359 
360 #endif
361 
362 /****************************************************************************/
363 
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:313
FXMenuCheck * mySelectEdges
Definition: GNEViewNet.h:233
bool selectEdges()
Definition: GNEViewNet.h:184
GNEJunction * getJunctionAtCursorPosition(Position &pos)
try to retrieve a junction at the given position
Definition: GNEViewNet.cpp:749
Position myPopupSpot
Definition: GNEViewNet.h:318
long onCmdVisualizeHeight(FXObject *, FXSelector, void *)
switch color scheme
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:210
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:299
long onMouseMove(FXObject *, FXSelector, void *)
Definition: GNEViewNet.cpp:632
GNEViewNet()
FOX needs this.
Definition: GNEViewNet.h:221
FXMenuCheck * myChainCreateEdge
Definition: GNEViewNet.h:248
long onCmdSplitEdge(FXObject *, FXSelector, void *)
split edge at cursor position
Definition: GNEViewNet.cpp:839
FXMenuCheck * myChangeAllPhases
Definition: GNEViewNet.h:235
void setEditMode(EditMode mode)
Position mySelCorner2
Definition: GNEViewNet.h:287
void setSelectionScaling(SUMOReal selectionScale)
Definition: GNEViewNet.h:199
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:295
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:176
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:231
GNEEdge * myEdgeToMove
the edge of which geometry is being moved
Definition: GNEViewNet.h:261
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:316
bool myMoveSelection
whether a selection is being moved
Definition: GNEViewNet.h:270
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:194
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:320
SUMOReal selectionScale
the current selection scaling in NETEDIT (temporary)
FXMenuCheck * myWarnAboutMerge
whether we should warn about merging junctions
Definition: GNEViewNet.h:273
virtual ~GNEViewNet()
destructor
Definition: GNEViewNet.cpp:252
GNEInspector * myInspector
Definition: GNEViewNet.h:307
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:293
long onCmdSplitEdgeBidi(FXObject *, FXSelector, void *)
split edge at cursor position
Definition: GNEViewNet.cpp:849
bool autoSelectNodes()
Definition: GNEViewNet.h:190
void removeCurrentPoly()
remove the currently edited polygon
Definition: GNEViewNet.cpp:994
GNEJunction * myJunctionToMove
Definition: GNEViewNet.h:258
GNELane * getLaneAtCurserPosition(Position &pos)
try to retrieve a lane at the given position
Definition: GNEViewNet.cpp:796
Position mySelCorner1
Definition: GNEViewNet.h:286
EditMode
Definition: GNEViewNet.h:46
void doInit()
called after some features are already initialized
Definition: GNEViewNet.cpp:256
FXMenuCheck * myAutoCreateOppositeEdge
Definition: GNEViewNet.h:249
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:310
FXMenuCheck * myExtendToEdgeNodes
Definition: GNEViewNet.h:234
GUIVisualizationSettings * myVisualizationSettings
Position myMoveSrc
position from which to move edge geometry
Definition: GNEViewNet.h:267
long onCmdReverseEdge(FXObject *, FXSelector, void *)
reverse edge
Definition: GNEViewNet.cpp:859
GNETLSEditor * getTLSEditor()
Definition: GNEViewNet.h:206
int doPaintGL(int mode, const Boundary &bound)
Definition: GNEViewNet.cpp:316
GNEJunction * myCreateEdgeSource
Definition: GNEViewNet.h:243
FXMenuCheck * myVisualizeHeight
Definition: GNEViewNet.h:278
void updateModeSpecificControls()
updates mode specific controls
void setStatusBarText(const std::string &text)
Definition: GNEViewNet.cpp:310
#define SUMOReal
Definition: config.h:214
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:284
GNENet * myNet
Definition: GNEViewNet.h:225
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:304
EditMode myEditMode
Definition: GNEViewNet.h:228
GNEPoly * myPolyToMove
the poly of which geometry is being moved
Definition: GNEViewNet.h:264