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 public:
78  GUISUMOAbstractView(FXComposite* p, GUIMainWindow& app, GUIGlChildWindow* parent, const SUMORTree& grid, FXGLVisual* glVis, FXGLCanvas* share);
79 
81  virtual ~GUISUMOAbstractView();
82 
85 
87  virtual void recenterView();
88 
95  virtual void centerTo(GUIGlID id, bool applyZoom, double zoomDist = 20);
96 
98  void centerTo(const Boundary& bound);
99 
101  virtual void setViewportFromToRot(const Position& lookFrom, const Position& lookAt, double rotation);
102 
104  virtual void copyViewportTo(GUISUMOAbstractView* view);
105 
107  double m2p(double meter) const;
108 
110  double p2m(double pixel) const;
111 
114  //bool allowRotation() const;
115 
117  void setWindowCursorPosition(FXint x, FXint y);
118 
120  FXbool makeCurrent();
121 
123  bool isInEditMode();
124 
127 
130 
132 
133  virtual long onConfigure(FXObject*, FXSelector, void*);
134  virtual long onPaint(FXObject*, FXSelector, void*);
135  virtual long onLeftBtnPress(FXObject*, FXSelector, void*);
136  virtual long onLeftBtnRelease(FXObject*, FXSelector, void*);
137  virtual long onMiddleBtnPress(FXObject*, FXSelector, void*);
138  virtual long onMiddleBtnRelease(FXObject*, FXSelector, void*);
139  virtual long onRightBtnPress(FXObject*, FXSelector, void*);
140  virtual long onRightBtnRelease(FXObject*, FXSelector, void*);
141  virtual long onDoubleClicked(FXObject*, FXSelector, void*);
142  virtual long onMouseWheel(FXObject*, FXSelector, void*);
143  virtual long onMouseMove(FXObject*, FXSelector, void*);
144  virtual long onMouseLeft(FXObject*, FXSelector, void*);
146 
148 
149  virtual long onKeyPress(FXObject* o, FXSelector sel, void* data);
150  virtual long onKeyRelease(FXObject* o, FXSelector sel, void* data);
152 
153  //@brief open object dialog
154  virtual void openObjectDialog();
155 
157  void updateToolTip();
158 
161 
164  void addSnapshot(SUMOTime time, const std::string& file, const int width = -1, const int height = -1);
165 
173  std::string makeSnapshot(const std::string& destFile, const int width = -1, const int height = -1);
174 
176  virtual void saveFrame(const std::string& destFile, FXColor* buf);
177 
179  virtual void endSnapshot() {}
180 
182  virtual void checkSnapshots();
183 
185  virtual SUMOTime getCurrentTimeStep() const;
187 
190 
192  virtual void showViewportEditor();
193 
195  void showViewschemeEditor();
196 
198  void showToolTips(bool val);
199 
201  virtual bool setColorScheme(const std::string&);
202 
205 
207  virtual void buildColorRainbow(GUIColorScheme& /*scheme*/, int /*active*/, GUIGlObjectType /*objectType*/) { }
208 
210  void remove(GUIDialog_EditViewport*);
211 
213  void remove(GUIDialog_ViewSettings*);
214 
216  // @todo: check why this is here
217  double getGridWidth() const;
218 
220  // @todo: check why this is here
221  double getGridHeight() const;
222 
224  virtual void startTrack(int /*id*/);
225 
227  virtual void stopTrack();
228 
230  virtual GUIGlID getTrackedID() const;
231 
233  virtual void onGamingClick(Position /*pos*/);
234 
237 
242  bool addAdditionalGLVisualisation(const GUIGlObject* const which);
243 
249  bool removeAdditionalGLVisualisation(const GUIGlObject* const which);
250 
255  bool isAdditionalGLVisualisationEnabled(GUIGlObject* const which) const;
257 
259  const Position& getPopupPosition() const;
260 
262  void destroyPopup();
263 
265  void setApplicationSnapshots(std::set<SUMOTime>* snapshots, FXMutex* lock) {
266  myApplicationSnapshots = snapshots;
268  }
269 
270 public:
273  struct Decal {
275  Decal();
276 
278  std::string filename;
280  double centerX;
282  double centerY;
284  double centerZ;
286  double width;
288  double height;
290  double altitude;
292  double rot;
294  double tilt;
296  double roll;
298  double layer;
302  bool skip2D;
306  int glID;
308  FXImage* image;
309  };
310 
311 public:
313  FXComboBox& getColoringSchemesCombo();
314 
317 
319  Position snapToActiveGrid(const Position& pos) const;
320 
322  Position screenPos2NetPos(int x, int y) const;
323 
325  void addDecals(const std::vector<Decal>& decals);
326 
329 
331  double getDelay() const;
332 
334  void setDelay(double delay);
335 
337  virtual const std::vector<SUMOTime> retrieveBreakpoints() const {
338  return std::vector<SUMOTime>();
339  }
340 
341 protected:
343  void paintGL();
344 
346  void updatePositionInformation() const;
347 
349  virtual int doPaintGL(int /*mode*/, const Boundary& /*boundary*/);
350 
352  virtual void doInit();
353 
355  void paintGLGrid();
356 
358  void displayLegend();
359 
362 
365 
367  std::vector<GUIGlID> getObjectsAtPosition(Position pos, double radius);
368 
370  std::vector<GUIGlID> getObjectsInBoundary(Boundary bound);
371 
373  void showToolTipFor(const GUIGlID id);
374 
375 protected:
377  FXImage* checkGDALImage(Decal& d);
378 
380  void drawDecals();
381 
385  Boundary applyGLTransform(bool fixRatio = true);
386 
387 protected:
390 
393 
396 
399 
402 
405 
408 
411 
414 
417 
420 
423 
426 
429 
433  std::vector<Decal> myDecals;
434 
438 
440  std::map<SUMOTime, std::vector<std::tuple<std::string, int, int> > > mySnapshots;
441  std::set<SUMOTime>* myApplicationSnapshots;
442 
446 
449 
451  std::map<const GUIGlObject*, int> myAdditionallyDrawn;
452 
453 protected:
456 };
457 
458 
459 #endif
460 
461 /****************************************************************************/
462 
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
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.
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.
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
virtual void buildColorRainbow(GUIColorScheme &, int, GUIGlObjectType)
recalibrate color scheme according to the current value range
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
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)
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.
FXMutex * myApplicationSnapshotsLock
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
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)
MFXMutex mySnapshotsLock
The mutex to use before accessing the decals list in order to avoid thread conflicts.
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()
empty constructor
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 *)
GUIGlID getObjectUnderCursor()
returns the id of the object under the cursor using GL_SELECT
GUIGlChildWindow * myParent
The parent window.
virtual long onRightBtnRelease(FXObject *, FXSelector, void *)
std::set< SUMOTime > * myApplicationSnapshots
const Position & getPopupPosition() const
get position of current popup
void setApplicationSnapshots(std::set< SUMOTime > *snapshots, FXMutex *lock)
add snapshot synchronization
A MSVehicle extended by some values for usage within the gui.
Definition: GUIVehicle.h:54