OSG  3.4.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
NodeTrackerManipulator.h
Go to the documentation of this file.
1 /* -*-c++-*- OpenSceneGraph - Copyright (C) 1998-2006 Robert Osfield
2  *
3  * This library is open source and may be redistributed and/or modified under
4  * the terms of the OpenSceneGraph Public License (OSGPL) version 0.0 or
5  * (at your option) any later version. The full license is in LICENSE file
6  * included with this distribution, and on the openscenegraph.org website.
7  *
8  * This library is distributed in the hope that it will be useful,
9  * but WITHOUT ANY WARRANTY; without even the implied warranty of
10  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11  * OpenSceneGraph Public License for more details.
12 */
13 
14 #ifndef OSGGA_NODE_TRACKER_MANIPULATOR
15 #define OSGGA_NODE_TRACKER_MANIPULATOR 1
16 
17 #include <osgGA/OrbitManipulator>
18 #include <osg/ObserverNodePath>
19 
20 
21 namespace osgGA {
22 
23 
25 {
27 
28  public:
29 
30  NodeTrackerManipulator( int flags = DEFAULT_SETTINGS );
31 
33  const osg::CopyOp& copyOp = osg::CopyOp::SHALLOW_COPY );
34 
36 
37  void setTrackNodePath(const osg::NodePath& nodePath);
38  void setTrackNodePath(const osg::ObserverNodePath& nodePath) { _trackNodePath = nodePath; }
39  osg::ObserverNodePath& getTrackNodePath() { return _trackNodePath; }
40 
41  void setTrackNode(osg::Node* node);
42  osg::Node* getTrackNode() { osg::NodePath nodePath; return _trackNodePath.getNodePath(nodePath) && !nodePath.empty() ? nodePath.back() : 0; }
43  const osg::Node* getTrackNode() const { osg::NodePath nodePath; return _trackNodePath.getNodePath(nodePath) && !nodePath.empty() ? nodePath.back() : 0; }
44 
46  {
57  NODE_CENTER_AND_ROTATION
58  };
59 
60  void setTrackerMode(TrackerMode mode);
61  TrackerMode getTrackerMode() const { return _trackerMode; }
62 
63 
65  {
71  ELEVATION_AZIM
72  };
73 
74  void setRotationMode(RotationMode mode);
75  RotationMode getRotationMode() const;
76 
77 
78  virtual void setByMatrix(const osg::Matrixd& matrix);
79  virtual osg::Matrixd getMatrix() const;
80  virtual osg::Matrixd getInverseMatrix() const;
81 
82  virtual void setNode(osg::Node*);
83 
84  virtual void computeHomePosition();
85 
86  protected:
87 
88  virtual bool performMovementLeftMouseButton(const double eventTimeDelta, const double dx, const double dy);
89  virtual bool performMovementMiddleMouseButton(const double eventTimeDelta, const double dx, const double dy);
90  virtual bool performMovementRightMouseButton(const double eventTimeDelta, const double dx, const double dy);
91 
92  void computeNodeWorldToLocal(osg::Matrixd& worldToLocal) const;
93  void computeNodeLocalToWorld(osg::Matrixd& localToWorld) const;
94 
95  void computeNodeCenterAndRotation(osg::Vec3d& center, osg::Quat& rotation) const;
96 
97  void computePosition(const osg::Vec3d& eye,const osg::Vec3d& lv,const osg::Vec3d& up);
98 
99 
102 
103 };
104 
105 }
106 
107 #endif /* OSGGA_NODE_TRACKER_MANIPULATOR */
osg::ObserverNodePath & getTrackNodePath()
#define OSGGA_EXPORT
Definition: Export.h:40
const osg::Node * getTrackNode() const
#define META_Object(library, name)
Definition: Object.h:42
Definition: Node.h:71
Definition: Quat.h:29
void setTrackNodePath(const osg::ObserverNodePath &nodePath)
std::vector< Node * > NodePath
Definition: Node.h:44