Eclipse SUMO - Simulation of Urban MObility
GUIOSGView.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-2019 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 /****************************************************************************/
14 // An OSG-based 3D view on the simulation
15 /****************************************************************************/
16 #ifndef GUIOSGView_h
17 #define GUIOSGView_h
18 
19 // ===========================================================================
20 // included modules
21 // ===========================================================================
22 #include <config.h>
23 
24 #ifdef HAVE_OSG
25 
26 #include <string>
27 #include <osgGA/TerrainManipulator>
28 #include <osgViewer/Viewer>
29 #include <osg/PositionAttitudeTransform>
30 #include <osg/ShapeDrawable>
32 #include <utils/geom/Boundary.h>
33 #include <utils/geom/Position.h>
34 #include <utils/common/RGBColor.h>
36 #include <gui/GUISUMOViewParent.h>
38 
39 
40 // ===========================================================================
41 // class declarations
42 // ===========================================================================
43 class GUINet;
44 class GUISUMOViewParent;
45 class GUIVehicle;
46 class GUILaneWrapper;
47 class MSRoute;
48 namespace osgGA {
49 class CameraManipulator;
50 class NodeTrackerManipulator;
51 }
52 
53 
54 // ===========================================================================
55 // class definitions
56 // ===========================================================================
61 class GUIOSGView : public GUISUMOAbstractView {
62  FXDECLARE(GUIOSGView)
63 public:
68  class Command_TLSChange : public MSTLLogicControl::OnSwitchAction {
69  public:
78  Command_TLSChange(const MSLink* const link, osg::Switch* switchNode);
79 
80 
82  virtual ~Command_TLSChange();
83 
84 
91  void execute();
92 
93 
94  private:
96  const MSLink* const myLink;
97 
99  osg::ref_ptr<osg::Switch> mySwitch;
100 
102  LinkState myLastState;
103 
104 
105  private:
107  Command_TLSChange(const Command_TLSChange&);
108 
110  Command_TLSChange& operator=(const Command_TLSChange&);
111 
112  };
113 
114 
115  struct OSGMovable {
116  osg::ref_ptr<osg::PositionAttitudeTransform> pos;
117  osg::ref_ptr<osg::ShapeDrawable> geom;
118  osg::ref_ptr<osg::Switch> lights;
119  bool active;
120  };
121 
122 
124  GUIOSGView(FXComposite* p, GUIMainWindow& app,
125  GUISUMOViewParent* parent, GUINet& net, FXGLVisual* glVis,
126  FXGLCanvas* share);
127 
128  virtual ~GUIOSGView();
129 
131  virtual void buildViewToolBars(GUIGlChildWindow&);
132 
134  void recenterView();
135 
142  void centerTo(GUIGlID id, bool applyZoom, double zoomDist = 20);
143 
144  void showViewportEditor();
145 
147  void setViewportFromToRot(const Position& lookFrom, const Position& lookAt, double rotation);
148 
151 
155  void startTrack(int id);
156 
157 
160  void stopTrack();
161 
162 
166  GUIGlID getTrackedID() const;
167 
168  bool setColorScheme(const std::string& name);
169 
171  void onGamingClick(Position pos);
172 
175 
176  void removeVeh(MSVehicle* veh);
177  void removeTransportable(MSTransportable* t);
178 
179  // callback
180  long onConfigure(FXObject*, FXSelector, void*);
181  long onKeyPress(FXObject*, FXSelector, void*);
182  long onKeyRelease(FXObject*, FXSelector, void*);
183  long onLeftBtnPress(FXObject*, FXSelector, void*);
184  long onLeftBtnRelease(FXObject*, FXSelector, void*);
185  long onMiddleBtnPress(FXObject*, FXSelector, void*);
186  long onMiddleBtnRelease(FXObject*, FXSelector, void*);
187  long onRightBtnPress(FXObject*, FXSelector, void*);
188  long onRightBtnRelease(FXObject*, FXSelector, void*);
189  //long onMotion(FXObject*, FXSelector, void*);
190  long onMouseMove(FXObject*, FXSelector, void*);
191  long onPaint(FXObject*, FXSelector, void*);
192  long OnIdle(FXObject* sender, FXSelector sel, void* ptr);
193 
194 private:
195  class SUMOTerrainManipulator : public osgGA::TerrainManipulator {
196  public:
197  SUMOTerrainManipulator() {
198  setAllowThrow(false);
199  setRotationMode(ELEVATION_AZIM_ROLL); // default is ELEVATION_AZIM and this prevents rotating the view around the z-axis
200  }
201  bool performMovementLeftMouseButton(const double eventTimeDelta, const double dx, const double dy) {
202  return osgGA::TerrainManipulator::performMovementMiddleMouseButton(eventTimeDelta, dx, dy);
203  }
204  bool performMovementMiddleMouseButton(const double eventTimeDelta, const double dx, const double dy) {
205  return osgGA::TerrainManipulator::performMovementLeftMouseButton(eventTimeDelta, dx, dy);
206  }
207  bool performMovementRightMouseButton(const double eventTimeDelta, const double dx, const double dy) {
208  return osgGA::TerrainManipulator::performMovementRightMouseButton(eventTimeDelta, dx, -dy);
209  }
210  };
211 
212  class FXOSGAdapter : public osgViewer::GraphicsWindow {
213  public:
214  FXOSGAdapter(GUISUMOAbstractView* parent, FXCursor* cursor);
215  void grabFocus();
216  void grabFocusIfPointerInWindow() {}
217  void useCursor(bool cursorOn);
218 
219  bool makeCurrentImplementation();
220  bool releaseContext();
221  void swapBuffersImplementation();
222 
223  // not implemented yet...just use dummy implementation to get working.
224  bool valid() const {
225  return true;
226  }
227  bool realizeImplementation() {
228  return true;
229  }
230  bool isRealizedImplementation() const {
231  return true;
232  }
233  void closeImplementation() {}
234  bool releaseContextImplementation() {
235  return true;
236  }
237 
238  protected:
239  ~FXOSGAdapter();
240  private:
241  GUISUMOAbstractView* const myParent;
242  FXCursor* const myOldCursor;
243  };
244 
245 protected:
246 
247  osg::ref_ptr<FXOSGAdapter> myAdapter;
248  osg::ref_ptr<osgViewer::Viewer> myViewer;
249  osg::ref_ptr<osg::Group> myRoot;
250 
251 private:
252  GUIVehicle* myTracked;
253  osg::ref_ptr<osgGA::CameraManipulator> myCameraManipulator;
254 
255  SUMOTime myLastUpdate;
256 
257  std::map<MSVehicle*, OSGMovable > myVehicles;
258  std::map<MSTransportable*, OSGMovable > myPersons;
259 
260  osg::ref_ptr<osg::Node> myGreenLight;
261  osg::ref_ptr<osg::Node> myYellowLight;
262  osg::ref_ptr<osg::Node> myRedLight;
263  osg::ref_ptr<osg::Node> myRedYellowLight;
264 
265 protected:
266  GUIOSGView() { }
267 
268 };
269 
270 #endif
271 
272 #endif
273 
274 /****************************************************************************/
275 
276 
Boundary.h
GUISUMOAbstractView::setViewportFromToRot
virtual void setViewportFromToRot(const Position &lookFrom, const Position &lookAt, double rotation)
applies the given viewport settings
Definition: GUISUMOAbstractView.cpp:1366
GUISUMOAbstractView::showViewportEditor
virtual void showViewportEditor()
show viewport editor
Definition: GUISUMOAbstractView.cpp:1357
GUISUMOAbstractView::copyViewportTo
virtual void copyViewportTo(GUISUMOAbstractView *view)
copy the viewport to the given view
Definition: GUISUMOAbstractView.cpp:1374
GUISUMOAbstractView::stopTrack
virtual void stopTrack()
stop track
Definition: GUISUMOAbstractView.cpp:1430
GUISUMOAbstractView::onRightBtnPress
virtual long onRightBtnPress(FXObject *, FXSelector, void *)
Definition: GUISUMOAbstractView.cpp:967
GUISUMOAbstractView
Definition: GUISUMOAbstractView.h:72
MSTLLogicControl.h
GUISUMOViewParent
A single child window which contains a view of the simulation area.
Definition: GUISUMOViewParent.h:58
GUISUMOAbstractView::setColorScheme
virtual bool setColorScheme(const std::string &)
set color scheme
Definition: GUISUMOAbstractView.cpp:1389
GUISUMOAbstractView::buildViewToolBars
virtual void buildViewToolBars(GUIGlChildWindow &)
builds the view toolbars
Definition: GUISUMOAbstractView.h:83
GUISUMOAbstractView::centerTo
virtual void centerTo(GUIGlID id, bool applyZoom, double zoomDist=20)
centers to the chosen artifact
Definition: GUISUMOAbstractView.cpp:789
SUMOTime
long long int SUMOTime
Definition: SUMOTime.h:34
MSTransportable
Definition: MSTransportable.h:58
MSRoute
Definition: MSRoute.h:66
RGBColor.h
GUISUMOAbstractView::onRightBtnRelease
virtual long onRightBtnRelease(FXObject *, FXSelector, void *)
Definition: GUISUMOAbstractView.cpp:976
GUISUMOAbstractView.h
LinkState
LinkState
The right-of-way state of a link between two lanes used when constructing a NBTrafficLightLogic,...
Definition: SUMOXMLDefinitions.h:1137
GUISUMOAbstractView::onLeftBtnRelease
virtual long onLeftBtnRelease(FXObject *, FXSelector, void *)
Definition: GUISUMOAbstractView.cpp:943
GUISUMOAbstractView::getCurrentTimeStep
virtual SUMOTime getCurrentTimeStep() const
get the current simulation time
Definition: GUISUMOAbstractView.cpp:1315
GUIVehicle
A MSVehicle extended by some values for usage within the gui.
Definition: GUIVehicle.h:53
GUISUMOAbstractView::onMiddleBtnRelease
virtual long onMiddleBtnRelease(FXObject *, FXSelector, void *)
Definition: GUISUMOAbstractView.cpp:961
GUISUMOAbstractView::onConfigure
virtual long onConfigure(FXObject *, FXSelector, void *)
mouse functions
Definition: GUISUMOAbstractView.cpp:848
GUISUMOViewParent.h
Position
A point in 2D or 3D with translation and scaling methods.
Definition: Position.h:38
GUISUMOAbstractView::onKeyRelease
virtual long onKeyRelease(FXObject *o, FXSelector sel, void *data)
Definition: GUISUMOAbstractView.cpp:1085
GUISUMOAbstractView::startTrack
virtual void startTrack(int)
star track
Definition: GUISUMOAbstractView.cpp:1425
Position.h
GUISUMOAbstractView::onGamingClick
virtual void onGamingClick(Position)
on gaming click
Definition: GUISUMOAbstractView.cpp:1441
GUIMainWindow
Definition: GUIMainWindow.h:46
GUIGlID
unsigned int GUIGlID
Definition: GUIGlObject.h:42
GUISUMOAbstractView::onMiddleBtnPress
virtual long onMiddleBtnPress(FXObject *, FXSelector, void *)
Definition: GUISUMOAbstractView.cpp:955
GUISUMOAbstractView::onKeyPress
virtual long onKeyPress(FXObject *o, FXSelector sel, void *data)
keyboard functions
Definition: GUISUMOAbstractView.cpp:1074
config.h
GUISUMOAbstractView::recenterView
virtual void recenterView()
recenters the view
Definition: GUISUMOAbstractView.cpp:783
GUISUMOAbstractView::onLeftBtnPress
virtual long onLeftBtnPress(FXObject *, FXSelector, void *)
Definition: GUISUMOAbstractView.cpp:894
MSTLLogicControl::OnSwitchAction
Base class for things to execute if a tls switches to a new phase.
Definition: MSTLLogicControl.h:65
GUIGlChildWindow
Definition: GUIGlChildWindow.h:40
GUISUMOAbstractView::onMouseMove
virtual long onMouseMove(FXObject *, FXSelector, void *)
Definition: GUISUMOAbstractView.cpp:1013
GUINet
A MSNet extended by some values for usage within the gui.
Definition: GUINet.h:82
PositionVector.h
GUISUMOAbstractView::getTrackedID
virtual GUIGlID getTrackedID() const
get tracked id
Definition: GUISUMOAbstractView.cpp:1435
GUISUMOAbstractView::onPaint
virtual long onPaint(FXObject *, FXSelector, void *)
Definition: GUISUMOAbstractView.cpp:866
MSVehicle
Representation of a vehicle in the micro simulation.
Definition: MSVehicle.h:79