zoukankan      html  css  js  c++  java
  • OSG消息机制之事件处理概述

      OSG的消息机制包括好多个头文件预定义及多个类。

      首先,消息接收相关的类当属osgGA::GUIEventHandler和osgGA::GUIEventAdapter这两个类了。前者处理OSG程序与用户交互,处理事件,事件全靠handle这个函数。此函数的定义:

    重载1: virtual bool handle(osgGA::Event* event, osg::Object* object, osg::NodeVisitor* nv);

    重载2: virtual bool handle(const GUIEventAdapter& ea,GUIActionAdapter& aa, osg::Object*, osg::NodeVisitor*) { return handle(ea,aa); }

    重载3:  virtual bool handle(const GUIEventAdapter&,GUIActionAdapter&) { return false; }

    const GUIEventAdapter&ea用来控制事件类型,GUIActionAdapter用来获得viewer和视口以及上下文,还可以传入一个额外的类object,还可以传入一个Nodevisitor,一般只用前两个参数即可,我们多数情况下运用的也是这两个参数,ea主要用来控制所得到的事件类型,aa用于控制场景viewer以及上下文,窗口等等,可以自定义一些场景变换。

      注意,我们大多数情况下用的是重载函数3,股沟进行事件类型及信息获取和控制场景viewer以及上下文,窗口等。

      const GUIEventAdapter中有一个重要的枚举类型

    enum EventType {
                NONE                = 0,
                PUSH                = 1<<0,
                RELEASE             = 1<<1,
                DOUBLECLICK         = 1<<2,
                DRAG                = 1<<3,
                MOVE                = 1<<4,
                KEYDOWN             = 1<<5,
                KEYUP               = 1<<6,
                FRAME               = 1<<7,
                RESIZE              = 1<<8,
                SCROLL              = 1<<9,
                PEN_PRESSURE        = 1<<10,
                PEN_ORIENTATION     = 1<<11,
                PEN_PROXIMITY_ENTER = 1<<12,
                PEN_PROXIMITY_LEAVE = 1<<13,
                CLOSE_WINDOW        = 1<<14,
                QUIT_APPLICATION    = 1<<15,
                USER                = 1<<16
            };
    

      具体事件对应为:

    OSG中常用的事件类型
    代码	值	事件类型
    NONE	0	无事件
    PUSH	1	鼠标某键按下
    RELEASE	2	鼠标某键弹。
    DOUBLECLICK	4	鼠标某键双击
    一般视为1代表左键,2代表中键,4代表右键。枚举类型MouseButtonMask
    DRAG	8	鼠标某键拖动
    MOVE	16	鼠标移动
    KEYDOWN	32	键盘上某键按下
    KEYUP	64	键盘上某键弹起
    FRAME	128	图像帧(与时间有关)
    RESIZE	256	窗口大小改变时会有的事件
    SCROLL	512	鼠标轮滚动
    PEN_PRESSURE	     1024	手写板的某事件
    PEN_PROXIMITY_ENTER	2048	手写板的某事件
    PEN_ORIENTATION 	4096	手写板的某事件
    PEN_PROXIMITY_LEAVE	8192	手写板的某事件
    CLOSE_WINDOWS	     16384	关闭窗口
    QUIT_APPLICATION     32768	退出程序
    USER              65536   用户定义
    

      按键值就是对应的ASCLL码。

  • 相关阅读:
    cachecloud搭建.md
    Python glob.md
    python textwrap.md
    Python shutil.md
    python openpyxl.md
    os.path.md
    Python datetime.md
    jenkins运行脚本 报错:UnicodeEncodeError: 'gbk' codec can't encode character 'xa9' in position 449: illegal multibyte sequence
    Python如何去实际提高工作的效率?也许这个会有用!
    Jmeter如何测试接口
  • 原文地址:https://www.cnblogs.com/BetterThanEver_Victor/p/5710524.html
Copyright © 2011-2022 走看看