xsi_transformation.h Source File
 
 
 
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__