SUMO - Simulation of Urban MObility
GUISUMOAbstractView.h
Go to the documentation of this file.
1 /****************************************************************************/
10 // The base class for a view
11 /****************************************************************************/
12 // SUMO, Simulation of Urban MObility; see http://sumo.dlr.de/
13 // Copyright (C) 2001-2016 DLR (http://www.dlr.de/) and contributors
14 /****************************************************************************/
15 //
16 // This file is part of SUMO.
17 // SUMO is free software: you can redistribute it and/or modify
18 // it under the terms of the GNU General Public License as published by
19 // the Free Software Foundation, either version 3 of the License, or
20 // (at your option) any later version.
21 //
22 /****************************************************************************/
23 #ifndef GUISUMOAbstractView_h
24 #define GUISUMOAbstractView_h
25 
26 
27 // ===========================================================================
28 // included modules
29 // ===========================================================================
30 #ifdef _MSC_VER
31 #include <windows_config.h>
32 #else
33 #include <config.h>
34 #endif
35 
36 #include <string>
37 #include <vector>
38 #include <map>
39 #include <fx.h>
40 // fx3d includes windows.h so we need to guard against macro pollution
41 #ifdef WIN32
42 #define NOMINMAX
43 #endif
44 #include <fx3d.h>
45 #ifdef WIN32
46 #undef NOMINMAX
47 #endif
48 
50 #include <utils/geom/Boundary.h>
51 #include <utils/geom/Position.h>
52 #include <utils/common/RGBColor.h>
53 #include <utils/common/SUMOTime.h>
54 #include <utils/shapes/Polygon.h>
57 
58 
59 // ===========================================================================
60 // class declarations
61 // ===========================================================================
62 class GUIGlChildWindow;
63 class GUIVehicle;
65 class GUIMainWindow;
67 class GUIGlObject;
71 
72 
73 // ===========================================================================
74 // class definitions
75 // ===========================================================================
82 class GUISUMOAbstractView : public FXGLCanvas {
83  FXDECLARE(GUISUMOAbstractView)
84 public:
86  GUISUMOAbstractView(FXComposite* p, GUIMainWindow& app, GUIGlChildWindow* parent, const SUMORTree& grid, FXGLVisual* glVis, FXGLCanvas* share);
87 
89  virtual ~GUISUMOAbstractView();
90 
93 
95  virtual void recenterView();
96 
103  virtual void centerTo(GUIGlID id, bool applyZoom, SUMOReal zoomDist = 20);
104 
106  void centerTo(const Boundary& bound);
107 
109  virtual void setViewport(const Position& lookFrom, const Position& lookAt);
110 
112  SUMOReal m2p(SUMOReal meter) const;
113 
115  SUMOReal p2m(SUMOReal pixel) const;
116 
119  //bool allowRotation() const;
120 
122  void setWindowCursorPosition(FXint x, FXint y);
123 
125  FXbool makeCurrent();
126 
128  bool isInEditMode();
129 
132 
135 
137 
138  virtual long onConfigure(FXObject*, FXSelector, void*);
139  virtual long onPaint(FXObject*, FXSelector, void*);
140  virtual long onLeftBtnPress(FXObject*, FXSelector, void*);
141  virtual long onLeftBtnRelease(FXObject*, FXSelector, void*);
142  virtual long onMiddleBtnPress(FXObject*, FXSelector, void*);
143  virtual long onMiddleBtnRelease(FXObject*, FXSelector, void*);
144  virtual long onRightBtnPress(FXObject*, FXSelector, void*);
145  virtual long onRightBtnRelease(FXObject*, FXSelector, void*);
146  virtual long onDoubleClicked(FXObject*, FXSelector, void*);
147  virtual long onMouseWheel(FXObject*, FXSelector, void*);
148  virtual long onMouseMove(FXObject*, FXSelector, void*);
149  virtual long onMouseLeft(FXObject*, FXSelector, void*);
151 
153 
154  virtual long onKeyPress(FXObject* o, FXSelector sel, void* data);
155  virtual long onKeyRelease(FXObject* o, FXSelector sel, void* data);
157 
158  //@brief open object dialog
159  virtual void openObjectDialog();
160 
162  void updateToolTip();
163 
166 
169  void setSnapshots(std::map<SUMOTime, std::string> snaps);
170 
178  std::string makeSnapshot(const std::string& destFile);
179 
181  virtual void saveFrame(const std::string& destFile, FXColor* buf);
182 
184  virtual void endSnapshot() {}
185 
187  virtual void checkSnapshots();
188 
190  virtual SUMOTime getCurrentTimeStep() const;
192 
195 
197  virtual void showViewportEditor();
198 
200  void showViewschemeEditor();
201 
203  void showToolTips(bool val);
204 
206  virtual bool setColorScheme(const std::string&);
207 
210 
212  void remove(GUIDialog_EditViewport*);
213 
215  void remove(GUIDialog_ViewSettings*);
216 
218  // @todo: check why this is here
219  SUMOReal getGridWidth() const;
220 
222  // @todo: check why this is here
223  SUMOReal getGridHeight() const;
224 
226  virtual void startTrack(int /*id*/);
227 
229  virtual void stopTrack();
230 
232  virtual int getTrackedID() const;
233 
235  virtual void onGamingClick(Position /*pos*/);
236 
239 
244  bool addAdditionalGLVisualisation(const GUIGlObject* const which);
245 
251  bool removeAdditionalGLVisualisation(const GUIGlObject* const which);
252 
257  bool isAdditionalGLVisualisationEnabled(GUIGlObject* const which) const;
259 
261  void destroyPopup();
262 
263 public:
266  struct Decal {
268  Decal();
269 
271  std::string filename;
295  bool skip2D;
297  int glID;
299  FXImage* image;
300  };
301 
302 public:
304  FXComboBox& getColoringSchemesCombo();
305 
308 
310  void addDecals(const std::vector<Decal>& decals);
311 
314 
316  SUMOReal getDelay() const;
317 
319  void setDelay(SUMOReal delay);
320 
321 protected:
323  void paintGL();
324 
326  void updatePositionInformation() const;
327 
329  virtual int doPaintGL(int /*mode*/, const Boundary& /*boundary*/);
330 
332  virtual void doInit();
333 
335  void paintGLGrid();
336 
338  void displayLegend();
339 
342 
345 
347  std::vector<GUIGlID> getObjectsAtPosition(Position pos, SUMOReal radius);
348 
350  std::vector<GUIGlID> getObjectsInBoundary(const Boundary& bound);
351 
353  void showToolTipFor(unsigned int id);
354 
355 protected:
357  FXImage* checkGDALImage(Decal& d);
358 
360  void drawDecals();
361 
365  void applyGLTransform(bool fixRatio = true);
366 
367 protected:
370 
373 
376 
379 
382 
385 
388 
391 
394 
397 
400 
403 
406 
410  std::vector<Decal> myDecals;
411 
415 
417  std::map<SUMOTime, std::string> mySnapshots;
418 
421 
423  std::map<const GUIGlObject*, int> myAdditionallyDrawn;
424 
425 protected:
428 };
429 
430 
431 #endif
432 
433 /****************************************************************************/
434 
GUIDialog_EditViewport * getViewportEditor()
get the viewport and create it on first access
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
long long int SUMOTime
Definition: SUMOTime.h:43
FXImage * checkGDALImage(Decal &d)
check whether we can read image data or position with gdal
FXImage * image
The image pointer for later cleanup.
SUMOReal roll
The roll of the image to the ground plane (in degrees)
void showToolTipFor(unsigned int id)
invokes the tooltip for the given object
virtual long onDoubleClicked(FXObject *, FXSelector, void *)
virtual void setViewport(const Position &lookFrom, const Position &lookAt)
applies the given viewport settings
virtual void centerTo(GUIGlID id, bool applyZoom, SUMOReal zoomDist=20)
centers to the chosen artifact
bool myAmInitialised
Internal information whether doInit() was called.
virtual void recenterView()
recenters the view
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 displayLegend()
a line with ticks, and the length information.
GUIMainWindow * myApp
The application.
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 conficts.
SUMOReal p2m(SUMOReal pixel) const
pixels-to-meters conversion method
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)
SUMOReal getGridHeight() const
get grid Height
SUMOReal centerZ
The center of the image in z-direction (net coordinates, in m)
bool addAdditionalGLVisualisation(const GUIGlObject *const which)
Adds an object to call its additional visualisation method.
int glID
The gl-id of the texture that holds this image.
void setSnapshots(std::map< SUMOTime, std::string > snaps)
Sets the snapshot time to file map.
SUMOReal width
The width of the image (net coordinates in x-direction, in m)
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:74
virtual void endSnapshot()
Ends a video snapshot.
A class that stores a 2D geometrical boundary.
Definition: Boundary.h:48
int myMouseHotspotX
Offset to the mouse-hotspot from the mouse position.
void addDecals(const std::vector< Decal > &decals)
add decals
bool removeAdditionalGLVisualisation(const GUIGlObject *const which)
Removes an object from the list of objects that show additional things.
MFXMutex myPolyDrawLock
poly draw lock
std::map< const GUIGlObject *, int > myAdditionallyDrawn
List of objects for which GUIGlObject::drawGLAdditional is called.
std::vector< GUIGlID > getObjectsAtPosition(Position pos, SUMOReal radius)
returns the ids of the object at position within the given (rectangular) radius using GL_SELECT ...
std::vector< Decal > myDecals
GUIGlID getObjectAtPosition(Position pos)
returns the id of the object at position using GL_SELECT
virtual void startTrack(int)
star track
virtual long onPaint(FXObject *, FXSelector, void *)
Boundary getVisibleBoundary() const
get visible boundary
virtual long onKeyPress(FXObject *o, FXSelector sel, void *data)
keyboard functions
SUMOReal altitude
The altitude of the image (net coordinates in z-direction, in m)
bool isInEditMode()
returns true, if the edit button was pressed
A point in 2D or 3D with translation and scaling methods.
Definition: Position.h:46
SUMOReal centerY
The center of the image in y-direction (net coordinates, in m)
FXComboBox & getColoringSchemesCombo()
get coloring schemes combo
bool initialised
Whether this image was initialised (inserted as a texture)
virtual void doInit()
doInit
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 int doPaintGL(int, const Boundary &)
paint GL
std::map< SUMOTime, std::string > mySnapshots
Snapshots.
void updatePositionInformation() const
update position information
SUMOReal getDelay() const
Returns the delay of the parent application.
GUIPerspectiveChanger * myChanger
The perspective changer.
bool myUseToolTips
use tool tips
std::string makeSnapshot(const std::string &destFile)
Takes a snapshots and writes it into the given file.
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 *)
virtual bool setColorScheme(const std::string &)
set color scheme
unsigned int GUIGlID
Definition: GUIGlObject.h:50
virtual void showViewportEditor()
show viewport editor
FXbool makeCurrent()
A reimplementation due to some internal reasons.
SUMOReal height
The height of the image (net coordinates in y-direction, in m)
void 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)
virtual long onLeftBtnRelease(FXObject *, FXSelector, void *)
SUMOReal centerX
The center of the image in x-direction (net coordinates, in m)
GUIVisualizationSettings * myVisualizationSettings
visualization settings
SUMOReal m2p(SUMOReal meter) const
meter-to-pixels conversion method
void paintGL()
performs the painting of the simulation
virtual SUMOTime getCurrentTimeStep() const
get the current simulation time
void setWindowCursorPosition(FXint x, FXint y)
Returns the information whether rotation is allowd.
The popup menu of a globject.
SUMOReal getGridWidth() const
get grid width
void drawDecals()
Draws the stored decals.
bool isAdditionalGLVisualisationEnabled(GUIGlObject *const which) const
Check if an object is added in the additional GL visualitation.
GUIPerspectiveChanger & getChanger() const
get changer
SUMOReal layer
The layer of the image.
void setDelay(SUMOReal delay)
Sets the delay of the parent application.
GUIVisualizationSettings * getVisualisationSettings() const
get visualitation settings
bool skip2D
Whether this image should be skipped in 2D-views.
GUISUMOAbstractView()
empty constructor
#define SUMOReal
Definition: config.h:214
void updateToolTip()
A method that updates the tooltip.
A dialog to change the viewport.
SUMOReal tilt
The tilt of the image to the ground plane (in degrees)
void showViewschemeEditor()
show viewsscheme editor
virtual long onRightBtnPress(FXObject *, FXSelector, void *)
virtual long onMouseLeft(FXObject *, FXSelector, void *)
Position getPositionInformation() const
Returns the cursor&#39;s x/y position within the network.
GUIGlID getObjectUnderCursor()
returns the id of the object under the cursor using GL_SELECT
virtual int getTrackedID() const
get tracked id
SUMOReal rot
The rotation of the image in the ground plane (in degrees)
GUIGlChildWindow * myParent
The parent window.
virtual long onRightBtnRelease(FXObject *, FXSelector, void *)
std::vector< GUIGlID > getObjectsInBoundary(const Boundary &bound)
returns the ids of all objects in the given boundary
A MSVehicle extended by some values for usage within the gui.
Definition: GUIVehicle.h:61