Here is the code:

Code:

class ViewerWidget : public osgQt::GLWidget, public osgViewer::CompositeViewer
{
   Q_OBJECT

public:

    ViewerWidget(QWidget* iParent = 0, const QGLWidget* iShareWidget = 0, 
Qt::WindowFlags iFlags = 0)
    : osgQt::GLWidget(iParent, iShareWidget, iFlags)
    , timer(0)
    {
        osgViewer::View* view = new osgViewer::View;
        addView(view);

        osg::GraphicsContext::WindowingSystemInterface* wsi = 
osg::GraphicsContext::getWindowingSystemInterface();
        osg::GraphicsContext::ScreenSettings settings;
        osg::GraphicsContext::Traits traits;
        wsi->getScreenSettings(traits, settings);
        setGraphicsWindow(view->getCamera(), settings.width, settings.height);

        osg::Group* scene = new osg::Group;
        view->setSceneData(scene);
        view->setCameraManipulator(new osgGA::TrackballManipulator);

        // used to update the 3D scene on scene modification and so on ...
        connect(&timer, SIGNAL(timeout()), this, SLOT(update()));

        timer.start(16);
    }

public slots:

   void deleteView()
   {
       removeView(view.get());
   }

   void createView()
   {
       view = new osgViewer::View;
       //view->getCamera()->setClearMask(GL_DEPTH_BUFFER_BIT);
       osg::Viewport* viewport = new osg::Viewport(0.0, 0.0, 100.0, 100.0);
       view->getCamera()->setViewport(viewport);
       //view->addEventHandler(new DragViewHandler(viewport));
       //view->addEventHandler(new ResizeViewHandler(viewport));

       graphics = new osg::Group;
       graphics->getOrCreateStateSet()->setMode(GL_NORMALIZE, 
osg::StateAttribute::ON);

       transform = new osg::PositionAttitudeTransform;
       transform->setDataVariance(osg::Object::DYNAMIC);
       transform->addChild(graphics);

       view->setSceneData(transform);

       
view->getCamera()->setGraphicsContext(getView(0)->getCamera()->getGraphicsContext());
       view->getCamera()->setClearColor(osg::Vec4f(1.0, 0.0, 0.0, 0.5));
       addView(view);
   }

protected:

   virtual void paintEvent(QPaintEvent* iEvent)
   {
      frame();
   }

private:
   QTimer timer;

   osg::ref_ptr<osgViewer::View> view;
   osg::ref_ptr<osg::PositionAttitudeTransform> transform;
   osg::ref_ptr<osg::Group> graphics;

   void setGraphicsWindow(osg::Camera* iCamera, int iWidth, int iHeight)
   {
      osgQt::GraphicsWindowQt* graphicWindow = new 
osgQt::GraphicsWindowQt(this);
      iCamera->setGraphicsContext(graphicWindow);
      iCamera->setClearColor(osg::Vec4(0.2, 0.2, 0.6, 1.0));
      iCamera->setViewport(new osg::Viewport(0, 0, iWidth, iHeight));
      double aspect_ratio = 2.0 * 
static_cast<double>(iWidth)/static_cast<double>(iHeight);
      iCamera->setProjectionMatrixAsPerspective(30.0, aspect_ratio, 1.0, 
10000.0);
   }
};

class TestWidget : public QWidget
{
    Q_OBJECT
public:
    TestWidget() : QWidget()
    {
        ViewerWidget* viewWidget = new ViewerWidget();
        viewWidget->setGeometry( 100, 100, 800, 600 );

        QGridLayout* grid = new QGridLayout;
        grid->addWidget( viewWidget, 0, 0 );
        QPushButton* createButton = new QPushButton("create view", this);
        grid->addWidget( createButton, 1, 0);
        QPushButton* removeButton = new QPushButton("remove view", this);
        grid->addWidget( removeButton, 2, 0);
        setLayout( grid );
        connect(createButton, SIGNAL(clicked()), viewWidget, 
SLOT(createView()));
        connect(removeButton, SIGNAL(clicked()), viewWidget, 
SLOT(deleteView()));
    }
};

#include "main.moc"

int main( int argc, char** argv )
{
    QApplication app(argc, argv);
    TestWidget* testWidget = new TestWidget();
    testWidget->show();
    return app.exec();
}



------------------
Read this topic online here:
http://forum.openscenegraph.org/viewtopic.php?p=57535#57535




Attachments: 
http://forum.openscenegraph.org//files/main_823.cpp


_______________________________________________
osg-users mailing list
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

Reply via email to