00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef COIN_SBROTATION_H
00021 #define COIN_SBROTATION_H
00022
00023 #include <stdio.h>
00024 #include <Inventor/SbVec4f.h>
00025
00026 class SbMatrix;
00027 class SbVec3f;
00028
00029 class COIN_DLL_API SbRotation {
00030 public:
00031 SbRotation(void);
00032 SbRotation(const SbVec3f & axis, const float radians);
00033 SbRotation(const float q[4]);
00034 SbRotation(const float q0, const float q1, const float q2, const float q3);
00035 SbRotation(const SbMatrix & m);
00036 SbRotation(const SbVec3f & rotateFrom, const SbVec3f & rotateTo);
00037 const float * getValue(void) const;
00038 void getValue(float & q0, float & q1, float & q2, float & q3) const;
00039 SbRotation & setValue(const float q0, const float q1,
00040 const float q2, const float q3);
00041 void getValue(SbVec3f & axis, float & radians) const;
00042 void getValue(SbMatrix & matrix) const;
00043 SbRotation & invert(void);
00044 SbRotation inverse(void) const;
00045 SbRotation & setValue(const float q[4]);
00046 SbRotation & setValue(const SbMatrix & m);
00047 SbRotation & setValue(const SbVec3f & axis, const float radians);
00048 SbRotation & setValue(const SbVec3f & rotateFrom, const SbVec3f & rotateTo);
00049 SbRotation & operator*=(const SbRotation & q);
00050 SbRotation & operator*=(const float s);
00051 friend COIN_DLL_API int operator==(const SbRotation & q1, const SbRotation & q2);
00052 friend COIN_DLL_API int operator!=(const SbRotation & q1, const SbRotation & q2);
00053 SbBool equals(const SbRotation & r, const float tolerance) const;
00054 friend COIN_DLL_API SbRotation operator *(const SbRotation & q1, const SbRotation & q2);
00055 void multVec(const SbVec3f & src, SbVec3f & dst) const;
00056
00057 void scaleAngle(const float scaleFactor);
00058 static SbRotation slerp(const SbRotation & rot0, const SbRotation & rot1,
00059 float t);
00060 static SbRotation identity(void);
00061
00062 void print(FILE * fp) const;
00063
00064 private:
00065 SbVec4f quat;
00066 };
00067
00068 COIN_DLL_API int operator ==(const SbRotation & q1, const SbRotation & q2);
00069 COIN_DLL_API int operator !=(const SbRotation & q1, const SbRotation & q2);
00070 COIN_DLL_API SbRotation operator *(const SbRotation & q1, const SbRotation & q2);
00071
00072 #endif // !COIN_SBROTATION_H