OpenSceneGraph 3.6.5
OrbitManipulator
Go to the documentation of this file.
1/* -*-c++-*- OpenSceneGraph - Copyright (C) 1998-2010 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 * OrbitManipulator code Copyright (C) 2010 PCJohn (Jan Peciva)
14 * while some pieces of code were taken from OSG.
15 * Thanks to company Cadwork (www.cadwork.ch) and
16 * Brno University of Technology (www.fit.vutbr.cz) for open-sourcing this work.
17*/
18
19#ifndef OSGGA_ORBIT_MANIPULATOR
20#define OSGGA_ORBIT_MANIPULATOR 1
21
23
24
25namespace osgGA {
26
27
32{
33 typedef StandardManipulator inherited;
34
35 public:
36
39 const osg::CopyOp& copyOp = osg::CopyOp::SHALLOW_COPY );
40
42
43 virtual void setByMatrix( const osg::Matrixd& matrix );
44 virtual void setByInverseMatrix( const osg::Matrixd& matrix );
45 virtual osg::Matrixd getMatrix() const;
47
48 virtual void setTransformation( const osg::Vec3d& eye, const osg::Quat& rotation );
49 virtual void setTransformation( const osg::Vec3d& eye, const osg::Vec3d& center, const osg::Vec3d& up );
50 virtual void getTransformation( osg::Vec3d& eye, osg::Quat& rotation ) const;
51 virtual void getTransformation( osg::Vec3d& eye, osg::Vec3d& center, osg::Vec3d& up ) const;
52
53 void setHeading( double azimuth );
54 double getHeading() const;
55 void setElevation( double elevation );
56 double getElevation() const;
57
58 virtual void setCenter( const osg::Vec3d& center );
59 const osg::Vec3d& getCenter() const;
60 virtual void setRotation( const osg::Quat& rotation );
61 const osg::Quat& getRotation() const;
62 virtual void setDistance( double distance );
63 double getDistance() const;
64
65 virtual void setTrackballSize( const double& size );
66 inline double getTrackballSize() const;
67 virtual void setWheelZoomFactor( double wheelZoomFactor );
68 inline double getWheelZoomFactor() const;
69
70 virtual void setMinimumDistance( const double& minimumDistance, bool relativeToModelSize = false );
71 double getMinimumDistance( bool *relativeToModelSize = NULL ) const;
72
74 virtual float getFusionDistanceValue() const;
75
76 protected:
77
79
80 virtual bool performMovementLeftMouseButton( const double eventTimeDelta, const double dx, const double dy );
81 virtual bool performMovementMiddleMouseButton( const double eventTimeDelta, const double dx, const double dy );
82 virtual bool performMovementRightMouseButton( const double eventTimeDelta, const double dx, const double dy );
83 virtual bool performMouseDeltaMovement( const float dx, const float dy );
84 virtual void applyAnimationStep( const double currentProgress, const double prevProgress );
85
86 virtual void rotateTrackball( const float px0, const float py0,
87 const float px1, const float py1, const float scale );
88 virtual void rotateWithFixedVertical( const float dx, const float dy );
89 virtual void rotateWithFixedVertical( const float dx, const float dy, const osg::Vec3f& up );
90 virtual void panModel( const float dx, const float dy, const float dz = 0.f );
91 virtual void zoomModel( const float dy, bool pushForwardIfNeeded = true );
92 void trackball( osg::Vec3d& axis, float& angle, float p1x, float p1y, float p2x, float p2y );
93 float tb_project_to_sphere( float r, float x, float y );
95
98 double _distance;
99
102
105
107 public:
109 void start( const osg::Vec3d& movement, const double startTime );
110 };
112};
113
114
115//
116// inline functions
117//
118
120inline double OrbitManipulator::getTrackballSize() const { return _trackballSize; }
123
124
125}
126
127#endif /* OSGGA_ORBIT_MANIPULATOR */
The 'GA' in osgGA stands for 'GUI Abstraction'; the osgGA namespace provides facilities to help devel...
Definition Callback:21
Copy Op(erator) used to control whether shallow or deep copy is used during copy construction and clo...
Definition CopyOp:41
@ SHALLOW_COPY
Definition CopyOp:47
Definition Matrixd:27
A quaternion class.
Definition Quat:30
General purpose double triple for use as vertices, vectors and normals.
Definition Vec3d:30
General purpose float triple for use as vertices, vectors and normals.
Definition Vec3f:29
Definition GUIActionAdapter:62
Event class for storing Keyboard, mouse and window events.
Definition GUIEventAdapter:82
virtual void applyAnimationStep(const double currentProgress, const double prevProgress)
virtual bool performMovementLeftMouseButton(const double eventTimeDelta, const double dx, const double dy)
virtual bool performMovementRightMouseButton(const double eventTimeDelta, const double dx, const double dy)
double getDistance() const
virtual void setTrackballSize(const double &size)
virtual float getFusionDistanceValue() const
Get the FusionDistanceValue.
const osg::Quat & getRotation() const
virtual void setByMatrix(const osg::Matrixd &matrix)
set the position of the matrix manipulator using a 4x4 Matrix.
virtual void setWheelZoomFactor(double wheelZoomFactor)
META_Object(osgGA, OrbitManipulator)
virtual void rotateWithFixedVertical(const float dx, const float dy, const osg::Vec3f &up)
virtual bool performMovementMiddleMouseButton(const double eventTimeDelta, const double dx, const double dy)
float tb_project_to_sphere(float r, float x, float y)
double _distance
Definition OrbitManipulator:98
double getMinimumDistance(bool *relativeToModelSize=NULL) const
virtual void setRotation(const osg::Quat &rotation)
double getHeading() const
static int _minimumDistanceFlagIndex
Definition OrbitManipulator:104
virtual void getTransformation(osg::Vec3d &eye, osg::Vec3d &center, osg::Vec3d &up) const
Gets manipulator's focal center, eye position, and up vector.
virtual void setCenter(const osg::Vec3d &center)
double getWheelZoomFactor() const
Get the mouse wheel zoom factor.
Definition OrbitManipulator:122
virtual osg::Matrixd getMatrix() const
get the position of the manipulator as 4x4 Matrix.
virtual void setMinimumDistance(const double &minimumDistance, bool relativeToModelSize=false)
double _trackballSize
Definition OrbitManipulator:100
virtual void rotateTrackball(const float px0, const float py0, const float px1, const float py1, const float scale)
virtual void getTransformation(osg::Vec3d &eye, osg::Quat &rotation) const
Gets manipulator's eye position and eye orientation.
virtual bool performMouseDeltaMovement(const float dx, const float dy)
void trackball(osg::Vec3d &axis, float &angle, float p1x, float p1y, float p2x, float p2y)
double _minimumDistance
Definition OrbitManipulator:103
virtual bool handleMouseWheel(const osgGA::GUIEventAdapter &ea, osgGA::GUIActionAdapter &us)
virtual void allocAnimationData()
Definition OrbitManipulator:111
void setElevation(double elevation)
double getElevation() const
virtual void setTransformation(const osg::Vec3d &eye, const osg::Vec3d &center, const osg::Vec3d &up)
Sets manipulator by eye position, center of rotation, and up vector.
virtual osgUtil::SceneView::FusionDistanceMode getFusionDistanceMode() const
Get the FusionDistanceMode.
double getTrackballSize() const
Get the size of the trackball relative to the model size.
Definition OrbitManipulator:120
virtual void setDistance(double distance)
virtual void panModel(const float dx, const float dy, const float dz=0.f)
void setHeading(double azimuth)
virtual void rotateWithFixedVertical(const float dx, const float dy)
virtual void setTransformation(const osg::Vec3d &eye, const osg::Quat &rotation)
Sets manipulator by eye position and eye orientation.
virtual bool startAnimationByMousePointerIntersection(const osgGA::GUIEventAdapter &ea, osgGA::GUIActionAdapter &us)
OrbitManipulator(const OrbitManipulator &om, const osg::CopyOp &copyOp=osg::CopyOp::SHALLOW_COPY)
virtual void zoomModel(const float dy, bool pushForwardIfNeeded=true)
virtual osg::Matrixd getInverseMatrix() const
get the position of the manipulator as a inverse matrix of the manipulator, typically used as a model...
osg::Vec3d _center
Definition OrbitManipulator:96
const osg::Vec3d & getCenter() const
OrbitManipulator(int flags=DEFAULT_SETTINGS)
osg::Quat _rotation
Definition OrbitManipulator:97
virtual void setByInverseMatrix(const osg::Matrixd &matrix)
set the position of the matrix manipulator using a 4x4 Matrix.
double _wheelZoomFactor
Definition OrbitManipulator:101
Definition OrbitManipulator:106
osg::Vec3d _movement
Definition OrbitManipulator:108
void start(const osg::Vec3d &movement, const double startTime)
StandardManipulator(int flags=DEFAULT_SETTINGS)
@ DEFAULT_SETTINGS
Definition StandardManipulator:43
osg::ref_ptr< AnimationData > _animationData
Definition StandardManipulator:159
FusionDistanceMode
FusionDistanceMode is used only when working in stereo.
Definition SceneView:339
#define NULL
Definition Export:55
#define OSGGA_EXPORT
Definition Export:40

osg logo
Generated at Sun Jul 27 2025 00:00:00 for the OpenSceneGraph by doxygen 1.14.0.