SUMO - Simulation of Urban MObility
GUISUMOAbstractView.h
Go to the documentation of this file.
1 /****************************************************************************/
2 // Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.org/sumo
3 // Copyright (C) 2001-2018 German Aerospace Center (DLR) and others.
4 // This program and the accompanying materials
5 // are made available under the terms of the Eclipse Public License v2.0
6 // which accompanies this distribution, and is available at
7 // http://www.eclipse.org/legal/epl-v20.html
8 // SPDX-License-Identifier: EPL-2.0
9 /****************************************************************************/
18 // The base class for a view
19 /****************************************************************************/
20 #ifndef GUISUMOAbstractView_h
21 #define GUISUMOAbstractView_h
22 
23 
24 // ===========================================================================
25 // included modules
26 // ===========================================================================
27 #include <config.h>
28 
29 #include <string>
30 #include <vector>
31 #include <map>
32 #include <fx.h>
33 // fx3d includes windows.h so we need to guard against macro pollution
34 #ifdef WIN32
35 #define NOMINMAX
36 #endif
37 #include <fx3d.h>
38 #ifdef WIN32
39 #undef NOMINMAX
40 #endif
41 
43 #include <utils/geom/Boundary.h>
44 #include <utils/geom/Position.h>
45 #include <utils/common/RGBColor.h>
46 #include <utils/common/SUMOTime.h>
49 
50 
51 // ===========================================================================
52 // class declarations
53 // ===========================================================================
54 class GUIGlChildWindow;
55 class GUIVehicle;
57 class GUIMainWindow;
59 class GUIGlObject;
63 
64 
65 // ===========================================================================
66 // class definitions
67 // ===========================================================================
74 class GUISUMOAbstractView : public FXGLCanvas {
75  FXDECLARE(GUISUMOAbstractView)
76 
77 public:
79  GUISUMOAbstractView(FXComposite* p, GUIMainWindow& app, GUIGlChildWindow* parent, const SUMORTree& grid, FXGLVisual* glVis, FXGLCanvas* share);
80 
82  virtual ~GUISUMOAbstractView();
83 
86 
88  virtual void recenterView();
89 
96  virtual void centerTo(GUIGlID id, bool applyZoom, double zoomDist = 20);
97 
99  void centerTo(const Boundary& bound);
100 
102  virtual void setViewportFromToRot(const Position& lookFrom, const Position& lookAt, double rotation);
103 
105  virtual void copyViewportTo(GUISUMOAbstractView* view);
106 
108  double m2p(double meter) const;
109 
111  double p2m(double pixel) const;
112 
115  //bool allowRotation() const;
116 
118  void setWindowCursorPosition(FXint x, FXint y);
119 
121  FXbool makeCurrent();
122 
124  bool isInEditMode();
125 
128 
131 
133 
134  virtual long onConfigure(FXObject*, FXSelector, void*);
135  virtual long onPaint(FXObject*, FXSelector, void*);
136  virtual long onLeftBtnPress(FXObject*, FXSelector, void*);
137  virtual long onLeftBtnRelease(FXObject*, FXSelector, void*);
138  virtual long onMiddleBtnPress(FXObject*, FXSelector, void*);
139  virtual long onMiddleBtnRelease(FXObject*, FXSelector, void*);
140  virtual long onRightBtnPress(FXObject*, FXSelector, void*);
141  virtual long onRightBtnRelease(FXObject*, FXSelector, void*);
142  virtual long onDoubleClicked(FXObject*, FXSelector, void*);
143  virtual long onMouseWheel(FXObject*, FXSelector, void*);
144  virtual long onMouseMove(FXObject*, FXSelector, void*);
145  virtual long onMouseLeft(FXObject*, FXSelector, void*);
147 
149 
150  virtual long onKeyPress(FXObject* o, FXSelector sel, void* data);
151  virtual long onKeyRelease(FXObject* o, FXSelector sel, void* data);
153 
154  //@brief open object dialog
155  virtual void openObjectDialog();
156 
158  void updateToolTip();
159 
162 
165  void addSnapshot(SUMOTime time, const std::string& file, const int width = -1, const int height = -1);
166 
174  std::string makeSnapshot(const std::string& destFile, const int width = -1, const int height = -1);
175 
177  virtual void saveFrame(const std::string& destFile, FXColor* buf);
178 
180  virtual void endSnapshot() {}
181 
183  virtual void checkSnapshots();
184 
185  void waitForSnapshots(const SUMOTime snapshotTime);
186 
188  virtual SUMOTime getCurrentTimeStep() const;
190 
193 
195  virtual void showViewportEditor();
196 
198  void showViewschemeEditor();
199 
201  void showToolTips(bool val);
202 
204  virtual bool setColorScheme(const std::string&);
205 
208 
210  virtual void buildColorRainbow(const GUIVisualizationSettings& /*s*/, GUIColorScheme& /*scheme*/, int /*active*/, GUIGlObjectType /*objectType*/) { }
211 
213  void remove(GUIDialog_EditViewport*);
214 
216  void remove(GUIDialog_ViewSettings*);
217 
219  // @todo: check why this is here
220  double getGridWidth() const;
221 
223  // @todo: check why this is here
224  double getGridHeight() const;
225 
227  virtual void startTrack(int /*id*/);
228 
230  virtual void stopTrack();
231 
233  virtual GUIGlID getTrackedID() const;
234 
236  virtual void onGamingClick(Position /*pos*/);
237 
240 
245  bool addAdditionalGLVisualisation(const GUIGlObject* const which);
246 
252  bool removeAdditionalGLVisualisation(const GUIGlObject* const which);
253 
258  bool isAdditionalGLVisualisationEnabled(GUIGlObject* const which) const;
260 
262  const Position& getPopupPosition() const;
263 
265  void destroyPopup();
266 
267 public:
270  struct Decal {
272  Decal();
273 
275  std::string filename;
277  double centerX;
279  double centerY;
281  double centerZ;
283  double width;
285  double height;
287  double altitude;
289  double rot;
291  double tilt;
293  double roll;
295  double layer;
299  bool skip2D;
303  int glID;
305  FXImage* image;
306  };
307 
308 public:
310  FXComboBox& getColoringSchemesCombo();
311 
314 
318  Position snapToActiveGrid(const Position& pos) const;
319 
321  Position screenPos2NetPos(int x, int y) const;
322 
324  void addDecals(const std::vector<Decal>& decals);
325 
328 
330  double getDelay() const;
331 
333  void setDelay(double delay);
334 
336  virtual const std::vector<SUMOTime> retrieveBreakpoints() const {
337  return std::vector<SUMOTime>();
338  }
339 
340 protected:
342  void paintGL();
343 
345  void updatePositionInformation() const;
346 
348  virtual int doPaintGL(int /*mode*/, const Boundary& /*boundary*/);
349 
351  virtual void doInit();
352 
354  void paintGLGrid();
355 
357  void displayLegend();
358 
361 
363  std::vector<GUIGlID> getObjectstUnderCursor();
364 
366  std::vector<GUIGlObject*> getGUIGlObjectsUnderCursor();
367 
370 
372  std::vector<GUIGlID> getObjectsAtPosition(Position pos, double radius);
373 
375  std::vector<GUIGlObject*> getGUIGlObjectsAtPosition(Position pos, double radius);
376 
378  std::vector<GUIGlID> getObjectsInBoundary(Boundary bound);
379 
381  void showToolTipFor(const GUIGlID id);
382 
383 protected:
386 
388  FXImage* checkGDALImage(Decal& d);
389 
391  void drawDecals();
392 
396  Boundary applyGLTransform(bool fixRatio = true);
397 
398 protected:
401 
404 
407 
410 
413 
416 
419 
422 
425 
428 
431 
434 
437 
440 
444  std::vector<Decal> myDecals;
445 
449 
451  std::map<SUMOTime, std::vector<std::tuple<std::string, int, int> > > mySnapshots;
452 
455 
457  FXCondition mySnapshotCondition;
458 
461 
463  std::map<const GUIGlObject*, int> myAdditionallyDrawn;
464 
465 private:
466  // @brief sensitivity for "<>AtPosition(...) functions
467  static const double SENSITIVITY;
468 };
469 
470 
471 #endif
472 
473 /****************************************************************************/
474 
GUIDialog_EditViewport * getViewportEditor()
get the viewport and create it on first access
virtual void buildColorRainbow(const GUIVisualizationSettings &, GUIColorScheme &, int, GUIGlObjectType)
recalibrate color scheme according to the current value range
void paintGLGrid()
paints a grid
A decal (an image) that can be shown.
virtual long onConfigure(FXObject *, FXSelector, void *)
mouse functions
void showToolTips(bool val)
show tool tips
double altitude
The altitude of the image (net coordinates in z-direction, in m)
std::vector< GUIGlID > getObjectsAtPosition(Position pos, double radius)
returns the ids of the object at position within the given (rectangular) radius using GL_SELECT ...
long long int SUMOTime
Definition: SUMOTime.h:36
FXImage * checkGDALImage(Decal &d)
check whether we can read image data or position with gdal
FXImage * image
The image pointer for later cleanup.
std::map< SUMOTime, std::vector< std::tuple< std::string, int, int > > > mySnapshots
Snapshots.
virtual long onDoubleClicked(FXObject *, FXSelector, void *)
GUIGlObjectType
bool myAmInitialised
Internal information whether doInit() was called.
virtual void recenterView()
recenters the view
std::vector< GUIGlID > getObjectsInBoundary(Boundary bound)
returns the ids of all objects in the given boundary
SUMORTree * myGrid
The visualization speed-up.
virtual long onMouseMove(FXObject *, FXSelector, void *)
virtual long onMiddleBtnPress(FXObject *, FXSelector, void *)
Stores the information about how to visualize structures.
The dialog to change the view (gui) settings.
void setDelay(double delay)
Sets the delay of the parent application.
void displayLegend()
a line with ticks, and the length information.
void updatePositionInformation() const
update position information
GUIVisualizationSettings * getVisualisationSettings() const
get visualitation settings
GUIMainWindow * myApp
The application.
Position snapToActiveGrid(const Position &pos) const
Returns a position that is mapped to the closest grid point if the grid is active.
static const double SENSITIVITY
virtual void saveFrame(const std::string &destFile, FXColor *buf)
Adds a frame to a video snapshot which will be initialized if neccessary.
MFXMutex myDecalsLock
The mutex to use before accessing the decals list in order to avoid thread conflicts.
double centerX
The center of the image in x-direction (net coordinates, in m)
bool screenRelative
Whether this image should be skipped in 2D-views.
virtual long onLeftBtnPress(FXObject *, FXSelector, void *)
bool myInEditMode
Information whether too-tip informations shall be generated.
virtual void openObjectDialog()
virtual long onKeyRelease(FXObject *o, FXSelector sel, void *data)
bool addAdditionalGLVisualisation(const GUIGlObject *const which)
Adds an object to call its additional visualisation method.
int glID
whether the decal shall be drawn in screen coordinates, rather than network coordinates ...
virtual void copyViewportTo(GUISUMOAbstractView *view)
copy the viewport to the given view
virtual void onGamingClick(Position)
on gaming click
GUIDialog_ViewSettings * myVisualizationChanger
Visualization changer.
virtual void buildViewToolBars(GUIGlChildWindow &)
builds the view toolbars
virtual void stopTrack()
stop track
GUIDialog_EditViewport * myViewportChooser
viewport chooser
A RT-tree for efficient storing of SUMO&#39;s GL-objects.
Definition: SUMORTree.h:69
double getGridHeight() const
get grid Height
double height
The height of the image (net coordinates in y-direction, in m)
virtual void endSnapshot()
Ends a video snapshot.
void waitForSnapshots(const SUMOTime snapshotTime)
A class that stores a 2D geometrical boundary.
Definition: Boundary.h:42
int myMouseHotspotX
Offset to the mouse-hotspot from the mouse position.
void addDecals(const std::vector< Decal > &decals)
add decals
double getDelay() const
Returns the delay of the parent application.
bool removeAdditionalGLVisualisation(const GUIGlObject *const which)
Removes an object from the list of objects that show additional things.
MFXMutex myPolyDrawLock
poly draw lock
FXCondition mySnapshotCondition
the semaphore when waiting for snapshots to finish
double layer
The layer of the image.
double p2m(double pixel) const
pixels-to-meters conversion method
std::map< const GUIGlObject *, int > myAdditionallyDrawn
List of objects for which GUIGlObject::drawGLAdditional is called.
double roll
The roll of the image to the ground plane (in degrees)
FXMutex mySnapshotsMutex
The mutex to use before accessing the decals list in order to avoid thread conflicts.
std::vector< GUIGlID > getObjectstUnderCursor()
returns the id of the objects under the cursor using GL_SELECT (including overlapped objects) ...
Boundary applyGLTransform(bool fixRatio=true)
applies gl-transformations to fit the Boundary given by myChanger onto the canvas. If fixRatio is true, this boundary will be enlarged to prevent anisotropic stretching. (this should be set to false when doing selections)
std::vector< Decal > myDecals
double getGridWidth() const
get grid width
GUIGlID getObjectAtPosition(Position pos)
returns the id of the object at position using GL_SELECT
virtual GUIGlID getTrackedID() const
get tracked id
virtual void startTrack(int)
star track
virtual long onPaint(FXObject *, FXSelector, void *)
void showToolTipFor(const GUIGlID id)
invokes the tooltip for the given object
virtual long onKeyPress(FXObject *o, FXSelector sel, void *data)
keyboard functions
bool isInEditMode()
returns true, if the edit button was pressed
A point in 2D or 3D with translation and scaling methods.
Definition: Position.h:39
std::string makeSnapshot(const std::string &destFile, const int width=-1, const int height=-1)
Takes a snapshots and writes it into the given file.
double rot
The rotation of the image in the ground plane (in degrees)
virtual void centerTo(GUIGlID id, bool applyZoom, double zoomDist=20)
centers to the chosen artifact
GUIPerspectiveChanger & getChanger() const
get changer
FXComboBox & getColoringSchemesCombo()
get coloring schemes combo
bool initialised
Whether this image was initialised (inserted as a texture)
virtual void doInit()
doInit
double centerY
The center of the image in y-direction (net coordinates, in m)
virtual long onMouseWheel(FXObject *, FXSelector, void *)
virtual void checkSnapshots()
Checks whether it is time for a snapshot.
virtual ~GUISUMOAbstractView()
destructor
std::string filename
The path to the file the image is located at.
virtual void setViewportFromToRot(const Position &lookFrom, const Position &lookAt, double rotation)
applies the given viewport settings
virtual int doPaintGL(int, const Boundary &)
paint GL
Position screenPos2NetPos(int x, int y) const
Translate screen position to network position.
GUIPerspectiveChanger * myChanger
The perspective changer.
bool myUseToolTips
use tool tips
GUIGLObjectPopupMenu * myPopup
The current popup-menu.
void destroyPopup()
destoys the popup
FXint myWindowCursorPositionX
Position of the cursor relative to the window.
virtual long onMiddleBtnRelease(FXObject *, FXSelector, void *)
double width
The width of the image (net coordinates in x-direction, in m)
virtual bool setColorScheme(const std::string &)
set color scheme
unsigned int GUIGlID
Definition: GUIGlObject.h:43
virtual void showViewportEditor()
show viewport editor
FXbool makeCurrent()
A reimplementation due to some internal reasons.
virtual long onLeftBtnRelease(FXObject *, FXSelector, void *)
virtual const std::vector< SUMOTime > retrieveBreakpoints() const
retrieve breakpoints if provided by the application
double m2p(double meter) const
meter-to-pixels conversion method
GUIVisualizationSettings * myVisualizationSettings
visualization settings
Position myPopupPosition
The current popup-menu position.
bool isAdditionalGLVisualisationEnabled(GUIGlObject *const which) const
Check if an object is added in the additional GL visualitation.
void paintGL()
performs the painting of the simulation
std::vector< GUIGlObject * > getGUIGlObjectsAtPosition(Position pos, double radius)
returns the GUIGlObjects at position within the given (rectangular) radius using GL_SELECT ...
void setWindowCursorPosition(FXint x, FXint y)
Returns the information whether rotation is allowd.
The popup menu of a globject.
double centerZ
The center of the image in z-direction (net coordinates, in m)
void drawDecals()
Draws the stored decals.
double tilt
The tilt of the image to the ground plane (in degrees)
void addSnapshot(SUMOTime time, const std::string &file, const int width=-1, const int height=-1)
Sets the snapshot time to file map.
bool skip2D
Whether this image should be skipped in 2D-views.
GUISUMOAbstractView()
FOX need this.
virtual SUMOTime getCurrentTimeStep() const
get the current simulation time
Position getPositionInformation() const
Returns the cursor&#39;s x/y position within the network.
Boundary getVisibleBoundary() const
get visible boundary
void updateToolTip()
A method that updates the tooltip.
A dialog to change the viewport.
void showViewschemeEditor()
show viewsscheme editor
virtual long onRightBtnPress(FXObject *, FXSelector, void *)
virtual long onMouseLeft(FXObject *, FXSelector, void *)
std::vector< GUIGlObject * > getGUIGlObjectsUnderCursor()
returns the GUIGlObject under the cursor using GL_SELECT (including overlapped objects) ...
GUIGlID getObjectUnderCursor()
returns the id of the front object under the cursor using GL_SELECT
GUIGlChildWindow * myParent
The parent window.
virtual long onRightBtnRelease(FXObject *, FXSelector, void *)
const Position & getPopupPosition() const
get position of current popup
A MSVehicle extended by some values for usage within the gui.
Definition: GUIVehicle.h:54