Re: [osg-users] Translate problem

2013-05-09 Thread Trajce Nikolov NICK
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

2013-05-09 Thread Sujan Dasmahapatra
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

2013-05-08 Thread Sujan Dasmahapatra
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