You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

86 lines
2.0 KiB
C

1 month ago
#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;
};