xsi_transformation.h
Go to the documentation of this file.
00001 //*****************************************************************************
00011 //*****************************************************************************
00012 
00013 #if (_MSC_VER > 1000) || defined(SGI_COMPILER)
00014 #pragma once
00015 #endif
00016 
00017 #ifndef __XSITRANSFORMATION_H__
00018 #define __XSITRANSFORMATION_H__
00019 
00020 #include "sicppsdk.h"
00021 #include "xsi_rotation.h"
00022 
00023 namespace XSI {
00024 
00025 namespace MATH {
00026 
00027 class CRotation;
00028 class CVector3;
00029 class CMatrix3;
00030 class CMatrix4;
00031 
00032 //*****************************************************************************
00083 //*****************************************************************************
00084 
00085 class SICPPSDKDECL CTransformation
00086 {
00087 public:
00088 
00090     CTransformation();
00091 
00095     CTransformation( const CTransformation& in_transformation);
00096 
00098     ~CTransformation();
00099 
00104     CTransformation & operator=( const CTransformation & in_transformation);
00105 
00109     CMatrix4    GetMatrix4()const;
00110 
00114     void    SetMatrix4(const CMatrix4& in_matrix4);
00115 
00120     CTransformation& SetRotation( const CRotation &in_Rotation );
00121 
00125     CRotation GetRotation() const;
00126 
00132     CTransformation& SetRotX(const double& in_dX);
00133 
00138     double GetRotX() const;
00139 
00145     CTransformation& SetRotY(const double& in_dY);
00146 
00151     double GetRotY()const;
00152 
00158     CTransformation& SetRotZ(const double& in_dZ);
00159 
00164     double GetRotZ()const;
00165 
00171     void PutRotationOrder( CRotation::RotationOrder in_Order );
00172 
00177     CRotation::RotationOrder GetRotationOrder() const;
00178 
00190     CTransformation& SetRotationFromXYZAnglesValues
00191     (
00192         double in_dX,
00193         double in_dY,
00194         double in_dZ,
00195         CRotation::RotationOrder in_Order
00196     );
00197 
00206     CTransformation& SetRotationFromXYZAnglesValues
00207     (
00208         double in_dX,
00209         double in_dY,
00210         double in_dZ
00211     );
00212 
00218     void GetRotationFromXYZAnglesValues
00219     (
00220         double& io_dX,
00221         double& io_dY,
00222         double& io_dZ
00223     )const;
00224 
00229     CTransformation& MulInPlace(const CTransformation& in_transformation);
00230 
00236     CTransformation& Mul
00237     (
00238         const CTransformation & in_transformationA,
00239         const CTransformation & in_transformationB
00240     );
00241 
00246     CTransformation& AddParentTranslation(const CVector3& in_vector3);
00247 
00252     CTransformation& AddLocalTranslation(const CVector3& in_vector3);
00253 
00258     CTransformation& AddParentScaling(const CVector3& in_vector3);
00259 
00264     CTransformation& AddLocalScaling(const CVector3& in_vector3);
00265 
00273     CTransformation& SetRotationFromXYZAxes
00274     (
00275         const CVector3& in_vector3X,
00276         const CVector3& in_vector3Y,
00277         const CVector3& in_vector3Z
00278     );
00279 
00286     CTransformation& SetTranslationFromValues
00287     (
00288         double in_dX,
00289         double in_dY,
00290         double in_dZ
00291     );
00292 
00298     void GetTranslationValues
00299     (
00300         double& io_dX,
00301         double& io_dY,
00302         double& io_dZ
00303     )const;
00304 
00311     CTransformation& SetScalingFromValues
00312     (
00313         double in_dX,
00314         double in_dY,
00315         double in_dZ
00316     );
00317 
00323     void GetScalingValues
00324     (
00325         double& io_dX,
00326         double& io_dY,
00327         double& io_dZ
00328     )const;
00329 
00335     void GetScalingOrientationXYZAngles
00336     (
00337         double& io_dX,
00338         double& io_dY,
00339         double& io_dZ
00340     )const;
00341 
00348     CTransformation& SetScalingOrientationFromXYZAngles
00349     (
00350         double in_dX,
00351         double in_dY,
00352         double in_dZ
00353     );
00354 
00358     bool HasScalingOrientation()const;
00359 
00363     CTransformation& SetIdentity();
00364 
00369     CTransformation& SetTranslation(const CVector3& in_vector3);
00370 
00374     CVector3 GetTranslation()const;
00375 
00381     CTransformation& SetPosX(const double& in_dX);
00382 
00387     double GetPosX()const;
00388 
00394     CTransformation& SetPosY(const double& in_dY);
00395 
00400     double GetPosY()const;
00401 
00407     CTransformation& SetPosZ(const double& in_dZ);
00408 
00413     double GetPosZ()const;
00414 
00420     CTransformation& SetRotationFromAxisAngle
00421     (
00422         const CVector3& in_vector3,
00423         double          in_dAngle
00424     );
00425 
00430     CTransformation& SetRotationFromXYZAngles(const CVector3& in_vector3);
00431 
00436     double GetRotationAxisAngle (CVector3& io_vector3)const;
00437 
00442     CVector3 GetRotationXYZAngles()const;
00443 
00448     CTransformation& SetScaling(const CVector3& in_vector3);
00449 
00453     CVector3 GetScaling()const;
00454 
00460     CTransformation& SetSclX(const double& in_dX);
00461 
00466     double GetSclX()const;
00467 
00473     CTransformation& SetSclY(const double& in_dY);
00474 
00479     double GetSclY()const;
00480 
00486     CTransformation& SetSclZ(const double& in_dZ);
00487 
00492     double GetSclZ()const;
00493 
00498     CTransformation& SetRotationFromMatrix3(const CMatrix3& in_matrix3);
00499 
00503     CMatrix3 GetRotationMatrix3()const;
00504 
00509     CTransformation& SetRotationFromQuaternion(const CQuaternion& in_quaternion);
00510 
00514     CQuaternion GetRotationQuaternion(void)const;
00515 
00518     CTransformation& InvertInPlace();
00519 
00523     CTransformation& Invert(const CTransformation& in_transfo);
00524 
00530     bool EpsilonEquals
00531     (
00532         const CTransformation& in_transformation,
00533         double in_dEpsilon
00534     ) const;
00535 
00540     bool Equals(const CTransformation& in_transformation) const;
00541 
00547     bool operator ==(const CTransformation & in_transformation ) const;
00548 
00554     bool operator !=(const CTransformation & in_transformation ) const;
00555 private:
00556     void* m_ptr;
00557     inline double GetPI(){return 3.14159265358979323846;}
00558     void DegreeToRadian(double& in_Rot);
00559     void RadianToDegree(double& in_Rot);
00560 
00561 };
00562 
00563 };
00564 };
00565 
00566 #endif // __XSITRANSFORMATION_H__