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