Hi Marco, I don't really have any idea what might be up, it's very strange that not all tabs are appearing, I haven't seen or heard of similar problems before.
As a long shot could you try changing the viewer threading model to SingleThreaded. Robert. On Fri, Sep 9, 2011 at 12:02 PM, Marco Fiocco <marco.fio...@gmail.com> wrote: > Hi, I've tried to use a TabBoxDragger inside a CompositeViewer using Qt, by > modifying the osgviewerQT example. > Something very weird happens - the dragger handles are drawn for every face > except one! > If Qt is not used it works correctly, but I need Qt. > Could you help me to find a workaround? I don't understand if it is a bug of > osgQt or TabBoxDragger... > Here is the code that I'm compiling, and in the attached screenshot you can > see the problem in the top left window. > Thank you very much in advance, > Marco > ---SOURCE CODE--- > osg::Node* addDraggerToScene(osg::Node* scene, const std::string& name) > { > //scene->getOrCreateStateSet()->setMode(GL_NORMALIZE, 1); > osg::MatrixTransform* selection = new osg::MatrixTransform; > selection->addChild(scene); > osgManipulator::TabBoxDragger* dragger = new > osgManipulator::TabBoxDragger(); > dragger->setupDefaultGeometry(); > osg::Group* root = new osg::Group; > root->addChild(selection); > > root->addChild(dragger); > float scale = scene->getBound().radius() * 1.6; > dragger->setMatrix(osg::Matrix::scale(scale, scale, scale) * > osg::Matrix::translate(scene->getBound().center())); > dragger->addTransformUpdating(selection); > // we want the dragger to handle it's own events automatically > dragger->setHandleEvents(true); > // if we don't set an activation key or mod mask then any mouse click on > // the dragger will activate it, however if do define either of > ActivationModKeyMask or > // and ActivationKeyEvent then you'll have to press either than mod key > or the specified key to > // be able to activate the dragger when you mouse click on it. Please > note the follow allows > // activation if either the ctrl key or the 'a' key is pressed and held > down. > dragger->setActivationModKeyMask(osgGA::GUIEventAdapter::MODKEY_CTRL); > dragger->setActivationKeyEvent('a'); > return root; > } > void addClipBox(osg::Group * scene) > { > osg::Group* root = new osg::Group; > QString model_filepath = > QString("C:/OpenSceneGraph-3.1/bin/OpenSceneGraph-Data-2.8.0/cow.osg"); > osg::Node* subgraph = osgDB::readNodeFile(model_filepath.toAscii().data() > ); > osg::ref_ptr<osg::Geode> geode_1 = new osg::Geode; > osg::ref_ptr<osg::MatrixTransform> transform_1 = new > osg::MatrixTransform; > const float radius = 0.8f; > const float height = 1.0f; > osg::ref_ptr<osg::TessellationHints> hints = new osg::TessellationHints; > hints->setDetailRatio(2.0f); > osg::ref_ptr<osg::ShapeDrawable> shape; > shape = new osg::ShapeDrawable(new osg::Box(osg::Vec3(0.0f, 0.0f, > -2.0f), 10, 10.0f, 0.1f), hints.get()); > shape->setColor(osg::Vec4(0.5f, 0.5f, 0.7f, 1.0f)); > geode_1->addDrawable(shape.get()); > //osg::ref_ptr<osg::MatrixTransform> transform_1 = new > osg::MatrixTransform; > transform_1.get()->addChild(addDraggerToScene(geode_1.get(),"TabBoxDragger")); > root->addChild(transform_1.get()); > scene->addChild(root); > } > class ViewerWidget : public QWidget, public osgViewer::CompositeViewer > { > public: > ViewerWidget(osgViewer::ViewerBase::ThreadingModel > threadingModel=osgViewer::CompositeViewer::SingleThreaded) : QWidget() > { > setThreadingModel(threadingModel); > osg::Group * _root = new osg::Group; > > //_root->addChild(osgDB::readNodeFile("C:/OpenSceneGraph-3.1/bin/OpenSceneGraph-Data-2.8.0/cow.osg")); > QWidget* widget1 = addViewWidget( createCamera(0,0,100,100), _root > ); > QWidget* widget2 = addViewWidget( createCamera(0,0,100,100), > osgDB::readNodeFile("C:/OpenSceneGraph-3.1/bin/OpenSceneGraph-Data-2.8.0/glider.osg") > ); > QWidget* widget3 = addViewWidget( createCamera(0,0,100,100), > osgDB::readNodeFile("C:/OpenSceneGraph-3.1/bin/OpenSceneGraph-Data-2.8.0/axes.osg") > ); > QWidget* widget4 = addViewWidget( createCamera(0,0,100,100), > osgDB::readNodeFile("C:/OpenSceneGraph-3.1/bin/OpenSceneGraph-Data-2.8.0/fountain.osg") > ); > QWidget* popupWidget = addViewWidget( > createCamera(900,100,320,240,"Popup window",true), > > osgDB::readNodeFile("C:\OpenSceneGraph-3.1\bin\OpenSceneGraph-Data-2.8.0\dumptruck.osgt") > ); > popupWidget->show(); > addClipBox(_root); > QGridLayout* grid = new QGridLayout; > grid->addWidget( widget1, 0, 0 ); > grid->addWidget( widget2, 0, 1 ); > grid->addWidget( widget3, 1, 0 ); > grid->addWidget( widget4, 1, 1 ); > setLayout( grid ); > connect( &_timer, SIGNAL(timeout()), this, SLOT(update()) ); > _timer.start( 10 ); > } > > QWidget* addViewWidget( osg::Camera* camera, osg::Node* scene ) > { > osgViewer::View* view = new osgViewer::View; > view->setCamera( camera ); > addView( view ); > > view->setSceneData( scene ); > view->addEventHandler( new osgViewer::StatsHandler ); > view->setCameraManipulator( new osgGA::TrackballManipulator ); > > osgQt::GraphicsWindowQt* gw = > dynamic_cast<osgQt::GraphicsWindowQt*>( camera->getGraphicsContext() ); > return gw ? gw->getGLWidget() : NULL; > } > > osg::Camera* createCamera( int x, int y, int w, int h, const > std::string& name="", bool windowDecoration=false ) > { > osg::DisplaySettings* ds = osg::DisplaySettings::instance().get(); > osg::ref_ptr<osg::GraphicsContext::Traits> traits = new > osg::GraphicsContext::Traits; > traits->windowName = name; > traits->windowDecoration = windowDecoration; > traits->x = x; > traits->y = y; > traits->width = w; > traits->height = h; > traits->doubleBuffer = true; > traits->alpha = ds->getMinimumNumAlphaBits(); > traits->stencil = ds->getMinimumNumStencilBits(); > traits->sampleBuffers = ds->getMultiSamples(); > traits->samples = ds->getNumMultiSamples(); > > osg::ref_ptr<osg::Camera> camera = new osg::Camera; > camera->setGraphicsContext( new > osgQt::GraphicsWindowQt(traits.get()) ); > > camera->setClearColor( osg::Vec4(0.2, 0.2, 0.6, 1.0) ); > camera->setViewport( new osg::Viewport(0, 0, traits->width, > traits->height) ); > camera->setProjectionMatrixAsPerspective( > 30.0f, > static_cast<double>(traits->width)/static_cast<double>(traits->height), > 1.0f, 10000.0f ); > return camera.release(); > } > > virtual void paintEvent( QPaintEvent* event ) > { frame(); } > protected: > > QTimer _timer; > }; > > int main( int argc, char** argv ) > { > osg::ArgumentParser arguments(&argc, argv); > osgViewer::ViewerBase::ThreadingModel threadingModel = > osgViewer::ViewerBase::CullDrawThreadPerContext; > while (arguments.read("--SingleThreaded")) threadingModel = > osgViewer::ViewerBase::SingleThreaded; > while (arguments.read("--CullDrawThreadPerContext")) threadingModel = > osgViewer::ViewerBase::CullDrawThreadPerContext; > while (arguments.read("--DrawThreadPerContext")) threadingModel = > osgViewer::ViewerBase::DrawThreadPerContext; > while (arguments.read("--CullThreadPerCameraDrawThreadPerContext")) > threadingModel = > osgViewer::ViewerBase::CullThreadPerCameraDrawThreadPerContext; > > QApplication app(argc, argv); > ViewerWidget* viewWidget = new ViewerWidget(threadingModel); > viewWidget->setGeometry( 100, 100, 800, 600 ); > viewWidget->show(); > return app.exec(); > } > _______________________________________________ > osg-users mailing list > osg-users@lists.openscenegraph.org > http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org > > _______________________________________________ osg-users mailing list osg-users@lists.openscenegraph.org http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org