查看: 997|回复: 1

事件不响应的问题

[复制链接]

该用户从未签到

发表于 2011-8-17 21:25:05 | 显示全部楼层 |阅读模式
我在vs2010开发一个程序,用的是MFC的框架,我用了两个事件回调来监听两个相机下的模型,然后我直接单击VS2010运行按钮,里面的控件按钮都没有什么问题,也就是都可以响应事件,但是在运行生成的Debug文件夹下的EXE文件,结果是有些按钮事件响应不了,这到底是什么原因,貌似我在ActiveX控件好像也是有问题的。。有些事件响应不了。。下面是我事件回调的函数:

  1. class CameraListener : public osg::NodeCallback
  2. {
  3. public:
  4. CameraListener(CArtPicture* aa);
  5. ~CameraListener(void);
  6. virtual void operator()(osg::Node* n, osg::NodeVisitor* nv)
  7. {
  8.   osgGA::EventVisitor* eventVisitor=dynamic_cast<osgGA::EventVisitor*>(nv);
  9.   osg::Camera* node=dynamic_cast<osg::Camera*>(n);
  10.   if (!eventVisitor || !node)
  11.   {
  12.    std::cout<<"Camera listener fail"<<std::endl;
  13.    return;
  14.   }
  15.   osgGA::EventQueue::Events& events=eventVisitor->getEvents();
  16.   for (osgGA::EventQueue::Events::const_iterator ite = events.begin(); ite != events.end(); ite++)
  17.   {
  18.    double mx;
  19.    double my;
  20.    double w;
  21.    double h;
  22.    osgUtil::PolytopeIntersector* intersector = NULL;
  23.    osgUtil::IntersectionVisitor iv;
  24.    osgUtil::PolytopeIntersector* intersector1 = NULL;
  25.    osgUtil::IntersectionVisitor iv1;
  26.    switch ((*ite)->getEventType())
  27.    {
  28.    case osgGA::GUIEventAdapter::PUSH:
  29.     {
  30.      mx = (*ite)->getXnormalized();
  31.      my = (*ite)->getYnormalized();
  32.      w = 0.005;
  33.      h = 0.005;
  34.      intersector = new osgUtil::PolytopeIntersector( osgUtil::Intersector::PROJECTION, mx-w, my-h, mx+w, my+h );
  35.      iv.setIntersector(intersector);
  36.      node->accept(iv);
  37.      if (intersector->containsIntersections())
  38.      {
  39.       osgUtil::PolytopeIntersector::Intersection intersection = intersector->getFirstIntersection();
  40.       osg::NodePath& nodePath = intersection.nodePath;
  41.       osg::Node* internode = (nodePath.size()>=1)?nodePath[nodePath.size()-1]:0;
  42.       std::string name = internode->getName();
  43.       std::string classname = internode->className();
  44.       art->mousePush(name);
  45.      }
  46.     }
  47.     break;
  48.    case osgGA::GUIEventAdapter::MOVE:
  49.     {
  50.      mx = (*ite)->getXnormalized();
  51.      my = (*ite)->getYnormalized();
  52.      w = 0.005;
  53.      h = 0.005;
  54.      intersector1 = new osgUtil::PolytopeIntersector( osgUtil::Intersector::PROJECTION, mx-w, my-h, mx+w, my+h );
  55.      iv1.setIntersector(intersector1);
  56.      node->accept(iv1);
  57.      if (intersector1->containsIntersections())
  58.      {
  59.       osgUtil::PolytopeIntersector::Intersection intersection = intersector1->getFirstIntersection();
  60.       osg::NodePath& nodePath = intersection.nodePath;
  61.       osg::Node* internode = (nodePath.size()>=1)?nodePath[nodePath.size()-1]:0;
  62.       std::string name = internode->getName();
  63.       std::string classname = internode->className();
  64.       art->mouseEnter(name);
  65.      }
  66.     }
  67.     break;
  68.    default:
  69.     break;
  70.    }
  71.   }
  72.   traverse(n,nv);
  73. }
  74. public:
  75. CArtPicture* art;
  76. };
复制代码

这里面有什么问题嘛?

该用户从未签到

发表于 2011-8-18 08:38:59 | 显示全部楼层
您首先要做得就是看看自己的几个case是否真的进入了,然后再判断求交是否有结果,以及您向您的art变量传递的值是否正确,单看这段代码看不出什么来
您需要登录后才可以回帖 登录 | 注册

本版积分规则

OSG中国官方论坛-有您OSG在中国才更好

网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

联系我们

  • 工作时间:09:00--18:00
  • 反馈邮箱:1315785073@qq.com
快速回复 返回顶部 返回列表