vizkit3d
Vizkit3DWidget.hpp
Go to the documentation of this file.
1 #ifndef __VIZKIT_QVIZKITWIDGET__
2 #define __VIZKIT_QVIZKITWIDGET__
3 
4 #include "Vizkit3DPlugin.hpp"
5 
6 #include <QtDesigner/QDesignerExportWidget>
7 #include <QVector3D>
8 #include <QTimer>
9 
10 // disable tons of waringins in osg
11 // this is only valid for the rest of this
12 // file
13 #if defined(__clang__)
14  #pragma clang system_header
15 #elif defined(__GNUC__) || defined(__GNUG__)
16  #pragma GCC system_header
17 #endif
18 #include <osgViewer/CompositeViewer>
19 #include <osgGA/CameraManipulator>
20 
21 namespace osgQt { class GraphicsWindowQt;}
22 namespace vizkit3d
23 {
24  class EnvPluginBase;
25  class Vizkit3DWidget;
26 
33  {
130  };
131 
132  // configuration class
133  class Vizkit3DConfig :public QObject
134  {
135  Q_OBJECT
136 
137  private:
138  Q_PROPERTY( bool axes READ isAxes WRITE setAxes)
139  Q_PROPERTY( bool axes_labels READ isAxesLabels WRITE setAxesLabels)
140  Q_PROPERTY( QColor background READ getBackgroundColor WRITE setBackgroundColor)
141  Q_PROPERTY( QStringList frame READ getVisualizationFrames WRITE setVisualizationFrame)
143  Q_PROPERTY( bool transformer READ isTransformer WRITE setTransformer)
144  Q_ENUMS( CAMERA_MANIPULATORS )
147 
148  public:
150  Vizkit3DWidget* getWidget() const;
151 
152  signals:
153  void propertyChanged(QString);
154 
155  public slots:
156  bool isAxes() const;
157  void setAxes(bool value);
158 
159  bool isAxesLabels() const;
160  void setAxesLabels(bool value);
161  QStringList getVisualizationFrames() const;
162  void setVisualizationFrame(const QStringList &frames);
163 
164  bool isTransformer() const;
165  void setTransformer(bool value);
166 
167  bool isEnvironmentPluginEnabled() const;
168  void setEnvironmentPluginEnabled(bool enabled);
169 
170  float getTransformerTextSize() const;
171  void setTransformerTextSize(float value);
172 
173  QColor getBackgroundColor()const;
174  void setBackgroundColor(QColor color);
175 
177  static QString manipulatorIDToName(CAMERA_MANIPULATORS id);
179  static CAMERA_MANIPULATORS manipulatorNameToID(QString const& name);
180 
182  void setCameraManipulator(QStringList const& manipulators);
186  QStringList getAvailableCameraManipulators() const;
187  };
188 
189  class QDESIGNER_WIDGET_EXPORT Vizkit3DWidget : public QWidget, public osgViewer::CompositeViewer
190  {
191  Q_OBJECT
192  public:
193  static osg::Vec3d const DEFAULT_EYE;
194  static osg::Vec3d const DEFAULT_CENTER;
195  static osg::Vec3d const DEFAULT_UP;
196 
197  friend class VizPluginBase;
198  Vizkit3DWidget(QWidget* parent = 0,const QString &world_name = "world_osg",bool auto_update = true);
199 
205  ~Vizkit3DWidget();
206 
207  osg::Group* getRootNode() const;
214  void setTrackedNode(osg::Node* node, QString tracked_object_name);
219  void setTrackedNode(vizkit3d::VizPluginBase* plugin);
220 
221  QSize sizeHint() const;
222 
229  void setCameraManipulator(osg::ref_ptr<osgGA::CameraManipulator> manipulator, bool resetToDefaultHome = false);
230 
231  public slots:
232  void addPlugin(QObject* plugin, QObject* parent = NULL);
233  void removePlugin(QObject* plugin);
234 
237  QString getRootVisualizationFrame() const;
238 
242  void setVisualizationFrame(const QString &frame, bool update)
243  { return setVisualizationFrame(frame); }
244 
248  void setVisualizationFrame(const QString &frame);
249 
252  void setRootFrame(QString frame);
253 
254  // we have to use a pointer here otherwise qt ruby is crashing
255  QStringList* getVisualizationFramesRuby() const;
256  QStringList getVisualizationFrames() const;
257  QString getVisualizationFrame() const;
258 
265  void setPluginDataFrame(const QString &frame, QObject *plugin);
266  QString getPluginDataFrame(QObject *plugin)const;
267 
268  void setTransformation(const QString &source_frame,const QString &target_frame,
269  const QVector3D &position, const QQuaternion &orientation);
270  void getTransformation(const QString &source_frame,const QString &target_frame, QVector3D &position, QQuaternion &orientation)const;
271  QString getWorldName()const;
272 
273  void setCameraLookAt(double x, double y, double z);
274  void setCameraEye(double x, double y, double z);
275  void setCameraUp(double x, double y, double z);
276  void getCameraView(QVector3D& eye, QVector3D& lookAt, QVector3D& up);
277 
278  void setSmallFeatureCullingPixelSize(float val);
279 
280  QColor getBackgroundColor()const;
281  void setBackgroundColor(QColor color);
282 
283  void collapsePropertyBrowser();
284  QWidget* getPropertyWidget()const;
285 
286  bool isTransformer() const;
287  void setTransformer(bool value);
288  float getTransformerTextSize() const;
289  void setTransformerTextSize(float value);
290  bool isAxes() const;
291  void setAxes(bool value);
292 
293  bool isAxesLabels() const;
294  void setAxesLabels(bool value);
299  void enableGrabbing();
305  void disableGrabbing();
311  QImage grab();
312 
313  QString findPluginPath(QString plugin_name);
314  QString findLibPath(QString lib_name);
315  QObject* loadPlugin(QString lib_name,QString plugin_name);
316  QStringList* getAvailablePlugins();
317 
319  void setCameraManipulator(QString manipulator, bool resetToDefaultHome = false);
321  void setCameraManipulator(CAMERA_MANIPULATORS manipulator, bool resetToDefaultHome = false);
325  QString getCameraManipulatorName() const;
327  CAMERA_MANIPULATORS getCameraManipulator() const;
328 
338  void setEnvironmentPlugin(QObject* plugin);
339 
344  void setEnvironmentPluginEnabled(bool enabled);
345 
351  bool isEnvironmentPluginEnabled() const;
352 
359  void clearEnvironmentPlugin();
360 
361  signals:
362  void addPlugins(QObject* plugin,QObject* parent);
363  void removePlugins(QObject* plugin);
364  void propertyChanged(QString propertyName);
365 
366  protected:
367  virtual void paintEvent( QPaintEvent* event );
368 
369  private slots:
370  void setPluginDataFrameIntern(const QString &frame, QObject *plugin);
371  void addPluginIntern(QObject* plugin,QObject *parent=NULL);
372  void removePluginIntern(QObject* plugin);
373  void pluginActivityChanged(bool enabled);
374  void pluginChildrenChanged();
375  void addProperties(QObject* plugin,QObject *parent=NULL);
376 
377  private:
378  // Helper method for setPluginEnabled
379  void enableEnvironmentPlugin();
380  // Helper method for setPluginEnabled
381  void disableEnvironmentPlugin();
382  void changeCameraView(const osg::Vec3* lookAtPos, const osg::Vec3* eyePos, const osg::Vec3* upVector);
383  void setPluginEnabled(QObject* plugin, bool enabled);
384  QObject* loadLib(QString file_path);
385 
386  void registerDataHandler(VizPluginBase *viz);
387  void deregisterDataHandler(VizPluginBase *viz);
388  void enableDataHandler(VizPluginBase *viz);
389  void disableDataHandler(VizPluginBase *viz);
390  osg::Group *createSceneGraph(const QString &world_name);
391 
392  QWidget* addViewWidget( osgQt::GraphicsWindowQt* gw, ::osg::Node* scene );
393  osgQt::GraphicsWindowQt* createGraphicsWindow( int x, int y, int w, int h, const std::string& name="", bool windowDecoration=false );
394 
395  private:
396  //holds the scene
397  osg::ref_ptr<osg::Group> root;
398 
399  // The name of a frame that should be directly attached to osg_world
400  QString root_frame;
401 
402  //the plugin currently used as environment plugin
403  EnvPluginBase* env_plugin;
404 
408  struct VizPluginInfo {
409  osg::ref_ptr<osg::Group> osg_group_ptr;
410  QWeakPointer<VizPluginBase> weak_ptr;
411 
412  VizPluginInfo(VizPluginBase* plugin_ptr_, osg::ref_ptr<osg::Group> osg_group_ptr_)
413  : osg_group_ptr(osg_group_ptr_),
414  weak_ptr(plugin_ptr_)
415  {
416  }
417  };
418  typedef std::map<VizPluginBase*, VizPluginInfo> PluginMap;
419  PluginMap plugins;
420 
421  QTimer _timer;
422 
424  QString current_frame;
425 
430  QString tracked_object_name;
431 
432  osg::ref_ptr<osg::Image> grabImage;
433 
434  CAMERA_MANIPULATORS last_manipulator;
435  CAMERA_MANIPULATORS current_manipulator;
436 
437  osg::ref_ptr<osg::Referenced> captureHandler;
438  osg::ref_ptr<osg::Referenced> captureOperation;
439  };
440 }
441 #endif
Definition: Vizkit3DWidget.hpp:129
static QString manipulatorIDToName(CAMERA_MANIPULATORS id)
Definition: Vizkit3DWidget.cpp:177
Definition: Vizkit3DWidget.hpp:118
CAMERA_MANIPULATORS
Definition: Vizkit3DWidget.hpp:32
QColor background
Definition: Vizkit3DWidget.hpp:140
void setAxes(bool value)
Definition: Vizkit3DWidget.cpp:64
bool transformer
Definition: Vizkit3DWidget.hpp:143
bool axes
Definition: Vizkit3DWidget.hpp:138
Definition: Vizkit3DWidget.hpp:189
Definition: Vizkit3DWidget.hpp:104
Definition: Vizkit3DWidget.hpp:133
void setTransformer(bool value)
Definition: Vizkit3DWidget.cpp:87
bool isEnvironmentPluginEnabled() const
Definition: Vizkit3DWidget.cpp:92
bool isAxes() const
Definition: Vizkit3DWidget.cpp:59
float getTransformerTextSize() const
Definition: Vizkit3DWidget.cpp:102
void setVisualizationFrame(const QStringList &frames)
Definition: Vizkit3DWidget.cpp:77
void setAxesLabels(bool value)
Definition: Vizkit3DWidget.cpp:122
QStringList getVisualizationFrames() const
Definition: Vizkit3DWidget.cpp:69
bool isAxesLabels() const
Definition: Vizkit3DWidget.cpp:127
QStringList getAvailableCameraManipulators() const
Definition: Vizkit3DWidget.cpp:155
Vizkit3DWidget * getWidget() const
Definition: Vizkit3DWidget.cpp:46
bool environment
Definition: Vizkit3DWidget.hpp:142
QColor getBackgroundColor() const
Definition: Vizkit3DWidget.cpp:112
Definition: Vizkit3DWidget.hpp:79
void setCameraManipulator(QStringList const &manipulators)
Definition: Vizkit3DWidget.cpp:197
static CAMERA_MANIPULATORS manipulatorNameToID(QString const &name)
Definition: Vizkit3DWidget.cpp:187
QStringList manipulator
Definition: Vizkit3DWidget.hpp:145
static osg::Vec3d const DEFAULT_UP
Definition: Vizkit3DWidget.hpp:195
void setEnvironmentPluginEnabled(bool enabled)
Definition: Vizkit3DWidget.cpp:97
bool isTransformer() const
Definition: Vizkit3DWidget.cpp:82
static osg::Vec3d const DEFAULT_EYE
Definition: Vizkit3DWidget.hpp:193
static osg::Vec3d const DEFAULT_CENTER
Definition: Vizkit3DWidget.hpp:194
void setBackgroundColor(QColor color)
Definition: Vizkit3DWidget.cpp:117
QStringList frame
Definition: Vizkit3DWidget.hpp:141
void propertyChanged(QString)
Definition: Vizkit3DWidget.hpp:122
Definition: Vizkit3DWidget.hpp:51
Definition: Vizkit3DWidget.hpp:127
Definition: Vizkit3DWidget.hpp:68
Definition: Vizkit3DWidget.hpp:114
double transformerTextSize
Definition: Vizkit3DWidget.hpp:146
Definition: EnvPluginBase.hpp:14
void setVisualizationFrame(const QString &frame, bool update)
Definition: Vizkit3DWidget.hpp:242
void setTransformerTextSize(float value)
Definition: Vizkit3DWidget.cpp:107
bool axes_labels
Definition: Vizkit3DWidget.hpp:139
Definition: Vizkit3DPlugin.hpp:110