Hi Rambabu,

Rather than tell you the exact problem I think it would be more useful
help you debug things yourself.

The first thing I'd suggest is have a look at the
osgGA::GUIEventAdapter header, have a look at the type returned from
the getType() method, then look at the associated enum.

Another route is to look at existing examples that use mouse buttons,
using grep or other search tools can help in this.

Robert.


On 5 December 2016 at 07:35, Rambabu Repaka <ramboram...@gmail.com> wrote:
> Hi,
> float CenLat = 12.0, CenLon = 77.0;
> float MinLat, MaxLat,MinLon,MaxLon;
> float Width = 1280, Height = 1024;
> float DifLat, DifLon,scale;
> float x,y,PrevX,PrevY;
> class ModelController : public osgGA::GUIEventHandler
> {
> public:
>         ModelController(osg::MatrixTransform* node) : _model(node) {}
>         virtual bool handle(const osgGA::GUIEventAdapter& ea, 
> osgGA::GUIActionAdapter& aa);
> protected:
>         osg::ref_ptr<osg::MatrixTransform> _model;
>
> };
>
> bool ModelController::handle( const osgGA::GUIEventAdapter& 
> ea,osgGA::GUIActionAdapter& aa )
> {
>         if ( !_model ) return false;
>         float msePreLon = MinLon + ((ea.getX())/scale);
>         float msePresLt = MinLat + ((ea.getY())/ scale);
>         if (msePreLon > 180)    {
>                 msePreLon = 180;
>         }
>         else if (msePreLon < -180)      {
>                 msePreLon = -180.0;
>         }
>         if (msePresLt > 90)     {
>                 msePresLt = 90;
>         }
>         else if (msePresLt < -90)       {
>                 msePresLt = -90;
>         }
>         osg::Matrix matrix   =  _model->getMatrix();
>         switch ( ea.getEventType() )
>         {
>         case osgGA::GUIEventAdapter::LEFT_MOUSE_BUTTON:
>         {
>                 CenLon = msePreLon;
>                 CenLat = msePresLt ;
>                 if ((CenLon - (DifLon / 2.0)) < -180)       { CenLon = -180 + 
> (DifLon / 2.0); }
>                 else if ((CenLon + (DifLon / 2.0)) > 180)   { CenLon =  180 - 
> (DifLon / 2.0); }
>                 if ((CenLat - (DifLat / 2.0)) < -90)        { CenLat =  -90 + 
> (DifLat / 2.0); }
>                 else if ((CenLat + (DifLat / 2.0)) > 90)    { CenLat =   90 - 
> (DifLat / 2.0); }
>                 MinLon = CenLon - (DifLon / 2.0);
>                 MinLat = CenLat - (DifLat / 2.0);
>                 MaxLon = CenLon + (DifLon / 2.0);
>                 MaxLat = CenLat + (DifLat / 2.0);
>                 //matrix *= osg::Matrix::scale(scale,scale,0.0);
>                 matrix *= osg::Matrix::translate(CenLon, 0.0, CenLat);
>         }
>         _model->setMatrix( matrix );
>
>         }
>         return false;
> }
> int main(int argc, char **argv)
> {
>         osg::DisplaySettings::instance()->setNumMultiSamples(4);
>         scale = Width;
>         osg::ref_ptr<osg::Node> model = 
> osgDB::readNodeFile("D:/RamFolder/OSG/OSG_Binary/OpenSceneGraph-3.0.1-VS9.0.30729-x86-debug-12741/data/cessna.osg");
>         osg::ref_ptr<osg::MatrixTransform > mt = new osg::MatrixTransform;
>         mt->addChild(model.get());
>         osg::ref_ptr<osg::Projection> projection = new osg::Projection;
>         projection->setMatrix(osg::Matrix::ortho2D(-Width/2, Width / 2, 
> -Height/2, Height / 2));
>         projection->addChild(mt.get());
>         if (scale < Width / 2)  {
>                 scale = Width / 2;
>         }
>         if (scale > Width * 100)        {
>                 scale = Width * 100;
>         }
>         DifLat = Width / scale;
>         DifLon = Height / scale;
>
>         if ((CenLon - (DifLon / 2.0)) < -180)       { CenLon = -180 + (DifLon 
> / 2.0); }
>         else if ((CenLon + (DifLon / 2.0)) > 180)   { CenLon = 180 - (DifLon 
> / 2.0); }
>         if ((CenLat - (DifLat / 2.0)) < -90)        { CenLat = -90 + (DifLat 
> / 2.0); }
>         else if ((CenLat + (DifLat / 2.0)) > 90)    { CenLat = 90 - (DifLat / 
> 2.0); }
>         MinLon = CenLon - (DifLon / 2.0);
>         MinLat = CenLat - (DifLat / 2.0);
>         MaxLon = CenLon + (DifLon / 2.0);
>         MaxLat = CenLat + (DifLat / 2.0);
>
>         osg::ref_ptr<ModelController> ctrler = new ModelController(mt.get());
>
>         osgViewer::Viewer viewer;
>         viewer.setSceneData(projection.get());
>         viewer.addEventHandler(ctrler.get());
>         viewer.setUpViewInWindow(500, 500, 500, 500);
>         return viewer.run();
> }
>
> Upon clicking the mouse left button the model should appear there.But it is 
> not happening.can anyone help me in finding the solution?
>
> ...
>
> Thank you!
>
> Cheers,
> Rambabu
>
> ------------------
> Read this topic online here:
> http://forum.openscenegraph.org/viewtopic.php?p=69593#69593
>
>
>
>
>
> _______________________________________________
> osg-users mailing list
> osg-users@lists.openscenegraph.org
> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
_______________________________________________
osg-users mailing list
osg-users@lists.openscenegraph.org
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

Reply via email to