osg demo12 响应鼠标事件

来源:互联网 发布:淘宝历史价格 编辑:程序博客网 时间:2024/06/05 04:29
{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();
}



}

0 0
原创粉丝点击