[osg-users] KeyboardEventHandler interferes with MatrixManipulator selection

2007-11-21 Thread Andreas.Richter
Hi folks

 I switched from OSG 2.0 to version 2.2 and stumbled over the keyboard
handler. I add to my viewer some manipulators like in osgviewer:

osgGA::KeySwitchMatrixManipulator* ksm = new
osgGA::KeySwitchMatrixManipulator();

ksm->addMatrixManipulator( '1', "Trackball", new
osgGA::TrackballManipulator() );
ksm->addMatrixManipulator( '2', "Flight", new
osgGA::FlightManipulator() );
ksm->addMatrixManipulator( '3', "Drive", new
osgGA::DriveManipulator() );
ksm->addMatrixManipulator( '4', "Terrain", new
osgGA::TerrainManipulator() );

viewer.setCameraManipulator( ksm );

 After that I add for example the stats handler and my own keyboard
event handler (also like in the examples):

viewer.addEventHandler( new osgViewer::StatsHandler );
viewer.addEventHandler( new KeyboardEventHandler );

KeyboardEventHandler looks like this:

class KeyboardEventHandler : public osgGA::GUIEventHandler
{
public:
KeyboardEventHandler()  {}
~KeyboardEventHandler() {}

virtual bool KeyboardEventHandler::handle(const
osgGA::GUIEventAdapter& ea,osgGA::GUIActionAdapter&)
{
switch(ea.getEventType())
{
case(osgGA::GUIEventAdapter::KEYDOWN):
{

KeyboardEventHandler::handle_keyboard((char)ea.getKey());
return true;
}
case(osgGA::GUIEventAdapter::KEYUP):
{
return true;
}

default:
return false;
}
}

virtual void
KeyboardEventHandler::accept(osgGA::GUIEventHandlerVisitor& v) {
v.visit(*this); }
virtual void KeyboardEventHandler::handle_keyboard(char
lastkey)
{
switch (lastkey)
{
case('x'):
{
std::cout << "x" << std::endl;
break;
}

default:
std::cout << "- '" << lastkey << "' ("
<< (int)lastkey << ") isn't maped jet" << std::endl;
break;
}
};
};

If I press in the running app the key 'x', "x" is printed. If I press
's' I see the stats. But if I press '1', '2', '3' or '4' nothing
happens, the manipulators don't switch. Without adding my own handler to
the viewer I can press '3' and drive around, pressing 's' and viewing
stats (and of cause don't print "x").
Can somebody tell me why a self-made keyboard handler in OSG 2.2 stops
only the manipulators from switching and how to cure this problem
(working on WinXP SP2)? Looking forward to your answers.
--  
Andreas Richter 
___
osg-users mailing list
osg-users@lists.openscenegraph.org
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org


Re: [osg-users] KeyboardEventHandler interferes with MatrixManipulator selection

2007-11-21 Thread Robert Osfield
Hi Andreas,

The KeySwitchMatrixManipulator only handles events that havent'
already been handled, and in your case you are signalling that you've
handled the event by returning true from your own handler.  Just
return false and the key switch handler with work with it just fine.

Robert.

On Nov 21, 2007 2:49 PM,  <[EMAIL PROTECTED]> wrote:
> Hi folks
>
>  I switched from OSG 2.0 to version 2.2 and stumbled over the keyboard
> handler. I add to my viewer some manipulators like in osgviewer:
>
> osgGA::KeySwitchMatrixManipulator* ksm = new
> osgGA::KeySwitchMatrixManipulator();
>
> ksm->addMatrixManipulator( '1', "Trackball", new
> osgGA::TrackballManipulator() );
> ksm->addMatrixManipulator( '2', "Flight", new
> osgGA::FlightManipulator() );
> ksm->addMatrixManipulator( '3', "Drive", new
> osgGA::DriveManipulator() );
> ksm->addMatrixManipulator( '4', "Terrain", new
> osgGA::TerrainManipulator() );
>
> viewer.setCameraManipulator( ksm );
>
>  After that I add for example the stats handler and my own keyboard
> event handler (also like in the examples):
>
> viewer.addEventHandler( new osgViewer::StatsHandler );
> viewer.addEventHandler( new KeyboardEventHandler );
>
> KeyboardEventHandler looks like this:
>
> class KeyboardEventHandler : public osgGA::GUIEventHandler
> {
> public:
> KeyboardEventHandler()  {}
> ~KeyboardEventHandler() {}
>
> virtual bool KeyboardEventHandler::handle(const
> osgGA::GUIEventAdapter& ea,osgGA::GUIActionAdapter&)
> {
> switch(ea.getEventType())
> {
> case(osgGA::GUIEventAdapter::KEYDOWN):
> {
>
> KeyboardEventHandler::handle_keyboard((char)ea.getKey());
> return true;
> }
> case(osgGA::GUIEventAdapter::KEYUP):
> {
> return true;
> }
>
> default:
> return false;
> }
> }
>
> virtual void
> KeyboardEventHandler::accept(osgGA::GUIEventHandlerVisitor& v) {
> v.visit(*this); }
> virtual void KeyboardEventHandler::handle_keyboard(char
> lastkey)
> {
> switch (lastkey)
> {
> case('x'):
> {
> std::cout << "x" << std::endl;
> break;
> }
>
> default:
> std::cout << "- '" << lastkey << "' ("
> << (int)lastkey << ") isn't maped jet" << std::endl;
> break;
> }
> };
> };
>
> If I press in the running app the key 'x', "x" is printed. If I press
> 's' I see the stats. But if I press '1', '2', '3' or '4' nothing
> happens, the manipulators don't switch. Without adding my own handler to
> the viewer I can press '3' and drive around, pressing 's' and viewing
> stats (and of cause don't print "x").
> Can somebody tell me why a self-made keyboard handler in OSG 2.2 stops
> only the manipulators from switching and how to cure this problem
> (working on WinXP SP2)? Looking forward to your answers.
> --
> Andreas Richter
> ___
> 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