您的位置:首页 > 其它

osg demo12 响应鼠标事件

2013-12-30 16:37 645 查看
{CSDN:CODE:
//demo12

//功能:响应鼠标事件

//细节:鼠标右键单击时牛和飞机都隐藏,鼠标左键双击时牛和飞机都显示,按键盘上的LEFT键,显示牛,

//   按 键盘上的RIGHT键显示飞机。其中显示与隐藏结点我们使用的是setNodeMask(bool).

#include <osgDB/ReadFile>

#include <osgViewer/Viewer>

#include <osg/Node>

class UseEventHandler:public osgGA::GUIEventHandler

{

public :
virtual bool handle (const osgGA::GUIEventAdapter& ea,osgGA::GUIActionAdapter& aa)
{
osgViewer::Viewer *viewer = dynamic_cast<osgViewer::Viewer*>(&aa);
if(!viewer)return false;

switch(ea.getEventType())
{
case osgGA::GUIEventAdapter::KEYDOWN:
{
if(ea.getKey()==0xFF51)
{
viewer->getSceneData()->asGroup()->getChild(1)->setNodeMask(0);
viewer->getSceneData()->asGroup()->getChild(0)->setNodeMask(1);
}
if(ea.getKey()==0xFF53)
{
viewer->getSceneData()->asGroup()->getChild(0)->setNodeMask(0);
viewer->getSceneData()->asGroup()->getChild(1)->setNodeMask(1);
}
}
break;
case osgGA::GUIEventAdapter::PUSH:
if(ea.getButton()==4)
{
viewer->getSceneData()->asGroup()->getChild(0)->setNodeMask(0);
viewer->getSceneData()->asGroup()->getChild(1)->setNodeMask(0);
}
break;
case osgGA::GUIEventAdapter::DOUBLECLICK:
if(ea.getButton()==1)
{
viewer->getSceneData()->asGroup()->getChild(0)->setNodeMask(1);
viewer->getSceneData()->asGroup()->getChild(1)->setNodeMask(1);
}
break;
default:
break;
}
return false;

}

};

void main()

{
osgViewer::Viewer viewer;
osg::ref_ptr<osg::Group> root = new osg::Group();
root->addChild(osgDB::readNodeFile("cow.osg"));
root->addChild(osgDB::readNodeFile("glider.osg"));
viewer.setSceneData(root.get());
viewer.addEventHandler(new UseEventHandler);
viewer.realize();
viewer.run();

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: