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 {
65 };
66 
67 // ===========================================================================
68 // class declarations
69 // ===========================================================================
70 class GNENet;
71 class GNEJunction;
72 class GNEEdge;
73 class GNELane;
74 class GNEViewParent;
75 class GNEUndoList;
76 class GNEAdditional;
77 class GNEPoly;
78 
79 // ===========================================================================
80 // class definitions
81 // ===========================================================================
88  FXDECLARE(GNEViewNet)
89 
90 public:
91  /* @brief constructor
92  * @param[in] tmpParent temporal FXFrame parent so that we can add items to view area in the desired order
93  * @param[in] actualParent FXFrame parent of GNEViewNet
94  * @param[in] app main windows
95  * @param[in] viewParent viewParent of this viewNet
96  * @param[in] net traffic net
97  * @param[in] undoList pointer to UndoList modul
98  * @param[in] glVis a reference to GLVisuals
99  * @param[in] share a reference to FXCanvas
100  * @param[in] toolbar A reference to the parents toolbar
101  */
102  GNEViewNet(FXComposite* tmpParent, FXComposite* actualParent, GUIMainWindow& app,
103  GNEViewParent* viewParent, GNENet* net, GNEUndoList* undoList,
104  FXGLVisual* glVis, FXGLCanvas* share, FXToolBar* toolBar);
105 
107  virtual ~GNEViewNet();
108 
110  virtual void buildViewToolBars(GUIGlChildWindow&);
111 
113  bool setColorScheme(const std::string& name);
114 
118  long onLeftBtnPress(FXObject*, FXSelector, void*);
119 
121  long onLeftBtnRelease(FXObject*, FXSelector, void*);
122 
124  long onDoubleClicked(FXObject*, FXSelector, void*);
125 
127  long onMouseMove(FXObject*, FXSelector, void*);
129 
131  long onCmdChangeMode(FXObject*, FXSelector, void*);
132 
134  long onCmdSplitEdge(FXObject*, FXSelector, void*);
135 
137  long onCmdSplitEdgeBidi(FXObject*, FXSelector, void*);
138 
140  long onCmdReverseEdge(FXObject*, FXSelector, void*);
141 
143  long onCmdAddReversedEdge(FXObject*, FXSelector, void*);
144 
146  long onCmdSetEdgeEndpoint(FXObject*, FXSelector, void*);
147 
149  long onCmdResetEdgeEndpoint(FXObject*, FXSelector, void*);
150 
152  long onCmdStraightenEdges(FXObject*, FXSelector, void*);
153 
155  long onCmdSimplifyShape(FXObject*, FXSelector, void*);
156 
158  long onCmdDeleteGeometry(FXObject*, FXSelector, void*);
159 
161  long onCmdDuplicateLane(FXObject*, FXSelector, void*);
162 
164  long onCmdNodeShape(FXObject*, FXSelector, void*);
165 
167  long onCmdNodeReplace(FXObject*, FXSelector, void*);
168 
171  void setEditModeFromHotkey(FXushort selid);
172 
174  void abortOperation(bool clearSelection = true);
175 
177  void hotkeyDel();
178 
180  void hotkeyEnter();
181 
183  void markPopupPosition();
184 
186  GNEViewParent* getViewParent() const;
187 
189  GNENet* getNet() const;
190 
192  GNEUndoList* getUndoList() const;
193 
196 
198  bool showLockIcon() const;
199 
201  void setStatusBarText(const std::string& text);
202 
204  bool selectEdges();
205 
207  bool autoSelectNodes();
208 
210  void setSelectionScaling(SUMOReal selectionScale);
211 
213  void updateControls();
214 
216  bool changeAllPhases() const;
217 
218 protected:
221 
223  int doPaintGL(int mode, const Boundary& bound);
224 
226  void doInit();
227 
228 private:
231 
234 
237 
240 
242  FXMenuCheck* mySelectEdges;
243 
245  FXMenuCheck* myExtendToEdgeNodes;
246 
248  FXMenuCheck* myChangeAllPhases;
249 
251  // @{
254 
256  FXMenuCheck* myChainCreateEdge;
258  // @}
259 
261  // @{
264 
267 
270 
273 
276 
279 
282 
284  FXMenuCheck* myWarnAboutMerge;
285  // @}
286 
288  // @{
291 
294 
297  // @}
298 
302  FXToolBar* myToolbar;
303 
305  FXComboBox* myEditModesCombo;
306 
311 
314 
317 
320 
321 private:
323  void setEditMode(EditMode mode);
324 
326  void buildEditModeControls();
327 
330 
333 
335  void deleteSelectedEdges();
336 
338  bool mergeJunctions(GNEJunction* moved);
339 
342 
345 
348 
350  std::set<GNEEdge*> getEdgesAtCursorPosition(Position& pos);
351 
353  void removeCurrentPoly();
354 
356  GNEViewNet(const GNEViewNet&);
357 
360 };
361 
362 
363 #endif
364 
365 /****************************************************************************/
366 
long onCmdResetEdgeEndpoint(FXObject *, FXSelector, void *)
restore geometry endpoint to node position
long onCmdDeleteGeometry(FXObject *, FXSelector, void *)
delete the closes geometry point
GNEViewParent * myViewParent
view parent
Definition: GNEViewNet.h:230
EditMode getCurrentEditMode() const
get the current edit mode
Definition: GNEViewNet.cpp:857
bool showLockIcon() const
check if lock icon should be visible
Definition: GNEViewNet.cpp:863
FXMenuCheck * mySelectEdges
menu check to select only edges
Definition: GNEViewNet.h:242
bool selectEdges()
whether inspection, selection and inversion should apply to edges or to lanes
Definition: GNEViewNet.cpp:307
GNEJunction * getJunctionAtCursorPosition(Position &pos)
try to retrieve a junction at the given position
Definition: GNEViewNet.cpp:869
Position myPopupSpot
Poput spot.
Definition: GNEViewNet.h:316
void abortOperation(bool clearSelection=true)
abort current edition operation
Definition: GNEViewNet.cpp:740
void deleteSelectedJunctions()
delete all currently selected junctions
bool setColorScheme(const std::string &name)
set color schieme
Definition: GNEViewNet.cpp:285
mode for moving things
Definition: GNEViewNet.h:52
bool changeAllPhases() const
change all phases
Definition: GNEViewNet.cpp:325
void markPopupPosition()
store the position where a popup-menu was requested
Definition: GNEViewNet.cpp:833
long onCmdDuplicateLane(FXObject *, FXSelector, void *)
duplicate selected lane
StringBijection< EditMode > myEditModeNames
since we cannot switch on strings we map the mode names to an enum
Definition: GNEViewNet.h:308
long onMouseMove(FXObject *, FXSelector, void *)
called when user moves mouse
Definition: GNEViewNet.cpp:708
GNEViewNet()
FOX needs this.
Definition: GNEViewNet.h:220
FXMenuCheck * myChainCreateEdge
whether the endpoint for a created edge should be set as the new source
Definition: GNEViewNet.h:256
mode for deleting things
Definition: GNEViewNet.h:54
long onCmdSplitEdge(FXObject *, FXSelector, void *)
split edge at cursor position
Definition: GNEViewNet.cpp:959
FXMenuCheck * myChangeAllPhases
menu check to set change all phases
Definition: GNEViewNet.h:248
void setEditMode(EditMode mode)
set edit mode
Position mySelCorner2
second corner of the rectangle-selection
Definition: GNEViewNet.h:296
mode for editing tls
Definition: GNEViewNet.h:62
void setSelectionScaling(SUMOReal selectionScale)
set selection scaling
Definition: GNEViewNet.cpp:319
long onCmdNodeShape(FXObject *, FXSelector, void *)
input custom node shape
A NBNetBuilder extended by visualisation and editing capabilities.
Definition: GNENet.h:86
FXComboBox * myEditModesCombo
combo box for selecting the edit mode
Definition: GNEViewNet.h:305
This lane is powered by an underlying GNEEdge and basically knows how to draw itself.
Definition: GNELane.h:54
void setEditModeFromHotkey(FXushort selid)
sets edit mode (from hotkey)
Definition: GNEViewNet.cpp:798
long onCmdSetEdgeEndpoint(FXObject *, FXSelector, void *)
set non-default geometry endpoint
Definition: GNEViewNet.cpp:999
GNEViewParent * getViewParent() const
get the net object
Definition: GNEViewNet.cpp:839
void updateControls()
update control contents after undo/redo or recompute
EditMode myPreviousEditMode
the previous edit mode used for toggling
Definition: GNEViewNet.h:239
GNEViewNet & operator=(const GNEViewNet &)
Invalidated assignment operator.
GNEEdge * myEdgeToMove
the edge of which geometry is being moved
Definition: GNEViewNet.h:266
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:791
A single child window which contains a view of the simulation area.
Definition: GNEViewParent.h:69
GNEUndoList * getUndoList() const
get the undoList object
Definition: GNEViewNet.cpp:851
bool myMoveSelection
whether a selection is being moved
Definition: GNEViewNet.h:281
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:933
long onLeftBtnPress(FXObject *, FXSelector, void *)
overloaded handlers
Definition: GNEViewNet.cpp:390
long onCmdSimplifyShape(FXObject *, FXSelector, void *)
simply shape of current polygon
GNEPoly * myCurrentPoly
current polygon
Definition: GNEViewNet.h:319
FXMenuCheck * myWarnAboutMerge
whether we should warn about merging junctions
Definition: GNEViewNet.h:284
mode for inspecting object attributes
Definition: GNEViewNet.h:56
GNEAdditional * myAdditionalToMove
the stoppingPlace element which shape is being moved
Definition: GNEViewNet.h:272
virtual ~GNEViewNet()
destructor
Definition: GNEViewNet.cpp:243
A point in 2D or 3D with translation and scaling methods.
Definition: Position.h:46
FXToolBar * myToolbar
Definition: GNEViewNet.h:302
long onCmdSplitEdgeBidi(FXObject *, FXSelector, void *)
split edge at cursor position
Definition: GNEViewNet.cpp:969
bool autoSelectNodes()
whether to autoselect nodes or to lanes
Definition: GNEViewNet.cpp:313
Position myAdditionalFirstPosition
variable to save the firstposition of the additional before move
Definition: GNEViewNet.h:275
mode for selecting objects
Definition: GNEViewNet.h:58
void removeCurrentPoly()
remove the currently edited polygon
GNEJunction * myJunctionToMove
the Junction to be moved.
Definition: GNEViewNet.h:263
GNELane * getLaneAtCurserPosition(Position &pos)
try to retrieve a lane at the given position
Definition: GNEViewNet.cpp:916
Position mySelCorner1
firstcorner of the rectangle-selection
Definition: GNEViewNet.h:293
EditMode
Definition: GNEViewNet.h:46
void doInit()
called after some features are already initialized
Definition: GNEViewNet.cpp:247
placeholder mode
Definition: GNEViewNet.h:48
FXMenuCheck * myAutoCreateOppositeEdge
Definition: GNEViewNet.h:257
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:54
FXMenuCheck * myExtendToEdgeNodes
menu check to extend to edge nodes
Definition: GNEViewNet.h:245
Position myMoveSrc
position from which to move edge geometry
Definition: GNEViewNet.h:278
An Element which don&#39;t belongs to GNENet but has influency in the simulation.
Definition: GNEAdditional.h:63
long onCmdReverseEdge(FXObject *, FXSelector, void *)
reverse edge
Definition: GNEViewNet.cpp:979
int doPaintGL(int mode, const Boundary &bound)
do paintGL
Definition: GNEViewNet.cpp:331
GNEJunction * myCreateEdgeSource
source junction for new edge 0 if no edge source is selected an existing (or newly created) junction ...
Definition: GNEViewNet.h:253
GNENet * getNet() const
get the net object
Definition: GNEViewNet.cpp:845
void updateModeSpecificControls()
updates mode specific controls
void setStatusBarText(const std::string &text)
set staturBar text
Definition: GNEViewNet.cpp:301
#define SUMOReal
Definition: config.h:213
Mode for editing additionals.
Definition: GNEViewNet.h:64
StringBijection< EditMode > myEditAdditionalModeNames
Definition: GNEViewNet.h:309
virtual void buildViewToolBars(GUIGlChildWindow &)
builds the view toolbars
Definition: GNEViewNet.cpp:251
long onCmdStraightenEdges(FXObject *, FXSelector, void *)
makes selected edges straight
mode for connecting lanes
Definition: GNEViewNet.h:60
mode for creating new edges
Definition: GNEViewNet.h:50
long onDoubleClicked(FXObject *, FXSelector, void *)
called when user press mouse&#39;s left button two times
Definition: GNEViewNet.cpp:685
GNEEdge * getEdgeAtCursorPosition(Position &pos)
try to retrieve an edge at the given position
Definition: GNEViewNet.cpp:892
long onCmdNodeReplace(FXObject *, FXSelector, void *)
replace node by geometry
void hotkeyDel()
handle del keypress
Definition: GNEViewNet.cpp:762
long onCmdAddReversedEdge(FXObject *, FXSelector, void *)
add reversed edge
Definition: GNEViewNet.cpp:989
bool myAmInRectSelect
whether we have started rectangle-selection
Definition: GNEViewNet.h:290
GNENet * myNet
we are not responsible for deletion
Definition: GNEViewNet.h:233
void hotkeyEnter()
handle enter keypress
Definition: GNEViewNet.cpp:775
long onLeftBtnRelease(FXObject *, FXSelector, void *)
called when user releases mouse&#39;s left button
Definition: GNEViewNet.cpp:644
void deleteSelectedEdges()
delete all currently selected edges
GNEUndoList * myUndoList
a reference to the undolist maintained in the application
Definition: GNEViewNet.h:313
EditMode myEditMode
the current edit mode
Definition: GNEViewNet.h:236
GNEPoly * myPolyToMove
the poly of which geometry is being moved
Definition: GNEViewNet.h:269