fbxsdk/core/math/fbxmatrix.h Source File
 
 
 
fbxsdk/core/math/fbxmatrix.h
Go to the documentation of this file.
00001 /****************************************************************************************
00002  
00003    Copyright (C) 2013 Autodesk, Inc.
00004    All rights reserved.
00005  
00006    Use of this software is subject to the terms of the Autodesk license agreement
00007    provided at the time of installation or download, or which otherwise accompanies
00008    this software in either electronic or hard copy form.
00009  
00010 ****************************************************************************************/
00011 
00013 #ifndef _FBXSDK_CORE_MATH_MATRIX_H_
00014 #define _FBXSDK_CORE_MATH_MATRIX_H_
00015 
00016 #include <fbxsdk/fbxsdk_def.h>
00017 
00018 #include <fbxsdk/core/math/fbxvector4.h>
00019 
00020 #include <fbxsdk/fbxsdk_nsbegin.h>
00021 
00022 class FbxAMatrix;
00023 
00027 class FBXSDK_DLL FbxMatrix : public FbxDouble4x4
00028 {
00029 public:
00034 
00035                 FbxMatrix();
00036 
00040                 FbxMatrix(const FbxMatrix& pM);
00041 
00047                 FbxMatrix(const FbxVector4& pT, const FbxVector4& pR, const FbxVector4& pS);
00048 
00054                 FbxMatrix(const FbxVector4& pT, const FbxQuaternion& pQ, const FbxVector4& pS);
00055 
00062                 FbxMatrix(const FbxVector4& pRow0, const FbxVector4& pRow1, const FbxVector4& pRow2, const FbxVector4& pRow3);
00063 
00082                 FbxMatrix(      const double p00, const double p10, const double p20, const double p30,
00083                                         const double p01, const double p11, const double p21, const double p31,
00084                                         const double p02, const double p12, const double p22, const double p32,
00085                                         const double p03, const double p13, const double p23, const double p33);
00086 
00090                 FbxMatrix(const FbxAMatrix& pM);
00091                         
00093                 ~FbxMatrix ();
00095 
00105                 double Get(int pY, int pX) const;
00106 
00111                 FbxVector4 GetRow(int pY) const;
00112 
00117                 FbxVector4 GetColumn(int pX) const;
00118 
00124                 void Set(int pY, int pX, double pValue);
00125 
00127                 void SetIdentity();
00128 
00134                 void SetTRS(const FbxVector4& pT, const FbxVector4& pR, const FbxVector4& pS);
00135 
00141                 void SetTQS(const FbxVector4& pT, const FbxQuaternion& pQ, const FbxVector4& pS);
00142 
00147                 void SetRow(int pY, const FbxVector4& pRow);
00148 
00153                 void SetColumn(int pX, const FbxVector4& pColumn);
00154 
00163                 void GetElements(FbxVector4& pTranslation, FbxQuaternion& pRotation, FbxVector4& pShearing, FbxVector4& pScaling, double& pSign) const;
00164 
00168                 FbxMatrix& operator=(const FbxMatrix& pMatrix);
00170 
00178                 FbxMatrix operator-() const;
00179 
00184                 FbxMatrix operator+(const FbxMatrix& pMatrix) const;
00185 
00190                 FbxMatrix operator-(const FbxMatrix& pMatrix) const;
00191 
00196                 FbxMatrix operator*(const FbxMatrix& pMatrix) const;
00197 
00202                 FbxMatrix& operator+=(const FbxMatrix& pMatrix);
00203 
00208                 FbxMatrix& operator-=(const FbxMatrix& pMatrix);
00209 
00214                 FbxMatrix& operator*=(const FbxMatrix& pMatrix);
00215 
00219                 FbxMatrix Inverse() const;
00220 
00224                 FbxMatrix Transpose() const;
00226 
00235                 FbxVector4 MultNormalize(const FbxVector4& pVector) const;
00237 
00246                 bool operator==(const FbxMatrix & pM) const;
00247 
00252                 bool operator==(const FbxAMatrix & pM) const;
00253 
00258                 bool operator!=(const FbxMatrix & pM) const;
00259 
00264                 bool operator!=(const FbxAMatrix & pM) const;
00266 
00271 
00272                 operator double* ();
00273 
00275                 operator const double* () const;
00276 
00278                 typedef const double(kDouble44)[4][4] ;
00279 
00281                 inline kDouble44 & Double44() const { return *((kDouble44 *)&mData); }
00283 
00284 /*****************************************************************************************************************************
00285 ** WARNING! Anything beyond these lines is for internal use, may not be documented and is subject to change without notice! **
00286 *****************************************************************************************************************************/
00287 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00288         int Compare(const FbxMatrix pM, const double pThreshold = FBXSDK_TOLERANCE) const;
00289         int Compare(const FbxAMatrix pM, const double pThreshold = FBXSDK_TOLERANCE) const;
00290 
00291         FbxMatrix operator*(double pValue) const;
00292         FbxMatrix& operator*=(double pValue);
00293 
00294     double LUDecomposition(FbxVector4& pVector);
00295     FbxMatrix LUMult(FbxMatrix pM, const FbxVector4& pVector) const;
00296     double Determinant() const;
00297 #endif /* !DOXYGEN_SHOULD_SKIP_THIS *****************************************************************************************/
00298 };
00299 
00300 #include <fbxsdk/fbxsdk_nsend.h>
00301 
00302 #endif /* _FBXSDK_CORE_MATH_MATRIX_H_ */