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-2015 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,
87  GUIGlChildWindow* parent, const SUMORTree& grid,
88  FXGLVisual* glVis, FXGLCanvas* share);
89 
91  virtual ~GUISUMOAbstractView();
92 
95 
97  virtual void recenterView();
98 
105  virtual void centerTo(GUIGlID id, bool applyZoom, SUMOReal zoomDist = 20);
106 
108  void centerTo(const Boundary& bound);
109 
111  virtual void setViewport(const Position& lookFrom, const Position& lookAt);
112 
114  SUMOReal m2p(SUMOReal meter) const;
115 
117  SUMOReal p2m(SUMOReal pixel) const;
118 
120 // bool allowRotation() const;
121 
123  void setWindowCursorPosition(FXint x, FXint y);
124 
126  FXbool makeCurrent();
127 
129  bool isInEditMode();
130 
132  return *myChanger;
133  }
134 
136 
137  virtual long onConfigure(FXObject*, FXSelector, void*);
138  virtual long onPaint(FXObject*, FXSelector, void*);
139  virtual long onLeftBtnPress(FXObject*, FXSelector, void*);
140  virtual long onLeftBtnRelease(FXObject*, FXSelector, void*);
141  virtual long onMiddleBtnPress(FXObject*, FXSelector, void*) {
142  return 1;
143  }
144  virtual long onMiddleBtnRelease(FXObject*, FXSelector, void*) {
145  return 1;
146  }
147  virtual long onRightBtnPress(FXObject*, FXSelector, void*);
148  virtual long onRightBtnRelease(FXObject*, FXSelector, void*);
149  virtual long onMouseWheel(FXObject*, FXSelector, void*);
150  virtual long onMouseMove(FXObject*, FXSelector, void*);
151  virtual long onMouseLeft(FXObject*, FXSelector, void*);
152 
153  virtual long onKeyPress(FXObject* o, FXSelector sel, void* data);
154  virtual long onKeyRelease(FXObject* o, FXSelector sel, void* data);
155 
156 
157  virtual void openObjectDialog();
158 
160  void updateToolTip();
161 
162 
165 
169  void setSnapshots(std::map<SUMOTime, std::string> snaps);
170 
171 
178  std::string makeSnapshot(const std::string& destFile);
179 
180 
183  void checkSnapshots();
184 
186  virtual SUMOTime getCurrentTimeStep() const {
187  return 0;
188  }
190 
191 
194 
195  virtual void showViewportEditor();
196 
197  void showViewschemeEditor();
198  void showToolTips(bool val);
199  virtual bool setColorScheme(const std::string&) {
200  return true;
201  }
202 
203  void remove(GUIDialog_EditViewport*) {
204  myViewportChooser = 0;
205  }
206 
207  void remove(GUIDialog_ViewSettings*) {
209  }
210 
211 
212  // @todo: check why this is here
213  SUMOReal getGridWidth() const;
214  // @todo: check why this is here
215  SUMOReal getGridHeight() const;
216 
217  virtual void startTrack(int /*id*/) { }
218  virtual void stopTrack() { }
219  virtual int getTrackedID() const {
220  return -1;
221  }
222 
223  virtual void onGamingClick(Position /*pos*/) { }
224 
227 
233  bool addAdditionalGLVisualisation(GUIGlObject* const which);
234 
235 
241  bool removeAdditionalGLVisualisation(GUIGlObject* const which);
243 
244 
246  void destroyPopup();
247 
248 
249 public:
250 
254  struct Decal {
257  : filename(), centerX(0), centerY(0), centerZ(0),
258  width(0), height(0), altitude(0), rot(0), tilt(0), roll(0), layer(0),
259  initialised(false), skip2D(false), glID(-1), image(0) { }
260 
262  std::string filename;
286  bool skip2D;
288  int glID;
290  FXImage* image;
291  };
292 
293 
294 public:
295  FXComboBox& getColoringSchemesCombo();
296 
297 
302 
303  void addDecals(const std::vector<Decal>& decals) {
304  myDecals.insert(myDecals.end(), decals.begin(), decals.end());
305  }
306 
307 
310  }
311 
315  SUMOReal getDelay() const;
316 
319  void setDelay(SUMOReal delay);
320 
321 protected:
323  void paintGL();
324 
325  void updatePositionInformation() const;
326 
327 
328  virtual int doPaintGL(int /*mode*/, const Boundary& /*boundary*/) {
329  return 0;
330  }
331 
332  virtual void doInit() { }
333 
335  void paintGLGrid();
336 
341  void displayLegend();
342 
343 
346 
349 
351  std::vector<GUIGlID> getObjectsAtPosition(Position pos, SUMOReal radius);
352 
354  std::vector<GUIGlID> getObjectsInBoundary(const Boundary& bound);
355 
357  void showToolTipFor(unsigned int id);
358 
359 
360 protected:
363  FXImage* checkGDALImage(Decal& d);
364 
367  void drawDecals();
368 
369  // applies gl-transformations to fit the Boundary given by myChanger onto
370  // the canvas. If fixRatio is true, this boundary will be enlarged to
371  // prevent anisotropic stretching. (this should be set to false when doing
372  // selections)
373  void applyGLTransform(bool fixRatio = true);
374 
375 protected:
378 
381 
384 
387 
390 
393 
396 
398 
400 
403 
405 
408 
410 
411 
414 
416  std::vector<Decal> myDecals;
417 
421 
422 
423  std::map<SUMOTime, std::string> mySnapshots;
424 
426 
428  std::map<GUIGlObject*, int> myAdditionallyDrawn;
429 
430 
431 protected:
433 
434 };
435 
436 
437 #endif
438 
439 /****************************************************************************/
440 
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 *)
virtual void startTrack(int)
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 void setViewport(const Position &lookFrom, const Position &lookAt)
applies the given viewport settings
GUIVisualizationSettings * getVisualisationSettings()
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 *)
Stores the information about how to visualize structures.
The dialog to change the view (gui) settings.
GUIMainWindow * myApp
The application.
virtual SUMOTime getCurrentTimeStep() const
get the current simulation time
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
bool addAdditionalGLVisualisation(GUIGlObject *const which)
Adds an object to call its additional visualisation 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
SUMOReal centerZ
The center of the image in z-direction (net coordinates, in m)
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)
GUIDialog_ViewSettings * myVisualizationChanger
virtual void buildViewToolBars(GUIGlChildWindow &)
builds the view toolbars
GUIDialog_EditViewport * myViewportChooser
A RT-tree for efficient storing of SUMO&#39;s GL-objects.
Definition: SUMORTree.h:74
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)
virtual int getTrackedID() const
GUIPerspectiveChanger & getChanger() const
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
The list of decals to show.
GUIGlID getObjectAtPosition(Position pos)
returns the id of the object at position using GL_SELECT
virtual int doPaintGL(int, const Boundary &)
bool removeAdditionalGLVisualisation(GUIGlObject *const which)
Removes an object from the list of objects that show additional things.
virtual long onPaint(FXObject *, FXSelector, void *)
std::map< GUIGlObject *, int > myAdditionallyDrawn
List of objects for which GUIGlObject::drawGLAdditional is called.
Boundary getVisibleBoundary() const
virtual long onMiddleBtnPress(FXObject *, FXSelector, void *)
virtual long onKeyPress(FXObject *o, FXSelector sel, void *data)
virtual long onMiddleBtnRelease(FXObject *, FXSelector, void *)
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()
bool initialised
Whether this image was initialised (inserted as a texture)
virtual long onMouseWheel(FXObject *, FXSelector, void *)
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.
std::map< SUMOTime, std::string > mySnapshots
void updatePositionInformation() const
SUMOReal getDelay() const
Returns the delay of the parent application.
GUIPerspectiveChanger * myChanger
The perspective changer.
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.
unsigned int GUIGlID
Definition: GUIGlObject.h:49
virtual void showViewportEditor()
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)
virtual long onLeftBtnRelease(FXObject *, FXSelector, void *)
SUMOReal centerX
The center of the image in x-direction (net coordinates, in m)
GUIVisualizationSettings * myVisualizationSettings
SUMOReal m2p(SUMOReal meter) const
meter-to-pixels conversion method
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.
SUMOReal getGridWidth() const
virtual bool setColorScheme(const std::string &)
void drawDecals()
Draws the stored decals.
SUMOReal layer
The layer of the image.
void setDelay(SUMOReal delay)
Sets the delay of the parent application.
bool skip2D
Whether this image should be skipped in 2D-views.
#define SUMOReal
Definition: config.h:214
void updateToolTip()
A method that updates the tooltip.
A dialog to change the viewport.
virtual void onGamingClick(Position)
SUMOReal tilt
The tilt of the image to the ground plane (in degrees)
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
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