#pragma once #include #include #include "../XJOSGObject/XJOSGObject.h" //对象高亮颜色 const osg::Vec4 HIGHTLIGHT_COLOR = osg::Vec4(0.8, 0.0, 0.0, 1.0); const osg::Vec4 PICKPOINT_COLOR = osg::Vec4(0.0, 0.0, 1.0, 1.0); // PickHandler,用于实现用户选择的GUIEventHandler 派生类。 //现在这个类是没用的 class CXJOSGPickHandler : public osgGA::GUIEventHandler { public: CXJOSGPickHandler(); enum pickMode { PICK_OBJECT = 0, PICK_POINT = 1 }; bool handle( const osgGA::GUIEventAdapter& ea, osgGA::GUIActionAdapter& aa ); // 执行用户选择的操作。 bool pick( const double x, const double y, osgViewer::Viewer* viewer ); //设置选择对象的类型(点还是对象) void SetPickMode(int pickType) {m_pickType = pickType;} //获得选中对象上的点 osg::Vec3 GetPickPoint(){return m_pickPoint;} //判断是否选中对象 bool GetPickResult(){return m_pickResult;} //获得选中的显示对象 CXJOSGObject * GetPickObject(){return m_pickObject;} protected: // 保存鼠标按下和移动时的XY 坐标。 float _mX,_mY; bool m_pickResult; osg::Vec3 m_pickPoint; CXJOSGObject* m_pickObject; int m_pickType; }; /**键盘响应事件,用于处理键盘按下时触发的命令*/ class PromptionHandler : public osgGA::GUIEventHandler { public: PromptionHandler(osg::ApplicationUsage* au = 0); enum HUDCameraType { LEFT_UP = 0, RIGHT_UP = 1, LEFT_DOWN = 2 }; //用于存储提示信息的容器 typedef std::vector PromptionList; void setKeyEventTogglesOnScreenHelp(int key) { _keyEventTogglesOnScreenHelp = key; } int getKeyEventTogglesOnScreenHelp() const { return _keyEventTogglesOnScreenHelp; } void reset(); bool handle(const osgGA::GUIEventAdapter& ea, osgGA::GUIActionAdapter& aa); void setHUDTextNode(osg::Node* node) {_HUDNode = node;} protected: int _keyEventTogglesOnScreenHelp; bool _promptEnabled; bool _initialized; osg::Node* _HUDNode; };