Hi Sujan, viewerWid->getView()->getCamera()->setViewMatrix(::osg::Matrix::translate(1000.5, 0.0, 0.0)); this code is wrong. Also, you have attached TrackballCameraManipulator so it will fight you against the translation you do.
If you want to translate an object in the scene, then use osg::MatrixTransofrm as parent of your object and there set the translation. If you want to change the ViewMatrix, then set the inverse of your world translation, but also update the CameraManipulator, so something like: osg::Matrixd myMatrix = osg::Matrix::translate(1000.5, 0.0, 0.0); viewerWid->getView()-> getCamera()->setViewMatrix(osg::Matrix::inverse(myMatrix)); viewerWid->getView()->getCameraManipulator()->setByMatrix(myMatrix); If you are after custom mouse management, then I would inherit from TrackballcameraManipulator and override handle - look in the code od TrackballCameraManipulator::handle since it is the closest to your wish of mouse handling Hope this helps a bit Nick On Thu, May 9, 2013 at 4:09 AM, Sujan Dasmahapatra < sujan.dasmahapa...@gmail.com> wrote: > I am trying to translate my objects in scene, when the right mouse button > is pressed. But it is not moving. Pls check the snippet. > > [code] > //CSGraphicsView > //.h > class CSGraphicsView : public osgQt::GLWidget > { > Q_OBJECT > public: > CSGraphicsView(QWidget* parent=0); > ~CSGraphicsView(); > virtual void mousePressEvent(QMouseEvent *e); > virtual void mouseReleaseEvent(QMouseEvent *e); > virtual void mouseMoveEvent(QMouseEvent *e); > > }; > > #endif // GVIEW_H > ////////////////////////////////////////////.cpp > void CSGraphicsView::mousePressEvent(QMouseEvent *e) > { > if(e->button()==Qt::LeftButton) > { > QMessageBox msg; > msg.setText("Left Mouse pressed"); > msg.exec(); > } > else if(e->button()==Qt::RightButton) > { > //QMessageBox msg; > //msg.setText("Right Mouse pressed"); > //msg.exec(); > > ViewerWidget* viewerWid = qobject_cast<ViewerWidget*>(parent()); > viewerWid->getView()->getCamera()->setViewMatrix(::osg::Matrix::translate(1000.5, > 0.0, 0.0)); > } > else if(e->button()==Qt::MiddleButton) > { > QMessageBox msg; > msg.setText("Middle Mouse pressed"); > msg.exec(); > } > else > return; > } > > > //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// > //This is my ViewerWidget class > > class ViewerWidget : public QWidget, public osgViewer::CompositeViewer > { > Q_OBJECT > public: > ViewerWidget(osgViewer::ViewerBase::ThreadingModel > threadingModel=osgViewer::CompositeViewer::SingleThreaded, osg::Group* > scene=NULL); > > osgQt::GLWidget* addViewWidget( osg::Camera* camera, osg::Group* scene ); > > osg::Camera* createCamera( int x, int y, int w, int h, const std::string& > name="", bool windowDecoration=false ); > > virtual void paintEvent( QPaintEvent* event ); > > osgViewer::View* getView(); > > protected: > > QTimer _timer; > > osgQt::GraphicsWindowQt* gw; > > CSGraphicsView* gView; > > osgViewer::View* view; > }; > > #endif // VIEWERWIDGET_H > > //viewerwidget.cpp > > ViewerWidget::ViewerWidget(osgViewer::ViewerBase::ThreadingModel > threadingModel, osg::Group* scene) : QWidget() > { > setThreadingModel(threadingModel); > > gView = (CSGraphicsView*) (addViewWidget( > createCamera(0,0,100,100), scene )); > > QGridLayout* grid = new QGridLayout; > grid->addWidget( gView, 0, 0 ); > setLayout( grid ); > > connect( &_timer, SIGNAL(timeout()), this, SLOT(update()) ); > _timer.start( 10 ); > } > > osgQt::GLWidget* ViewerWidget::addViewWidget( osg::Camera* camera, > osg::Group* scene ) > { > view = new osgViewer::View; > view->setCamera( camera ); > addView( view ); > view->setSceneData( scene ); > view->addEventHandler( new osgViewer::StatsHandler ); > view->setCameraManipulator( new osgGA::TrackballManipulator ); > osg::ref_ptr<osgGA::StateSetManipulator> statesetManipulator = new > osgGA::StateSetManipulator(view->getCamera()->getStateSet()); > view->addEventHandler(statesetManipulator.get()); > gw = dynamic_cast<osgQt::GraphicsWindowQt*> ( > camera->getGraphicsContext() ); > return gw ? gw->getGLWidget() : NULL; > } > > > osg::Camera* ViewerWidget::createCamera( int x, int y, int w, int h, const > std::string& name, bool windowDecoration ) > { > gView = new CSGraphicsView(this); > gView->setGeometry(x, y, w, h); > osg::DisplaySettings* ds = > osg::DisplaySettings::instance().get(); > osg::ref_ptr<osg::GraphicsContext::Traits> traits = new > osg::GraphicsContext::Traits; > > traits->inheritedWindowData = new osgQt::GraphicsWindowQt::WindowData( > gView ); > 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(); > } > > > > void ViewerWidget::paintEvent( QPaintEvent* event ) > { > frame(); > } > > > osgViewer::View* ViewerWidget::getView() > { > return view; > } > > > [/code] > > > Please tell me why is it not moving ??.....I want to implement a rotate > functionality on right mouse press button, a pan function on middle mouse > press function and a zoom function on wheel event. Any help is highly > appreciated. Thanks Sujan > > > > > > > > -- > Thanks & Regards > Sujan > > _______________________________________________ > osg-users mailing list > osg-users@lists.openscenegraph.org > http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org > > -- trajce nikolov nick
_______________________________________________ osg-users mailing list osg-users@lists.openscenegraph.org http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org