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();
}
//功能:响应鼠标事件
//细节:鼠标右键单击时牛和飞机都隐藏,鼠标左键双击时牛和飞机都显示,按键盘上的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
- osg demo12 响应鼠标事件
- 7、osg中响应键盘鼠标事件以及鼠标和键盘编码表
- OSG 自带事件响应
- OSG学习:响应键盘鼠标示例
- OpenGL鼠标响应事件
- OpenCV--鼠标事件响应
- 鼠标事件的响应
- opencv鼠标响应事件
- 【win32】鼠标响应事件
- OSG获取鼠标点选事件的位置
- ScrollBox响应鼠标滚轮事件
- QT鼠标点击响应事件
- MFC的鼠标事件响应
- MapX 控件 鼠标事件响应
- [VC] 鼠标事件的响应
- Button响应鼠标点击事件
- OpenCV中鼠标响应事件
- 【mfc】鼠标、键盘响应事件
- 人生爱情幸福工作友谊家庭男人女人
- SurfaceView使用注意事项
- 156 - Ananagrams
- 解决问题
- VBS 封装Excel函数
- osg demo12 响应鼠标事件
- 借助Nodejs在服务端使用jQuery采集17173游戏排行信息
- 等额本息还款和等额本金还款计算公式的推导
- Campus制图—行树制作
- 关于BS_OWNERDRAW的用法
- F2812程序从Flash搬到RAM中运行(调试过程)
- javascript的那些事儿你都懂了吗
- linux 系统时间设置
- uml关系