From 4f5a421c819171dd5a5417e178963961574f3599 Mon Sep 17 00:00:00 2001 From: Robert Osfield Date: Tue, 5 Jun 2007 19:10:18 +0000 Subject: [PATCH] Added support for CompositeViewer --- examples/osgviewerQT/osgviewerQT.cpp | 72 +++++++++++++++++++++++++--- 1 file changed, 66 insertions(+), 6 deletions(-) diff --git a/examples/osgviewerQT/osgviewerQT.cpp b/examples/osgviewerQT/osgviewerQT.cpp index aee7508c1..86c3454f6 100644 --- a/examples/osgviewerQT/osgviewerQT.cpp +++ b/examples/osgviewerQT/osgviewerQT.cpp @@ -1,6 +1,7 @@ // C++ source file - (C) 2003 Robert Osfield, released under the OSGPL. #include +#include #include #include #include @@ -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 loadedModel = osgDB::readNodeFile(argv[1]); + osg::ref_ptr 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(width)/static_cast(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(width)/static_cast(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();