Added support for CompositeViewer
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
// C++ source file - (C) 2003 Robert Osfield, released under the OSGPL.
|
||||
|
||||
#include <osgViewer/Viewer>
|
||||
#include <osgViewer/CompositeViewer>
|
||||
#include <osgViewer/StatsHandler>
|
||||
#include <osgGA/TrackballManipulator>
|
||||
#include <osgDB/ReadFile>
|
||||
@@ -129,7 +130,29 @@ class ViewerQT : public osgViewer::Viewer, public AdapterWidget
|
||||
protected:
|
||||
|
||||
QTimer _timer;
|
||||
};
|
||||
|
||||
class CompositeViewerQT : public osgViewer::CompositeViewer, public AdapterWidget
|
||||
{
|
||||
public:
|
||||
|
||||
CompositeViewerQT(QWidget * parent = 0, const char * name = 0, const QGLWidget * shareWidget = 0, WFlags f = 0):
|
||||
AdapterWidget( parent, name, shareWidget, f )
|
||||
{
|
||||
setThreadingModel(osgViewer::CompositeViewer::SingleThreaded);
|
||||
|
||||
connect(&_timer, SIGNAL(timeout()), this, SLOT(updateGL()));
|
||||
_timer.start(10);
|
||||
}
|
||||
|
||||
virtual void paintGL()
|
||||
{
|
||||
frame();
|
||||
}
|
||||
|
||||
protected:
|
||||
|
||||
QTimer _timer;
|
||||
};
|
||||
|
||||
int main( int argc, char **argv )
|
||||
@@ -142,22 +165,59 @@ int main( int argc, char **argv )
|
||||
return 1;
|
||||
}
|
||||
|
||||
osg::ArgumentParser arguments(&argc, argv);
|
||||
|
||||
// load the scene.
|
||||
osg::ref_ptr<osg::Node> loadedModel = osgDB::readNodeFile(argv[1]);
|
||||
osg::ref_ptr<osg::Node> loadedModel = osgDB::readNodeFiles(arguments);
|
||||
if (!loadedModel)
|
||||
{
|
||||
std::cout << argv[0] <<": No data loaded." << std::endl;
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
if (arguments.read("--CompositeViewer"))
|
||||
{
|
||||
CompositeViewerQT* viewerWindow = new CompositeViewerQT;
|
||||
|
||||
unsigned int width = viewerWindow->width();
|
||||
unsigned int height = viewerWindow->height();
|
||||
|
||||
{
|
||||
osgViewer::View* view1 = new osgViewer::View;
|
||||
view1->getCamera()->setGraphicsContext(viewerWindow->getGraphicsWindow());
|
||||
view1->getCamera()->setProjectionMatrixAsPerspective(30.0f, static_cast<double>(width)/static_cast<double>(height/2), 1.0, 1000.0);
|
||||
view1->getCamera()->setViewport(new osg::Viewport(0,0,width,height/2));
|
||||
view1->setCameraManipulator(new osgGA::TrackballManipulator);
|
||||
view1->setSceneData(loadedModel.get());
|
||||
|
||||
viewerWindow->addView(view1);
|
||||
}
|
||||
|
||||
{
|
||||
osgViewer::View* view2 = new osgViewer::View;
|
||||
view2->getCamera()->setGraphicsContext(viewerWindow->getGraphicsWindow());
|
||||
view2->getCamera()->setProjectionMatrixAsPerspective(30.0f, static_cast<double>(width)/static_cast<double>(height/2), 1.0, 1000.0);
|
||||
view2->getCamera()->setViewport(new osg::Viewport(0,height/2,width,height/2));
|
||||
view2->setCameraManipulator(new osgGA::TrackballManipulator);
|
||||
view2->setSceneData(loadedModel.get());
|
||||
|
||||
viewerWindow->addView(view2);
|
||||
}
|
||||
|
||||
ViewerQT* viewerWindow = new ViewerQT;
|
||||
viewerWindow->show();
|
||||
}
|
||||
else
|
||||
{
|
||||
ViewerQT* viewerWindow = new ViewerQT;
|
||||
|
||||
viewerWindow->setSceneData(loadedModel.get());
|
||||
viewerWindow->setCameraManipulator(new osgGA::TrackballManipulator);
|
||||
viewerWindow->addEventHandler(new osgViewer::StatsHandler);
|
||||
viewerWindow->setCameraManipulator(new osgGA::TrackballManipulator);
|
||||
viewerWindow->setSceneData(loadedModel.get());
|
||||
|
||||
viewerWindow->show();
|
||||
viewerWindow->show();
|
||||
}
|
||||
|
||||
|
||||
a.connect( &a, SIGNAL(lastWindowClosed()), &a, SLOT(quit()) );
|
||||
|
||||
return a.exec();
|
||||
|
||||
Reference in New Issue
Block a user