CEDRIC  Revision_backup-2009-02
PickingHandler.h
Go to the documentation of this file.
1 /******************************************************************************
2  *
3  * Copyright (C) 2008 Boris Iven, Max Hermann
4  *
5  * This file is part of the "CEDRIC Event Display" application.
6  *
7  *****************************************************************************/
8 
9 #ifndef PICKINGHANDLER_H
10 #define PICKINGHANDLER_H
11 
12 #include <osgGA/GUIEventHandler>
13 #include <osg/ref_ptr>
14 #include <osgViewer/Viewer>
15 #include <osgText/Text>
16 
17 
18 class PickingHandler : public osgGA::GUIEventHandler
19 {
20 public:
21  class Pickable
22  {
23  friend class PickingHandler;
24 
25  public:
26  Pickable() {}
27  virtual ~Pickable() {}
28 
29  virtual void onMouseOver( const osgGA::GUIEventAdapter* ea, osg::Node* ) = 0;
30  virtual void onMouseEnter( const osgGA::GUIEventAdapter* ea, osg::Node* ) = 0;
31  virtual void onMouseLeave( const osgGA::GUIEventAdapter* ea ) = 0;
32 
33  virtual bool isPickable( osg::Node* /*node*/ ) { return true; }
34 
35  protected:
37  void setToolTip( std::string text ) { if( _toolTipNode.valid() ) _toolTipNode->setText(text); }
38  void setToolTipPosition( float x, float y, float z ) { if( _toolTipNode.valid() ) _toolTipNode->setPosition( osg::Vec3(x,y,z) ); }
39 
40  private:
43  osg::ref_ptr<osgText::Text> _toolTipNode;
44 
46  void setToolTipNode( osgText::Text* node ) { _toolTipNode = node; }
47  };
48 
49  PickingHandler(): m_lastPicked(0), m_enabled(true) { _ea=0; }
50 
51  virtual bool handle( const osgGA::GUIEventAdapter& ea, osgGA::GUIActionAdapter& aa );
52 
53  void setEnabled( bool enable ) { m_enabled = enable; }
54  bool isEnabled() const { return m_enabled; }
55 
56  void setToolTipNode( osgText::Text* node ) { _toolTipNode = node; }
57  osgText::Text* getToolTipNode() { return _toolTipNode.get(); }
58 
59  void pick( osgViewer::Viewer* viewer, const osgGA::GUIEventAdapter& ea );
60 
63  void setRoot( osg::Node* root ) { _root = root; }
64 
65 private:
66  bool pickPickable( const osg::NodePath& path );
67 
68  Pickable* m_lastPicked;
69  bool m_enabled;
70 
71  osg::ref_ptr<const osgGA::GUIEventAdapter> _ea;
72 
73  osg::ref_ptr<osgText::Text> _toolTipNode;
74 
75  osg::ref_ptr<osg::Node> _root;
76 };
77 
78 #endif
Definition: PickingHandler.h:18
virtual void onMouseLeave(const osgGA::GUIEventAdapter *ea)=0
PickingHandler()
Definition: PickingHandler.h:49
virtual bool isPickable(osg::Node *)
Definition: PickingHandler.h:33
virtual void onMouseOver(const osgGA::GUIEventAdapter *ea, osg::Node *)=0
void setToolTipPosition(float x, float y, float z)
Definition: PickingHandler.h:38
void setRoot(osg::Node *root)
Definition: PickingHandler.h:63
osgText::Text * getToolTipNode()
Definition: PickingHandler.h:57
bool isEnabled() const
Definition: PickingHandler.h:54
void setEnabled(bool enable)
Definition: PickingHandler.h:53
virtual void onMouseEnter(const osgGA::GUIEventAdapter *ea, osg::Node *)=0
virtual bool handle(const osgGA::GUIEventAdapter &ea, osgGA::GUIActionAdapter &aa)
Definition: PickingHandler.cpp:30
Definition: PickingHandler.h:21
void pick(osgViewer::Viewer *viewer, const osgGA::GUIEventAdapter &ea)
Definition: PickingHandler.cpp:48
void setToolTipNode(osgText::Text *node)
Definition: PickingHandler.h:56
void setToolTip(std::string text)
This may be used for showing a tooltip.
Definition: PickingHandler.h:37
Pickable()
Definition: PickingHandler.h:26
virtual ~Pickable()
Definition: PickingHandler.h:27