Re: [osg-users] Translate problem
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_castViewerWidget*(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_ptrosgGA::StateSetManipulator statesetManipulator = new osgGA::StateSetManipulator(view-getCamera()-getStateSet()); view-addEventHandler(statesetManipulator.get()); gw = dynamic_castosgQt::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_ptrosg::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();
Re: [osg-users] Translate problem
Dear Nick thanks a lot for your code snippet. I appreciate it. I am after custom mouse event handling, I dont want TrackBallManipulator as I am more interested to manage events from Qt. On Thu, May 9, 2013 at 2:35 PM, Trajce Nikolov NICK trajce.nikolov.n...@gmail.com wrote: 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_castViewerWidget*(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_ptrosgGA::StateSetManipulator statesetManipulator = new osgGA::StateSetManipulator(view-getCamera()-getStateSet()); view-addEventHandler(statesetManipulator.get()); gw = dynamic_castosgQt::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_ptrosg::GraphicsContext::Traits traits = new osg::GraphicsContext::Traits; traits-inheritedWindowData = new osgQt::GraphicsWindowQt::WindowData( gView ); traits-windowName = name; traits-windowDecoration = windowDecoration; traits-x
[osg-users] Translate problem
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_castViewerWidget*(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_ptrosgGA::StateSetManipulator statesetManipulator = new osgGA::StateSetManipulator(view-getCamera()-getStateSet()); view-addEventHandler(statesetManipulator.get()); gw = dynamic_castosgQt::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_ptrosg::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_ptrosg::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_castdouble(traits-width)/static_castdouble(traits-height), 1.0f, 1.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