Hi,

I want to get events from the keyboard. To do this I created a class by 
deriving "osgGA::GUIEventHandler" and implemented "hanlder" method.

But  my program is not catching the events. Here is my code


Code:
class KeyboardEventHandler : public osgGA::GUIEventHandler
    {
                bool isImageCaptured;
    public:
                KeyboardEventHandler(): osgGA::GUIEventHandler()
                {
                        isImageCaptured=false;
                }
       virtual bool handle(const osgGA::GUIEventAdapter& 
ea,osgGA::GUIActionAdapter&);
       
           bool getImageCapFlag()
           {
                   return isImageCaptured;
           }
    };
bool KeyboardEventHandler::handle(const osgGA::GUIEventAdapter& 
ea,osgGA::GUIActionAdapter& aa)
     {
                  std::cout<<"In Event Handler"<<std::endl;
       switch(ea.getEventType())
       {
       case(osgGA::GUIEventAdapter::KEYDOWN):
          {
                         std::cout<<"Event handerler "<<std::endl;

                                 switch(ea.getKey())
                                 {
                                 case 'i':
                                        std::cout << "I Pressed " << std::endl;
                                        isImageCaptured=false;
                                        return false;
                                        break;
                                 default:
                                        return false;
                                 } 
                          }
       default:
          return false;
       }
    }



In the above code I am getting "In Event Handler" message but not getting "I 
Pressed". 

I also implemented the following code to take a screen capture. If I remove 
this code than key board events are working


Code:
HMONITOR monitor = MonitorFromWindow(hWnd, MONITOR_DEFAULTTONEAREST);
        MONITORINFO info;
        info.cbSize = sizeof(MONITORINFO);
        GetMonitorInfo(monitor, &info);
        int XRes = info.rcMonitor.right - info.rcMonitor.left;
        int YRes = info.rcMonitor.bottom - info.rcMonitor.top;


        traits = new osg::GraphicsContext::Traits;
        traits->target = osg::Camera::FRAME_BUFFER_OBJECT;
        traits->x =0;
        traits->y =0;
        traits->width = XRes;
        traits->height = YRes;
        traits->windowDecoration = true;
        traits->doubleBuffer = true;
        traits->sharedContext = 0;
        traits->pbuffer = false;

        gContext= osg::GraphicsContext::createGraphicsContext(traits.get());

        viewer->getCamera()->setGraphicsContext(gContext);
        gCamera = viewer->getCamera();

        gCamera->setViewport(new osg::Viewport(0,0,XRes,YRes));
        
        double fovy, aspectRatio, zNear, zFar;
        gCamera->getProjectionMatrixAsPerspective(fovy, aspectRatio, zNear, 
zFar);
        
        fovy+=41.0;
        
        gCamera->setProjectionMatrixAsPerspective(fovy, aspectRatio, zNear, 
zFar);
        
        
        viewer->setDataVariance(osg::Object::DYNAMIC);
        viewer->setThreadingModel(osgViewer::Viewer::SingleThreaded);
        

        sCapImage = new osg::Image;
        sCapImage->allocateImage(720, 576, 1, GL_RGB, GL_UNSIGNED_BYTE);
    gCamera->attach(osg::Camera::COLOR_BUFFER, sCapImage);





I added "setAllowEventFocus(false)" for both gCamera and main camera. Even I am 
not getting key board events

Can you please help me where am I doing wrong?


... 

Thank you!

Cheers,
Koduri

------------------
Read this topic online here:
http://forum.openscenegraph.org/viewtopic.php?p=48164#48164




_______________________________________________
osg-users mailing list
osg-users@lists.openscenegraph.org
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

Reply via email to