Hi Thomas,

The file came though inlined,  could you send it through zipped to
default your mailers inlining of text files.  There are details on
this issue on the SubmissionsProtocol page:

http://www.openscenegraph.org/projects/osg/wiki/MailingLists/SubmissionsProtocol


Robert.


On Thu, Mar 20, 2008 at 2:22 PM, Tomas Hnilica
<[EMAIL PROTECTED]> wrote:
> Hi Robert,
>
>  attached is modified source of AdapterWidget.cpp file. Original was
>  token today from SVN - trunk. (2.3.6).
>  --mdi option needs to be set to run MDI version.
>
>  Tomas
>
>  Robert Osfield napsal(a):
>
>
> > HI Tomas,
>  >
>  > I can't think of what might be amiss without trying it out.
>  >
>  > Could modify the osgviewerQT example so that it has another optional
>  > code path in creating a viewer based on your code.  This will allow
>  > others to try out your usage model and see first hand what is wrong.
>  > I can also merge these changes so we can use it as a unit test in
>  > future - and getting it working too obviously :-)
>  >
>  > Robert.
>  >
>  > On Thu, Mar 20, 2008 at 11:07 AM, Tomas Hnilica
>  > <[EMAIL PROTECTED]> wrote:
>  >
>  >> Hello all OSG users,
>  >>
>  >>  I found few issues by intergration OSG(2.2.0) with QT (4.3.3) :
>  >>  The ViewerQT class from OSG-2.2.0 works well in the osqviewerQT.cpp
>  >>  example.
>  >>  But when I add it to existing QT window, I have these problems:
>  >>  - no keyboard actions are emitted to OSG, mouse works ok
>  >>  - when resizing the MDI window to minimum (like with minimize button,
>  >>  but done as resizing) the scene disappears by resizing back.
>  >>
>  >>  I changed the osgviewerQT example by replacin the viewerWindow->show();
>  >>  with these code:
>  >>  -------------------------------------------
>  >>        ViewerQT* viewerWindow = new ViewerQT;
>  >>        viewerWindow->setCameraManipulator(new 
> osgGA::TrackballManipulator);
>  >>        viewerWindow->setSceneData(loadedModel.get());
>  >>
>  >>        QMainWindow* mw = new QMainWindow();
>  >>        QMdiArea* mdiArea = new QMdiArea(mw);
>  >>        mw->setCentralWidget(mdiArea);
>  >>
>  >>        QMdiSubWindow *subWindow = mdiArea->addSubWindow(viewerWindow);
>  >>        subWindow->resize(200,100);
>  >>        subWindow->showNormal();
>  >>        subWindow->setWindowTitle("New Window");
>  >>        mw->show();
>  >>  -------------------------------------------
>  >>
>  >>
>  >>  I hope these problems are more OSG than QT related...
>  >>
>  >>  Many thanks,
>  >>  Tomas
>  >>  _______________________________________________
>  >>  osg-users mailing list
>  >>  [email protected]
>  >>  http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
>  >>
>  >>
>  > _______________________________________________
>  > osg-users mailing list
>  > [email protected]
>  > http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
>  >
>
>
>
> /* OpenSceneGraph example, osganimate.
>  *
>  *  Permission is hereby granted, free of charge, to any person obtaining a 
> copy
>  *  of this software and associated documentation files (the "Software"), to 
> deal
>  *  in the Software without restriction, including without limitation the 
> rights
>  *  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
>  *  copies of the Software, and to permit persons to whom the Software is
>  *  furnished to do so, subject to the following conditions:
>  *
>  *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
>  *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
>  *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 
> THE
>  *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
>  *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
> FROM,
>  *  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
>  *  THE SOFTWARE.
>  */
>
>  #include <osgViewer/Viewer>
>  #include <osgViewer/CompositeViewer>
>  #include <osgViewer/ViewerEventHandlers>
>  #include <osgGA/TrackballManipulator>
>  #include <osgDB/ReadFile>
>
>  #if USE_QT4
>
>     #include <QtCore/QString>
>     #include <QtCore/QTimer>
>     #include <QtGui/QKeyEvent>
>     #include <QtGui/QApplication>
>     #include <QtOpenGL/QGLWidget>
>     #include <QtGui/QMainWindow>
>     #include <QtGui/QMdiSubWindow>
>     #include <QtGui/QMdiArea>
>
>     using Qt::WindowFlags;
>
>  #else
>
>     class QWidget;
>     #include <qtimer.h>
>     #include <qgl.h>
>     #include <qapplication.h>
>
>     #define WindowFlags WFlags
>
>  #endif
>
>  #include <iostream>
>
>  class AdapterWidget : public QGLWidget
>  {
>     public:
>
>         AdapterWidget( QWidget * parent = 0, const char * name = 0, const 
> QGLWidget * shareWidget = 0, WindowFlags f = 0 );
>
>         virtual ~AdapterWidget() {}
>
>         osgViewer::GraphicsWindow* getGraphicsWindow() { return _gw.get(); }
>         const osgViewer::GraphicsWindow* getGraphicsWindow() const { return 
> _gw.get(); }
>
>     protected:
>
>         void init();
>
>         virtual void resizeGL( int width, int height );
>         virtual void keyPressEvent( QKeyEvent* event );
>         virtual void keyReleaseEvent( QKeyEvent* event );
>         virtual void mousePressEvent( QMouseEvent* event );
>         virtual void mouseReleaseEvent( QMouseEvent* event );
>         virtual void mouseMoveEvent( QMouseEvent* event );
>
>         osg::ref_ptr<osgViewer::GraphicsWindowEmbedded> _gw;
>  };
>
>  AdapterWidget::AdapterWidget( QWidget * parent, const char * name, const 
> QGLWidget * shareWidget, WindowFlags f):
>  #if USE_QT4
>     QGLWidget(parent, shareWidget, f)
>  #else
>     QGLWidget(parent, name, shareWidget, f)
>  #endif
>  {
>     _gw = new osgViewer::GraphicsWindowEmbedded(0,0,width(),height());
>  }
>
>  void AdapterWidget::resizeGL( int width, int height )
>  {
>     _gw->getEventQueue()->windowResize(0, 0, width, height );
>     _gw->resized(0,0,width,height);
>  }
>
>  void AdapterWidget::keyPressEvent( QKeyEvent* event )
>  {
>  #if USE_QT4
>     _gw->getEventQueue()->keyPress( (osgGA::GUIEventAdapter::KeySymbol) 
> *(event->text().toAscii().data() ) );
>  #else
>     _gw->getEventQueue()->keyPress( (osgGA::GUIEventAdapter::KeySymbol) 
> event->ascii() );
>  #endif
>  }
>
>  void AdapterWidget::keyReleaseEvent( QKeyEvent* event )
>  {
>  #if USE_QT4
>     _gw->getEventQueue()->keyRelease( (osgGA::GUIEventAdapter::KeySymbol) 
> *(event->text().toAscii().data() ) );
>  #else
>     _gw->getEventQueue()->keyRelease( (osgGA::GUIEventAdapter::KeySymbol) 
> event->ascii() );
>  #endif
>  }
>
>  void AdapterWidget::mousePressEvent( QMouseEvent* event )
>  {
>     int button = 0;
>     switch(event->button())
>     {
>         case(Qt::LeftButton): button = 1; break;
>         case(Qt::MidButton): button = 2; break;
>         case(Qt::RightButton): button = 3; break;
>         case(Qt::NoButton): button = 0; break;
>         default: button = 0; break;
>     }
>     _gw->getEventQueue()->mouseButtonPress(event->x(), event->y(), button);
>  }
>
>  void AdapterWidget::mouseReleaseEvent( QMouseEvent* event )
>  {
>     int button = 0;
>     switch(event->button())
>     {
>         case(Qt::LeftButton): button = 1; break;
>         case(Qt::MidButton): button = 2; break;
>         case(Qt::RightButton): button = 3; break;
>         case(Qt::NoButton): button = 0; break;
>         default: button = 0; break;
>     }
>     _gw->getEventQueue()->mouseButtonRelease(event->x(), event->y(), button);
>  }
>
>  void AdapterWidget::mouseMoveEvent( QMouseEvent* event )
>  {
>     _gw->getEventQueue()->mouseMotion(event->x(), event->y());
>  }
>
>
>  class ViewerQT : public osgViewer::Viewer, public AdapterWidget
>  {
>     public:
>
>         ViewerQT(QWidget * parent = 0, const char * name = 0, const QGLWidget 
> * shareWidget = 0, WindowFlags f = 0):
>             AdapterWidget( parent, name, shareWidget, f )
>         {
>             getCamera()->setViewport(new osg::Viewport(0,0,width(),height()));
>             getCamera()->setProjectionMatrixAsPerspective(30.0f, 
> static_cast<double>(width())/static_cast<double>(height()), 1.0f, 10000.0f);
>             getCamera()->setGraphicsContext(getGraphicsWindow());
>
>             setThreadingModel(osgViewer::Viewer::SingleThreaded);
>
>             connect(&_timer, SIGNAL(timeout()), this, SLOT(updateGL()));
>             _timer.start(10);
>         }
>
>         virtual void paintGL()
>         {
>             frame();
>         }
>
>     protected:
>
>         QTimer _timer;
>  };
>
>  class CompositeViewerQT : public osgViewer::CompositeViewer, public 
> AdapterWidget
>  {
>     public:
>
>         CompositeViewerQT(QWidget * parent = 0, const char * name = 0, const 
> QGLWidget * shareWidget = 0, WindowFlags f = 0):
>             AdapterWidget( parent, name, shareWidget, f )
>         {
>             setThreadingModel(osgViewer::CompositeViewer::SingleThreaded);
>
>             connect(&_timer, SIGNAL(timeout()), this, SLOT(updateGL()));
>             _timer.start(10);
>         }
>
>         virtual void paintGL()
>         {
>             frame();
>         }
>
>     protected:
>
>         QTimer _timer;
>  };
>
>  int mainAdapterWidget(QApplication& a, osg::ArgumentParser& arguments)
>  {
>     // load the scene.
>     osg::ref_ptr<osg::Node> loadedModel = osgDB::readNodeFiles(arguments);
>     if (!loadedModel)
>     {
>         std::cout << arguments[0] <<": No data loaded." << std::endl;
>         return 1;
>     }
>
>     std::cout<<"Using AdapterWidget - QGLWidget subclassed to integrate with 
> osgViewer using its embedded graphics window support."<<std::endl;
>
>     if (arguments.read("--CompositeViewer"))
>     {
>         CompositeViewerQT* viewerWindow = new CompositeViewerQT;
>
>         unsigned int width = viewerWindow->width();
>         unsigned int height = viewerWindow->height();
>
>         {
>             osgViewer::View* view1 = new osgViewer::View;
>             
> view1->getCamera()->setGraphicsContext(viewerWindow->getGraphicsWindow());
>             view1->getCamera()->setProjectionMatrixAsPerspective(30.0f, 
> static_cast<double>(width)/static_cast<double>(height/2), 1.0, 1000.0);
>             view1->getCamera()->setViewport(new 
> osg::Viewport(0,0,width,height/2));
>             view1->setCameraManipulator(new osgGA::TrackballManipulator);
>             view1->setSceneData(loadedModel.get());
>
>             viewerWindow->addView(view1);
>         }
>
>         {
>             osgViewer::View* view2 = new osgViewer::View;
>             
> view2->getCamera()->setGraphicsContext(viewerWindow->getGraphicsWindow());
>             view2->getCamera()->setProjectionMatrixAsPerspective(30.0f, 
> static_cast<double>(width)/static_cast<double>(height/2), 1.0, 1000.0);
>             view2->getCamera()->setViewport(new 
> osg::Viewport(0,height/2,width,height/2));
>             view2->setCameraManipulator(new osgGA::TrackballManipulator);
>             view2->setSceneData(loadedModel.get());
>
>             viewerWindow->addView(view2);
>         }
>
>         viewerWindow->show();
>     }
>         else if (arguments.read("--mdi")) {
>           std::cout<<"Using ViewetQT MDI version"<<std::endl;
>          /*
>                  Following problems are found here:
>                  - keypress actions are not transmitted from QT to OSG
>                  - miminize causes loaded model to disappear (some problem 
> with Camera matrix? - clampProjectionMatrix is invalid)
>                  */
>          ViewerQT* viewerWindow = new ViewerQT;
>          viewerWindow->setCameraManipulator(new osgGA::TrackballManipulator);
>          viewerWindow->setSceneData(loadedModel.get());
>
>          QMainWindow* mw = new QMainWindow();
>          QMdiArea* mdiArea = new QMdiArea(mw);
>          mw->setCentralWidget(mdiArea);
>
>          QMdiSubWindow *subWindow = mdiArea->addSubWindow(viewerWindow);
>          subWindow->showMaximized();
>          subWindow->setWindowTitle("New Window");
>          mw->show();
>
>         } else {
>         ViewerQT* viewerWindow = new ViewerQT;
>
>         viewerWindow->setCameraManipulator(new osgGA::TrackballManipulator);
>         viewerWindow->setSceneData(loadedModel.get());
>
>         viewerWindow->show();
>     }
>
>
>     a.connect( &a, SIGNAL(lastWindowClosed()), &a, SLOT(quit()) );
>
>     return a.exec();
>  }
>
>  /*EOF*/
>
> _______________________________________________
>  osg-users mailing list
>  [email protected]
>  http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
>
>
_______________________________________________
osg-users mailing list
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

Reply via email to