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

Reply via email to