OSG  3.4.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
AutoTransform.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 OSG_AUTOTRANSFORM
15 #define OSG_AUTOTRANSFORM 1
16 
17 #include <osg/Group>
18 #include <osg/Transform>
19 #include <osg/Quat>
20 #include <osg/Viewport>
21 
22 namespace osg {
23 
28 {
29  public :
30  AutoTransform();
31 
32  AutoTransform(const AutoTransform& pat,const CopyOp& copyop=CopyOp::SHALLOW_COPY);
33 
34  virtual osg::Object* cloneType() const { return new AutoTransform (); }
35  virtual osg::Object* clone(const osg::CopyOp& copyop) const { return new AutoTransform (*this,copyop); }
36  virtual bool isSameKindAs(const osg::Object* obj) const { return dynamic_cast<const AutoTransform *>(obj)!=NULL; }
37  virtual const char* className() const { return "AutoTransform"; }
38  virtual const char* libraryName() const { return "osg"; }
39 
40  virtual void accept(NodeVisitor& nv);
41 
42  virtual AutoTransform* asAutoTransform() { return this; }
43  virtual const AutoTransform* asAutoTransform() const { return this; }
44 
45  inline void setPosition(const Vec3d& pos) { _position = pos; _matrixDirty=true; dirtyBound(); }
46  inline const Vec3d& getPosition() const { return _position; }
47 
48 
49  inline void setRotation(const Quat& quat) { _rotation = quat; _matrixDirty=true; dirtyBound(); }
50  inline const Quat& getRotation() const { return _rotation; }
51 
52  inline void setScale(double scale) { setScale(osg::Vec3(scale,scale,scale)); }
53 
54  void setScale(const Vec3d& scale);
55  inline const Vec3d& getScale() const { return _scale; }
56 
57  void setMinimumScale(double minimumScale) { _minimumScale = minimumScale; }
58  double getMinimumScale() const { return _minimumScale; }
59 
60  void setMaximumScale(double maximumScale) { _maximumScale = maximumScale; }
61  double getMaximumScale() const { return _maximumScale; }
62 
63  inline void setPivotPoint(const Vec3d& pivot) { _pivotPoint = pivot; _matrixDirty=true; dirtyBound(); }
64  inline const Vec3d& getPivotPoint() const { return _pivotPoint; }
65 
66 
67  void setAutoUpdateEyeMovementTolerance(float tolerance) { _autoUpdateEyeMovementTolerance = tolerance; }
68  float getAutoUpdateEyeMovementTolerance() const { return _autoUpdateEyeMovementTolerance; }
69 
70 
72  {
76  ROTATE_TO_AXIS
77  };
78 
79  void setAutoRotateMode(AutoRotateMode mode);
80 
81  AutoRotateMode getAutoRotateMode() const { return _autoRotateMode; }
82 
85  void setAxis(const Vec3& axis);
87  inline const Vec3& getAxis() const { return _axis; }
88 
90  void setNormal(const Vec3& normal);
92  inline const Vec3& getNormal() const { return _normal; }
93 
94  void setAutoScaleToScreen(bool autoScaleToScreen) { _autoScaleToScreen = autoScaleToScreen; _matrixDirty=true; }
95 
96  bool getAutoScaleToScreen() const { return _autoScaleToScreen; }
97 
98  void setAutoScaleTransitionWidthRatio(float ratio) { _autoScaleTransitionWidthRatio = ratio; }
99  float getAutoScaleTransitionWidthRatio() const { return _autoScaleTransitionWidthRatio; }
100 
101 
102  virtual bool computeLocalToWorldMatrix(Matrix& matrix,NodeVisitor* nv) const;
103 
104  virtual bool computeWorldToLocalMatrix(Matrix& matrix,NodeVisitor* nv) const;
105 
106  virtual BoundingSphere computeBound() const;
107 
108 
109  protected :
110 
111  virtual ~AutoTransform() {}
112 
116 
118 
120 
121  mutable Quat _rotation;
122  mutable Vec3d _scale;
130 
134 
135  void computeMatrix() const;
136 
137  mutable bool _matrixDirty;
139 
141  {
142  AXIAL_ROT_X_AXIS=ROTATE_TO_AXIS+1,
145  CACHE_DIRTY
146  };
147 
150 
151  // used internally as cache of which what _axis is aligned to help
152  // decide which method of rotation to use.
155  void updateCache();
156 
157 };
158 
159 }
160 
161 #endif
#define OSG_EXPORT
Definition: Export.h:43
const Vec3 & getAxis() const
Definition: AutoTransform.h:87
AutoRotateMode getAutoRotateMode() const
Definition: AutoTransform.h:81
#define NULL
Definition: Export.h:59
void setScale(double scale)
Definition: AutoTransform.h:52
void setAutoScaleToScreen(bool autoScaleToScreen)
Definition: AutoTransform.h:94
double _autoScaleTransitionWidthRatio
double getMaximumScale() const
Definition: AutoTransform.h:61
bool getAutoScaleToScreen() const
Definition: AutoTransform.h:96
void setAutoScaleTransitionWidthRatio(float ratio)
Definition: AutoTransform.h:98
Viewport::value_type _previousWidth
void setMinimumScale(double minimumScale)
Definition: AutoTransform.h:57
void setPivotPoint(const Vec3d &pivot)
Definition: AutoTransform.h:63
void setRotation(const Quat &quat)
Definition: AutoTransform.h:49
osg::Vec3 _previousEyePoint
AutoRotateMode _autoRotateMode
virtual osg::Object * clone(const osg::CopyOp &copyop) const
Definition: AutoTransform.h:35
const Quat & getRotation() const
Definition: AutoTransform.h:50
const Vec3d & getScale() const
Definition: AutoTransform.h:55
osg::Matrixd _previousProjection
float getAutoUpdateEyeMovementTolerance() const
Definition: AutoTransform.h:68
const Vec3 & getNormal() const
Definition: AutoTransform.h:92
double value_type
Definition: Viewport.h:30
double getMinimumScale() const
Definition: AutoTransform.h:58
void setPosition(const Vec3d &pos)
Definition: AutoTransform.h:45
osg::Vec3 _previousLocalUp
virtual const char * className() const
Definition: AutoTransform.h:37
void setMaximumScale(double maximumScale)
Definition: AutoTransform.h:60
Viewport::value_type _previousHeight
virtual const AutoTransform * asAutoTransform() const
Definition: AutoTransform.h:43
double _autoUpdateEyeMovementTolerance
Definition: AlphaFunc.h:19
const Vec3d & getPosition() const
Definition: AutoTransform.h:46
const Vec3d & getPivotPoint() const
Definition: AutoTransform.h:64
virtual osg::Object * cloneType() const
Definition: AutoTransform.h:34
float getAutoScaleTransitionWidthRatio() const
Definition: AutoTransform.h:99
Definition: Quat.h:29
virtual const char * libraryName() const
Definition: AutoTransform.h:38
virtual ~AutoTransform()
virtual bool isSameKindAs(const osg::Object *obj) const
Definition: AutoTransform.h:36
void setAutoUpdateEyeMovementTolerance(float tolerance)
Definition: AutoTransform.h:67
osg::Vec3d _previousPosition
osg::Matrixd _cachedMatrix
virtual AutoTransform * asAutoTransform()
Definition: AutoTransform.h:42