|
|
|
|
|
#pragma once
|
|
|
|
|
|
|
|
|
|
|
|
#include <osgViewer/ViewerEventHandlers>
|
|
|
|
|
|
#include <osg/MatrixTransform>
|
|
|
|
|
|
#include "../XJOSGObject/XJOSGObject.h"
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ
|
|
|
|
|
|
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<65><72><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5><EFBFBD>û<EFBFBD>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD>GUIEventHandler <20><><EFBFBD><EFBFBD><EFBFBD>ࡣ
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>õ<EFBFBD>
|
|
|
|
|
|
class CXJOSGPickHandler : public osgGA::GUIEventHandler
|
|
|
|
|
|
{
|
|
|
|
|
|
public:
|
|
|
|
|
|
CXJOSGPickHandler();
|
|
|
|
|
|
|
|
|
|
|
|
enum pickMode
|
|
|
|
|
|
{
|
|
|
|
|
|
PICK_OBJECT = 0,
|
|
|
|
|
|
PICK_POINT = 1
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
bool handle( const osgGA::GUIEventAdapter& ea, osgGA::GUIActionAdapter& aa );
|
|
|
|
|
|
|
|
|
|
|
|
// ִ<><D6B4><EFBFBD>û<EFBFBD>ѡ<EFBFBD><D1A1><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
bool pick( const double x, const double y, osgViewer::Viewer* viewer );
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD><CDA3>㻹<EFBFBD>Ƕ<EFBFBD><C7B6><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
void SetPickMode(int pickType) {m_pickType = pickType;}
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD>ѡ<EFBFBD>ж<EFBFBD><D0B6><EFBFBD><EFBFBD>ϵĵ<CFB5>
|
|
|
|
|
|
osg::Vec3 GetPickPoint(){return m_pickPoint;}
|
|
|
|
|
|
|
|
|
|
|
|
//<2F>ж<EFBFBD><D0B6>Ƿ<EFBFBD>ѡ<EFBFBD>ж<EFBFBD><D0B6><EFBFBD>
|
|
|
|
|
|
bool GetPickResult(){return m_pickResult;}
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD>ѡ<EFBFBD>е<EFBFBD><D0B5><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>
|
|
|
|
|
|
CXJOSGObject * GetPickObject(){return m_pickObject;}
|
|
|
|
|
|
|
|
|
|
|
|
protected:
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>갴<EFBFBD>º<EFBFBD><C2BA>ƶ<EFBFBD>ʱ<EFBFBD><CAB1>XY <20><><EFBFBD>ꡣ
|
|
|
|
|
|
float _mX,_mY;
|
|
|
|
|
|
|
|
|
|
|
|
bool m_pickResult;
|
|
|
|
|
|
osg::Vec3 m_pickPoint;
|
|
|
|
|
|
CXJOSGObject* m_pickObject;
|
|
|
|
|
|
|
|
|
|
|
|
int m_pickType;
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
/**<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̰<EFBFBD><CCB0><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
|
|
|
|
|
class PromptionHandler : public osgGA::GUIEventHandler
|
|
|
|
|
|
{
|
|
|
|
|
|
public:
|
|
|
|
|
|
PromptionHandler(osg::ApplicationUsage* au = 0);
|
|
|
|
|
|
|
|
|
|
|
|
enum HUDCameraType
|
|
|
|
|
|
{
|
|
|
|
|
|
LEFT_UP = 0,
|
|
|
|
|
|
RIGHT_UP = 1,
|
|
|
|
|
|
LEFT_DOWN = 2
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD>ڴ洢<DAB4><E6B4A2>ʾ<EFBFBD><CABE>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
typedef std::vector<std::string> 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;
|
|
|
|
|
|
};
|