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();
}
}
//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();
}
}
相关文章推荐
- 7、osg中响应键盘鼠标事件以及鼠标和键盘编码表
- jQuery实现响应鼠标事件的图片透明效果【附demo源码下载】
- javascript滚动栏响应鼠标滑轮的实现上下滚动事件
- NGUI之响应鼠标事件(划过、停留、点击等)
- javascript 中响应鼠标和键盘事件
- jQuery响应鼠标事件并隐藏与显示input默认值
- libvlc 双击,鼠标事件消息响应
- SVG鼠标事件响应的四种写法
- Android学习笔记(一)——简单的控件和基本响应:鼠标事件的响应
- vc中如何响应键盘和鼠标事件
- 让Shockwave flash控件响应鼠标移动的事件
- 让窗口响应鼠标双击事件
- VC++ 中响应鼠标悬停事件的简单方法(2005-8-10)
- 让窗体不响应鼠标双击事件
- 2.0Tip/Trick之Silverlight.js, Silverlight.supportedUserAgent.js, 自定义启动界面, 响应鼠标滚轮事件
- QT:如何获取鼠标坐标点和键盘响应事件
- Unity3D判断鼠标向右或向左滑动,响应不同的事件
- mfc picture控件响应鼠标右键事件
- JTable响应鼠标双击的事件, 并且希望能获得鼠标事件发生在Table中行列位置