Advertisement
Guest User

viewer.h

a guest
Mar 12th, 2013
159
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.96 KB | None | 0 0
  1. #ifndef Viewer_hpp
  2. #define Viewer_hpp
  3.  
  4. #include <QtGui/QGridLayout>
  5. #include <QtGui/QWidget>
  6. #include <QtCore/QTimer>
  7. #include <osgViewer/CompositeViewer>
  8. #include <osgViewer/ViewerEventHandlers>
  9.  
  10. #include <osgGA/TrackballManipulator>
  11.  
  12. #include <osgDB/ReadFile>
  13.  
  14. #include <osgQt/GraphicsWindowQt>
  15.  
  16. class ViewerWidget : public QWidget, public osgViewer::CompositeViewer
  17. {
  18. public:
  19.     ViewerWidget(osgViewer::ViewerBase::ThreadingModel threadingModel= osgViewer::ViewerBase::ThreadPerCamera ) : QWidget()
  20.     {
  21.         setThreadingModel(threadingModel);
  22.     }
  23.    
  24.     QWidget* addViewWidget( osg::Camera* camera, osg::Node* scene )
  25.     {
  26.         osgViewer::View* view = new osgViewer::View;
  27.         view->setCamera( camera );
  28.         addView( view );
  29.        
  30.         view->setSceneData( scene );
  31.         view->addEventHandler( new osgViewer::StatsHandler );
  32.         view->setCameraManipulator( new osgGA::TrackballManipulator );
  33.        
  34.         osgQt::GraphicsWindowQt* gw = dynamic_cast<osgQt::GraphicsWindowQt*>( camera->getGraphicsContext() );
  35.         return gw ? gw->getGLWidget() : NULL;
  36.     }
  37.    
  38.     osg::Camera* createCamera( int x, int y, int w, int h, const std::string& name="", bool windowDecoration=true )
  39.     {
  40.         osg::DisplaySettings* ds = osg::DisplaySettings::instance().get();
  41.         osg::ref_ptr<osg::GraphicsContext::Traits> traits = new osg::GraphicsContext::Traits;
  42.         traits->windowName = name;
  43.         traits->windowDecoration = windowDecoration;
  44.         traits->x = x;
  45.         traits->y = y;
  46.         traits->width = w;
  47.         traits->height = h;
  48.         traits->doubleBuffer = true;
  49.         traits->alpha = ds->getMinimumNumAlphaBits();
  50.         traits->stencil = ds->getMinimumNumStencilBits();
  51.         traits->sampleBuffers = ds->getMultiSamples();
  52.         traits->samples = ds->getNumMultiSamples();
  53.        
  54.         osg::ref_ptr<osg::Camera> camera = new osg::Camera;
  55.         camera->setGraphicsContext( new osgQt::GraphicsWindowQt(traits.get()) );
  56.        
  57.         camera->setClearColor( osg::Vec4(0.2, 0.2, 0.6, 1.0) );
  58.         camera->setViewport( new osg::Viewport(0, 0, traits->width, traits->height) );
  59.         camera->setProjectionMatrixAsPerspective(
  60.             30.0f, static_cast<double>(traits->width)/static_cast<double>(traits->height), 1.0f, 10000.0f );
  61.         return camera.release();
  62.     }
  63.     void Do(void) {
  64.       QWidget* widget1 = addViewWidget( createCamera(0,0,100,100), osgDB::readNodeFile("cow.osgt") );
  65. //      osg::ref_ptr<osg::Node> node = new osg::Geode;
  66. //      QWidget* widget1 = addViewWidget( createCamera(0,0,100,100), node );
  67.       QGridLayout* grid = new QGridLayout;
  68.       grid->addWidget( widget1, 0, 0 );
  69.       setLayout( grid );
  70.       connect( &_timer, SIGNAL(timeout()), this, SLOT(update()) );
  71.       _timer.start( 10 );
  72.     }
  73.     void Add(void) {
  74.     }
  75.     virtual void paintEvent( QPaintEvent* event )
  76.     { frame(); }
  77.  
  78. protected:
  79.     QTimer _timer;
  80. };
  81.  
  82. #endif
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement