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 // ===========================================================================
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 
317 protected:
319  void paintGL();
320 
321  void updatePositionInformation() const;
322 
323 
324  virtual int doPaintGL(int /*mode*/, const Boundary& /*boundary*/) {
325  return 0;
326  }
327 
328  virtual void doInit() { }
329 
331  void paintGLGrid();
332 
337  void displayLegend();
338 
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 
356 protected:
359  FXImage* checkGDALImage(Decal& d);
360 
363  void drawDecals();
364 
365  // applies gl-transformations to fit the Boundary given by myChanger onto
366  // the canvas. If fixRatio is true, this boundary will be enlarged to
367  // prevent anisotropic stretching. (this should be set to false when doing
368  // selections)
369  void applyGLTransform(bool fixRatio = true);
370 
371 protected:
374 
377 
380 
383 
386 
389 
392 
395 
397 
399 
402 
403 
406 
407 
410 
412  std::vector<Decal> myDecals;
413 
417 
418 
419  std::map<SUMOTime, std::string> mySnapshots;
420 
422 
424  std::map<GUIGlObject*, int> myAdditionallyDrawn;
425 
426 
427 protected:
429 
430 };
431 
432 
433 #endif
434 
435 /****************************************************************************/
436 
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)
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'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:48
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
int SUMOTime
Definition: SUMOTime.h:43
virtual bool setColorScheme(const std::string &)
void drawDecals()
Draws the stored decals.
SUMOReal layer
The layer of the image.
bool skip2D
Whether this image should be skipped in 2D-views.
#define SUMOReal
Definition: config.h:218
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'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:68