Hi,
  I solved the question as below:
void AdapterWidget::wheelEvent(QWheelEvent * event)
{
    float delta = event->delta() / 8.0;

    if( delta==0 )    return;

    osgGA::GUIEventAdapter* ea = _gw->getEventQueue()->createEvent();
    ea->setTime( _gw->getEventQueue()->getTime() );
    ea->setX( event->x() );
    ea->setY( event->y() );

    ea->setEventType( osgGA::GUIEventAdapter::SCROLL );
    if( event->orientation() == Qt::Vertical ) {
        if( delta>0 ){
            ea->setScrollingMotionDelta(0.0, delta);
            ea->setScrollingMotion( osgGA::GUIEventAdapter::SCROLL_UP );
        }
        else{
            ea->setScrollingMotionDelta(0.0, -delta);
            ea->setScrollingMotion(
osgGA::GUIEventAdapter::SCROLL_DOWN );
        }
    } else {
        if( delta>0 ){
            ea->setScrollingMotionDelta(delta, 0.0);
            ea->setScrollingMotion( osgGA::GUIEventAdapter::SCROLL_LEFT );
        }
        else{
            ea->setScrollingMotionDelta(-delta, 0.0);
            ea->setScrollingMotion(
osgGA::GUIEventAdapter::SCROLL_RIGHT );
        }
    }

    _gw->getEventQueue()->addEvent(ea);
}

class MyManipulator: public osgGA::MatrixManipulator

bool MyManipulator::handle(const osgGA::GUIEventAdapter& ea,
osgGA::GUIActionAdapter& us)
{
    switch(ea.getEventType()){
        case( osgGA::GUIEventAdapter::SCROLL ):{
            osgGA::GUIEventAdapter::ScrollingMotion sm =
ea.getScrollingMotion();
            switch( sm ){
                case osgGA::GUIEventAdapter::SCROLL_UP :
                    // do zoom out
                    return true

                case osgGA::GUIEventAdapter::SCROLL_DOWN :
                    // do zoom in
                    return true;

                default :
                    break;
            }
        }

        ......
    }
}

you can try it, good luck!

2008/5/6 Srikanth Bemineni <[EMAIL PROTECTED]>:
> I am experimenting with the osgQTviewer.I am not able to zoom in when the
> mouse wheel is scrolled.I am using trackballmanipulator.I am not able to
> find a good documentation about camera manipulators.Even the Reference doc
> doesn't mention the explanation of manipulators.
>
> AdapterWidget::AdapterWidget( ViewerQT *source ,QWidget * parent, const char
> * name, const QGLWidget * shareWidget, WindowFlags f):
> #if USE_QT4
>   QGLWidget(parent, shareWidget, f)
> #else
>   QGLWidget(parent, name, shareWidget, f)
> #endif
> {
>   m_source = source;
>   resize( 800 ,600 );
>   /* To Remove this */
>   /*
>    * // create the window to draw to.
>    * */
>   osg::ref_ptr<osg::GraphicsContext::Traits> traits = new
> osg::GraphicsContext::Traits;
>   traits->x = 200;
>   traits->y = 200;
>   traits->width = 800;
>   traits->height = 600;
>   traits->windowDecoration = true;
>   traits->doubleBuffer = true;
>   traits->sharedContext = 0;
>
>   osg::ref_ptr<osg::GraphicsContext> gc =
> osg::GraphicsContext::createGraphicsContext(traits.get());
>
>   _gw = new osgViewer::GraphicsWindowEmbedded(traits.get());
> #if USE_QT4
>   setFocusPolicy(Qt::ClickFocus);
> #else
>   setFocusPolicy(QWidget::ClickFocus);
> #endif
> }
> ..
> ... all the other event handling
> ...
>
>
>
> void AdapterWidget::mouseMoveEvent( QMouseEvent* event )
> {
>   _gw->getEventQueue()->mouseMotion(event->x(), event->y());
> }
>
> void AdapterWidget::wheelEvent( QWheelEvent *event )
> {
>   //m_source->wheelEvent( event );
>     if( event->delta() > 0 )
>     _gw->getEventQueue()->mouseScroll(osgGA::GUIEventAdapter::SCROLL_UP );
>   else
>     _gw->getEventQueue()->mouseScroll(osgGA::GUIEventAdapter::SCROLL_DOWN );
>    }
>
> ViewerQT::
> ViewerQT(QWidget * parent, const char * name, const QGLWidget * shareWidget
> , WindowFlags f ):
>   AdapterWidget( this , parent, name, shareWidget, f )
>   {
>
>   znear = 1.0f;
>   zfar = 10000.0f;
>   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());
>   /* To Remove*/
>   osg::ref_ptr<osgGA::StateSetManipulator> statesetManipulator = new
> osgGA::StateSetManipulator(getCamera()->getStateSet());
>   addEventHandler(statesetManipulator.get());
>   /*to remove end*/
>
>   addEventHandler(new PickHandler());
>
>   setThreadingModel(osgViewer::Viewer::SingleThreaded);
>
>   connect(&_timer, SIGNAL(timeout()), this, SLOT(updateGL()));
>   _timer.start(10);
>     _manipulator = new osgGA::TrackballManipulator;
>   setCameraManipulator(_manipulator);
>   cout<<"Minimum distance "<<_manipulator->getMinimumDistance()<<endl;
>   cout<<"Homepostion
> compute"<<_manipulator->getAutoComputeHomePosition()<<endl;
>   //_manipulator->setAutoComputeHomePosition(false);
>   _manipulator->setMinimumDistance(1000);
>   osg::Vec3d eye;
>   osg::Vec3d center;
>   osg::Vec3d up;
>   _manipulator->getHomePosition( eye , center , up );
>   cout<<"x y z "<< eye.x()<<eye.y()<<eye.z()<<endl;
>   cout<<"x y z "<< center.x()<<center.y()<<center.z()<<endl;
>   cout<<"x y z "<< up.x()<<up.y()<<up.z()<<endl;
>  }
>      void
> ViewerQT::
> VwheelEvent( QWheelEvent *event )
> {
>
>   cout<<event->delta()<<endl;
>   if( event->delta() > 0 )
>   {
>       znear = znear + 120.0f;
>   }
>   else
>   {
>       if( (znear - 120) >= 1.0 )
>       {
>           znear = znear - 120;
>       }
>   }
>
> }
>
> void
> ViewerQT::
> paintGL()
> {
>   osg::Vec3d eye;
>   osg::Vec3d center;
>   osg::Vec3d up;
>   _manipulator->getHomePosition( eye , center , up );
>   cout<<"eye x y z "<< eye.x()<<" "<<eye.y()<<" "<<eye.z()<<endl;
>   cout<<"center x y z "<<center.x()<<" "<<center.y()<<" "<<center.z()<<endl;
>   cout<<"up x y z "<< up.x()<<" "<<up.y()<<" "<<up.z()<<endl;
>   frame();
> }
>
>
> and this is how I am creating the Viewer window.
> I tried to move the perspective view.
> I tried to translate the camera matrix.
> I tried to set the home positon
> but none of the above things seems to work in moving the camera or zooming.I
> am new to opengl and open scene graph any guide would be really helpful.
>
> Thank You
>
> --
> With Regards
> Srikanth Bemineni
> Geotrace Technologies
> 281-497-8440 extn 228
>
>
>
>
>
>
>
> _______________________________________________
> 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