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-2017 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>
43 
44 // ===========================================================================
45 // enum
46 // ===========================================================================
47 enum EditMode {
68 };
69 
70 // ===========================================================================
71 // class declarations
72 // ===========================================================================
73 class GNENet;
74 class GNEJunction;
75 class GNEEdge;
76 class GNELane;
77 class GNEViewParent;
78 class GNEUndoList;
79 class GNEAdditional;
80 class GNEPoly;
81 class GNEPOI;
82 
83 // ===========================================================================
84 // class definitions
85 // ===========================================================================
92  FXDECLARE(GNEViewNet)
93 
94 public:
95  /* @brief constructor
96  * @param[in] tmpParent temporal FXFrame parent so that we can add items to view area in the desired order
97  * @param[in] actualParent FXFrame parent of GNEViewNet
98  * @param[in] app main windows
99  * @param[in] viewParent viewParent of this viewNet
100  * @param[in] net traffic net
101  * @param[in] undoList pointer to UndoList modul
102  * @param[in] glVis a reference to GLVisuals
103  * @param[in] share a reference to FXCanvas
104  * @param[in] toolbar A reference to the parents toolbar
105  */
106  GNEViewNet(FXComposite* tmpParent, FXComposite* actualParent, GUIMainWindow& app,
107  GNEViewParent* viewParent, GNENet* net, GNEUndoList* undoList,
108  FXGLVisual* glVis, FXGLCanvas* share, FXToolBar* toolBar);
109 
111  virtual ~GNEViewNet();
112 
114  virtual void buildViewToolBars(GUIGlChildWindow&);
115 
117  bool setColorScheme(const std::string& name);
118 
122  long onLeftBtnPress(FXObject*, FXSelector, void*);
123 
125  long onLeftBtnRelease(FXObject*, FXSelector, void*);
126 
128  long onDoubleClicked(FXObject*, FXSelector, void*);
129 
131  long onMouseMove(FXObject*, FXSelector, void*);
133 
137  long onCmdSetModeCreateEdge(FXObject*, FXSelector, void*);
138 
140  long onCmdSetModeMove(FXObject*, FXSelector, void*);
141 
143  long onCmdSetModeDelete(FXObject*, FXSelector, void*);
144 
146  long onCmdSetModeInspect(FXObject*, FXSelector, void*);
147 
149  long onCmdSetModeSelect(FXObject*, FXSelector, void*);
150 
152  long onCmdSetModeConnect(FXObject*, FXSelector, void*);
153 
155  long onCmdSetModeTLS(FXObject*, FXSelector, void*);
156 
158  long onCmdSetModeAdditional(FXObject*, FXSelector, void*);
159 
161  long onCmdSetModeCrossing(FXObject*, FXSelector, void*);
163 
165  long onCmdSplitEdge(FXObject*, FXSelector, void*);
166 
168  long onCmdSplitEdgeBidi(FXObject*, FXSelector, void*);
169 
171  long onCmdReverseEdge(FXObject*, FXSelector, void*);
172 
174  long onCmdAddReversedEdge(FXObject*, FXSelector, void*);
175 
177  long onCmdSetEdgeEndpoint(FXObject*, FXSelector, void*);
178 
180  long onCmdResetEdgeEndpoint(FXObject*, FXSelector, void*);
181 
183  long onCmdStraightenEdges(FXObject*, FXSelector, void*);
184 
186  long onCmdSimplifyShape(FXObject*, FXSelector, void*);
187 
189  long onCmdDeleteGeometry(FXObject*, FXSelector, void*);
190 
192  long onCmdDuplicateLane(FXObject*, FXSelector, void*);
193 
195  long onCmdRestrictLaneSidewalk(FXObject*, FXSelector typeOfTransformation, void*);
196 
198  long onCmdRestrictLaneBikelane(FXObject*, FXSelector typeOfTransformation, void*);
199 
201  long onCmdRestrictLaneBuslane(FXObject*, FXSelector typeOfTransformation, void*);
202 
204  long onCmdRevertRestriction(FXObject*, FXSelector, void*);
205 
207  long onCmdAddRestrictedLaneSidewalk(FXObject*, FXSelector typeOfTransformation, void*);
208 
210  long onCmdAddRestrictedLaneBikelane(FXObject*, FXSelector typeOfTransformation, void*);
211 
213  long onCmdAddRestrictedLaneBuslane(FXObject*, FXSelector typeOfTransformation, void*);
214 
216  long onCmdRemoveRestrictedLaneSidewalk(FXObject*, FXSelector typeOfTransformation, void*);
217 
219  long onCmdRemoveRestrictedLaneBikelane(FXObject*, FXSelector typeOfTransformation, void*);
220 
222  long onCmdRemoveRestrictedLaneBuslane(FXObject*, FXSelector typeOfTransformation, void*);
223 
225  long onCmdNodeShape(FXObject*, FXSelector, void*);
226 
228  long onCmdNodeReplace(FXObject*, FXSelector, void*);
229 
231  long onCmdToogleShowConnection(FXObject*, FXSelector, void*);
232 
234  long onCmdToogleShowBubbles(FXObject*, FXSelector, void*);
235 
238  void setEditModeFromHotkey(FXushort selid);
239 
241  void abortOperation(bool clearSelection = true);
242 
244  void hotkeyDel();
245 
247  void hotkeyEnter();
248 
250  void markPopupPosition();
251 
253  GNEViewParent* getViewParent() const;
254 
256  GNENet* getNet() const;
257 
259  GNEUndoList* getUndoList() const;
260 
263 
265  bool showLockIcon() const;
266 
268  void setStatusBarText(const std::string& text);
269 
271  bool selectEdges();
272 
274  bool showConnections();
275 
277  bool autoSelectNodes();
278 
280  void setSelectionScaling(SUMOReal selectionScale);
281 
283  void updateControls();
284 
286  bool changeAllPhases() const;
287 
289  bool showJunctionAsBubbles() const;
290 
291 protected:
294 
296  int doPaintGL(int mode, const Boundary& bound);
297 
299  void doInit();
300 
301 private:
304 
307 
310 
313 
315  FXMenuCheck* mySelectEdges;
316 
318  FXMenuCheck* myShowConnections;
319 
322 
324  FXMenuCheck* myExtendToEdgeNodes;
325 
327  FXMenuCheck* myChangeAllPhases;
328 
330  // @{
333 
335  FXMenuCheck* myChainCreateEdge;
337  // @}
338 
340  // @{
343 
346 
349 
352 
355 
358 
361 
364 
367 
369  FXMenuCheck* myWarnAboutMerge;
370 
373  // @}
374 
376  // @{
379 
382 
385  // @}
386 
390  FXToolBar* myToolbar;
391 
396 
399 
402 
405 
408 
411 
414 
417 
421 
426 
430 
433 
436 
439 
444 
445 private:
447  void setEditMode(EditMode mode);
448 
450  void buildEditModeControls();
451 
454 
457 
459  void deleteSelectedEdges();
460 
462  bool mergeJunctions(GNEJunction* moved);
463 
466 
469 
472 
474  std::set<GNEEdge*> getEdgesAtCursorPosition(Position& pos);
475 
477  void removeCurrentPoly();
478 
480  bool restrictLane(SUMOVehicleClass vclass);
481 
483  bool addRestrictedLane(SUMOVehicleClass vclass);
484 
487 
489  GNEViewNet(const GNEViewNet&);
490 
493 };
494 
495 
496 #endif
497 
498 /****************************************************************************/
499 
long onCmdAddRestrictedLaneSidewalk(FXObject *, FXSelector typeOfTransformation, void *)
Add restricted lane for pedestrians.
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:303
EditMode getCurrentEditMode() const
get the current edit mode
long onCmdRestrictLaneBikelane(FXObject *, FXSelector typeOfTransformation, void *)
restrict lane to bikes
bool showLockIcon() const
check if lock icon should be visible
FXMenuCheck * mySelectEdges
menu check to select only edges
Definition: GNEViewNet.h:315
bool selectEdges()
whether inspection, selection and inversion should apply to edges or to lanes
Definition: GNEViewNet.cpp:351
GNEJunction * getJunctionAtCursorPosition(Position &pos)
try to retrieve a junction at the given position
Position myPopupSpot
Poput spot.
Definition: GNEViewNet.h:435
void abortOperation(bool clearSelection=true)
abort current edition operation
Definition: GNEViewNet.cpp:889
void deleteSelectedJunctions()
delete all currently selected junctions
bool setColorScheme(const std::string &name)
set color schieme
Definition: GNEViewNet.cpp:329
long onCmdSetModeAdditional(FXObject *, FXSelector, void *)
called when user press the button for additional mode
mode for moving things
Definition: GNEViewNet.h:53
bool changeAllPhases() const
change all phases
Definition: GNEViewNet.cpp:381
bool restrictLane(SUMOVehicleClass vclass)
restrict lane
void markPopupPosition()
store the position where a popup-menu was requested
Definition: GNEViewNet.cpp:977
long onCmdDuplicateLane(FXObject *, FXSelector, void *)
duplicate selected lane
SUMOVehicleClass
Definition of vehicle classes to differ between different lane usage and authority types...
StringBijection< EditMode > myEditModeNames
since we cannot switch on strings we map the mode names to an enum
Definition: GNEViewNet.h:425
long onMouseMove(FXObject *, FXSelector, void *)
called when user moves mouse
Definition: GNEViewNet.cpp:836
GNEViewNet()
FOX needs this.
Definition: GNEViewNet.h:293
long onCmdSetModeSelect(FXObject *, FXSelector, void *)
called when user press the button for select mode
int myTestingHeight
Definition: GNEViewNet.h:443
FXMenuCheck * myChainCreateEdge
whether the endpoint for a created edge should be set as the new source
Definition: GNEViewNet.h:335
FXMenuCheck * myShowConnections
menu check to show connections
Definition: GNEViewNet.h:318
mode for deleting things
Definition: GNEViewNet.h:55
Definition: GNEPOI.h:51
long onCmdSplitEdge(FXObject *, FXSelector, void *)
split edge at cursor position
FXMenuCheck * myChangeAllPhases
menu check to set change all phases
Definition: GNEViewNet.h:327
void setEditMode(EditMode mode)
set edit mode
MFXCheckableButton * myEditModeSelect
chekable button for edit mode select
Definition: GNEViewNet.h:407
Position mySelCorner2
second corner of the rectangle-selection
Definition: GNEViewNet.h:384
mode for editing tls
Definition: GNEViewNet.h:63
void setSelectionScaling(SUMOReal selectionScale)
set selection scaling
Definition: GNEViewNet.cpp:375
long onCmdNodeShape(FXObject *, FXSelector, void *)
input custom node shape
MFXCheckableButton * myEditModeMove
chekable button for edit mode move
Definition: GNEViewNet.h:398
MFXCheckableButton * myEditModeDelete
chekable button for edit mode delete
Definition: GNEViewNet.h:401
A NBNetBuilder extended by visualisation and editing capabilities.
Definition: GNENet.h:87
This lane is powered by an underlying GNEEdge and basically knows how to draw itself.
Definition: GNELane.h:54
GNEPOI * myPoiToMove
the poi which is being moved
Definition: GNEViewNet.h:351
void setEditModeFromHotkey(FXushort selid)
sets edit mode (from hotkey)
Definition: GNEViewNet.cpp:940
long onCmdSetEdgeEndpoint(FXObject *, FXSelector, void *)
set non-default geometry endpoint
GNEViewParent * getViewParent() const
get the net object
Definition: GNEViewNet.cpp:983
void updateControls()
update control contents after undo/redo or recompute
EditMode myPreviousEditMode
the previous edit mode used for toggling
Definition: GNEViewNet.h:312
GNEViewNet & operator=(const GNEViewNet &)
Invalidated assignment operator.
FXMenuCheck * myShowBubbleOverJunction
show connection as buuble in "Move" mode.
Definition: GNEViewNet.h:372
GNEEdge * myEdgeToMove
the edge of which geometry is being moved
Definition: GNEViewNet.h:345
A class that stores a 2D geometrical boundary.
Definition: Boundary.h:48
bool myShowConnectionActivated
whether show connections has been activated once
Definition: GNEViewNet.h:321
A single child window which contains a view of the simulation area.
Definition: GNEViewParent.h:72
GNEUndoList * getUndoList() const
get the undoList object
Definition: GNEViewNet.cpp:995
bool myMoveSelection
whether a selection is being moved
Definition: GNEViewNet.h:366
long onCmdSetModeCrossing(FXObject *, FXSelector, void *)
called when user press the button for crossing mode
Position myOldAdditionalPosition
variable for saving additional position before moving
Definition: GNEViewNet.h:360
void buildEditModeControls()
adds controls for setting the edit mode
std::set< GNEEdge * > getEdgesAtCursorPosition(Position &pos)
try to retrieve multiple edges at the given position
long onLeftBtnPress(FXObject *, FXSelector, void *)
Definition: GNEViewNet.cpp:475
long onCmdSimplifyShape(FXObject *, FXSelector, void *)
simply shape of current polygon
GNEPoly * myCurrentPoly
current polygon
Definition: GNEViewNet.h:438
long onCmdRemoveRestrictedLaneBuslane(FXObject *, FXSelector typeOfTransformation, void *)
remove restricted lane for bus
FXMenuCheck * myWarnAboutMerge
whether we should warn about merging junctions
Definition: GNEViewNet.h:369
mode for inspecting object attributes
Definition: GNEViewNet.h:57
GNEAdditional * myAdditionalToMove
the stoppingPlace element which shape is being moved
Definition: GNEViewNet.h:354
virtual ~GNEViewNet()
destructor
Definition: GNEViewNet.cpp:287
long onCmdSetModeMove(FXObject *, FXSelector, void *)
called when user press the button for move mode
A point in 2D or 3D with translation and scaling methods.
Definition: Position.h:46
FXToolBar * myToolbar
Definition: GNEViewNet.h:390
long onCmdToogleShowConnection(FXObject *, FXSelector, void *)
toogle show connections
MFXCheckableButton * myEditModeCreateEdge
Definition: GNEViewNet.h:395
long onCmdRevertRestriction(FXObject *, FXSelector, void *)
revert transformation
bool removeRestrictedLane(SUMOVehicleClass vclass)
remove restricted lane
long onCmdSplitEdgeBidi(FXObject *, FXSelector, void *)
split edge at cursor position
bool autoSelectNodes()
whether to autoselect nodes or to lanes
Definition: GNEViewNet.cpp:369
MFXCheckableButton * myEditModeTrafficLight
chekable button for edit mode traffic light
Definition: GNEViewNet.h:413
long onCmdRemoveRestrictedLaneBikelane(FXObject *, FXSelector typeOfTransformation, void *)
remove restricted lane for bikes
mode for selecting objects
Definition: GNEViewNet.h:59
void removeCurrentPoly()
remove the currently edited polygon
GNEJunction * myJunctionToMove
the Junction to be moved.
Definition: GNEViewNet.h:342
MFXCheckableButton * myEditModeAdditional
chekable button for edit mode additional
Definition: GNEViewNet.h:416
GNELane * getLaneAtCurserPosition(Position &pos)
try to retrieve a lane at the given position
int myTestingWidth
Definition: GNEViewNet.h:442
Position mySelCorner1
firstcorner of the rectangle-selection
Definition: GNEViewNet.h:381
Position myAdditionalMovingReference
variable for calculating moving offset of additionals
Definition: GNEViewNet.h:357
long onCmdRestrictLaneBuslane(FXObject *, FXSelector typeOfTransformation, void *)
restrict lane to buslanes
EditMode
Definition: GNEViewNet.h:47
void doInit()
called after some features are already initialized
Definition: GNEViewNet.cpp:291
placeholder mode
Definition: GNEViewNet.h:49
FXMenuCheck * myAutoCreateOppositeEdge
Definition: GNEViewNet.h:336
bool mergeJunctions(GNEJunction *moved)
try to merge moved junction with another junction in that spot return true if merging did take place ...
MFXCheckableButton * myEditModeInspect
chekable button for edit mode inspect
Definition: GNEViewNet.h:404
A road/street connecting two junctions (netedit-version)
Definition: GNEEdge.h:54
FXMenuCheck * myExtendToEdgeNodes
menu check to extend to edge nodes
Definition: GNEViewNet.h:324
Position myMoveSrc
position from which to move edge geometry
Definition: GNEViewNet.h:363
long onCmdAddRestrictedLaneBikelane(FXObject *, FXSelector typeOfTransformation, void *)
Add restricted lane for bikes.
An Element which don&#39;t belongs to GNENet but has influency in the simulation.
Definition: GNEAdditional.h:62
MFXCheckableButton * myEditModeConnection
chekable button for edit mode connection
Definition: GNEViewNet.h:410
bool showConnections()
show connections over junctions
Definition: GNEViewNet.cpp:357
long onCmdReverseEdge(FXObject *, FXSelector, void *)
reverse edge
long onCmdSetModeTLS(FXObject *, FXSelector, void *)
called when user press the button for traffic lights mode
int doPaintGL(int mode, const Boundary &bound)
do paintGL
Definition: GNEViewNet.cpp:393
GNEJunction * myCreateEdgeSource
source junction for new edge 0 if no edge source is selected an existing (or newly created) junction ...
Definition: GNEViewNet.h:332
long onCmdAddRestrictedLaneBuslane(FXObject *, FXSelector typeOfTransformation, void *)
Add restricted lane for buses.
long onCmdRemoveRestrictedLaneSidewalk(FXObject *, FXSelector typeOfTransformation, void *)
remove restricted lane for pedestrians
GNENet * getNet() const
get the net object
Definition: GNEViewNet.cpp:989
void text()
Definition: gl2psTest.c:260
long onCmdRestrictLaneSidewalk(FXObject *, FXSelector typeOfTransformation, void *)
restrict lane to pedestrians
void updateModeSpecificControls()
updates mode specific controls
MFXCheckableButton * myEditModeCrossing
chekable button for edit mode crossing
Definition: GNEViewNet.h:419
void setStatusBarText(const std::string &text)
set staturBar text
Definition: GNEViewNet.cpp:345
#define SUMOReal
Definition: config.h:208
long onCmdSetModeConnect(FXObject *, FXSelector, void *)
called when user press the button for connect mode
Mode for editing additionals.
Definition: GNEViewNet.h:65
StringBijection< EditMode > myEditAdditionalModeNames
stringBijection for edit additional mode names
Definition: GNEViewNet.h:428
virtual void buildViewToolBars(GUIGlChildWindow &)
builds the view toolbars
Definition: GNEViewNet.cpp:295
Mode for editing crossing.
Definition: GNEViewNet.h:67
long onCmdStraightenEdges(FXObject *, FXSelector, void *)
makes selected edges straight
long onCmdSetModeInspect(FXObject *, FXSelector, void *)
called when user press the button for inspect mode
mode for connecting lanes
Definition: GNEViewNet.h:61
mode for creating new edges
Definition: GNEViewNet.h:51
long onDoubleClicked(FXObject *, FXSelector, void *)
called when user press mouse&#39;s left button two times
Definition: GNEViewNet.cpp:813
long onCmdToogleShowBubbles(FXObject *, FXSelector, void *)
toogle show bubbles
GNEEdge * getEdgeAtCursorPosition(Position &pos)
try to retrieve an edge at the given position
bool showJunctionAsBubbles() const
return true if junction must be showed as bubbles
Definition: GNEViewNet.cpp:387
long onCmdNodeReplace(FXObject *, FXSelector, void *)
replace node by geometry
void hotkeyDel()
handle del keypress
Definition: GNEViewNet.cpp:911
long onCmdAddReversedEdge(FXObject *, FXSelector, void *)
add reversed edge
bool myAmInRectSelect
whether we have started rectangle-selection
Definition: GNEViewNet.h:378
GNENet * myNet
we are not responsible for deletion
Definition: GNEViewNet.h:306
void hotkeyEnter()
handle enter keypress
Definition: GNEViewNet.cpp:924
long onLeftBtnRelease(FXObject *, FXSelector, void *)
called when user releases mouse&#39;s left button
Definition: GNEViewNet.cpp:765
long onCmdSetModeCreateEdge(FXObject *, FXSelector, void *)
long onCmdSetModeDelete(FXObject *, FXSelector, void *)
called when user press the button for delete mode
void deleteSelectedEdges()
delete all currently selected edges
GNEUndoList * myUndoList
a reference to the undolist maintained in the application
Definition: GNEViewNet.h:432
EditMode myEditMode
the current edit mode
Definition: GNEViewNet.h:309
bool addRestrictedLane(SUMOVehicleClass vclass)
add restricted lane
bool myTestingMode
testing mode
Definition: GNEViewNet.h:441
GNEPoly * myPolyToMove
the poly of which geometry is being moved
Definition: GNEViewNet.h:348