Jean-Yves Didier

Mise en place d'un viewer osg qui tient la route.

#include "osgviewer.h"
#include <osgViewer/ViewerEventHandlers>
#include <osgGA/StateSetManipulator>
#include <osgGA/TrackballManipulator>
#include <osg/DisplaySettings>
#include <osg/GraphicsContext>
#include <QGridLayout>
#include <iostream>
OSGViewer::OSGViewer(QObject *parent) :
osgQt::GLWidget(dynamic_cast<QWidget*>(parent))
{
viewer = new osgViewer::Viewer();
osgQt::GraphicsWindowQt* graphicsWindow = new osgQt::GraphicsWindowQt(this);
viewer->setThreadingModel(osgViewer::Viewer::AutomaticSelection);
resize(640,480);
viewer->getCamera()->setGraphicsContext(graphicsWindow);
viewer->getCamera()->setViewport(new osg::Viewport(0,0,width(),height()));
if (!viewer->getCameraManipulator() && viewer->getCamera()->getAllowEventFocus())
viewer->setCameraManipulator(new osgGA::TrackballManipulator());
viewer->addEventHandler(new osgViewer::StatsHandler);
viewer->addEventHandler(new osgViewer::WindowSizeHandler);
viewer->addEventHandler(new osgGA::StateSetManipulator(viewer->getCamera()->getOrCreateStateSet()));
osgQt::setViewer(viewer);
}
#ifndef __OSGVIEWER_H__
#define __OSGVIEWER_H__
#include <QObject>
#include <QWidget>
#include <osgViewer/Viewer>
#include <osgQt/GraphicsWindowQt>
#include <QTimer>
#include <iostream>
class OSGViewer : public osgQt::GLWidget
{
Q_OBJECT
public:
explicit OSGViewer(QObject *parent = 0);
public slots:
void setSceneData(osg::Object *object)
{
osg::Node* node = dynamic_cast<osg::Node*>(object);
if (node)
{
viewer->setSceneData(node);
}
}
void realize() { show(); redrawScene(); }
private slots:
void redrawScene() { viewer->frame(); QTimer::singleShot(25,this,SLOT(redrawScene())); }
private:
osgViewer::Viewer* viewer;
};
#endif // OSGVIEWER_H