Go to the
documentation of this file.
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00013 #ifndef _FBXSDK_SCENE_AXIS_SYSTEM_H_
00014 #define _FBXSDK_SCENE_AXIS_SYSTEM_H_
00015
00016 #include <fbxsdk/fbxsdk_def.h>
00017
00018 #include <fbxsdk/core/base/fbxarray.h>
00019 #include <fbxsdk/core/base/fbxstring.h>
00020 #include <fbxsdk/core/math/fbxmatrix.h>
00021
00022 #include <fbxsdk/fbxsdk_nsbegin.h>
00023
00024 class FbxNode;
00025 class FbxScene;
00026 class FbxAnimCurveNode;
00027
00102 class FBXSDK_DLL FbxAxisSystem
00103 {
00104 public:
00105
00108 enum EUpVector
00109 {
00110 eXAxis = 1,
00111 eYAxis = 2,
00112 eZAxis = 3
00113 };
00114
00122 enum EFrontVector
00123 {
00124 eParityEven = 1,
00125 eParityOdd = 2
00126 };
00127
00133 enum ECoordSystem
00134 {
00135 eRightHanded,
00136 eLeftHanded
00137 };
00138
00142 enum EPreDefinedAxisSystem
00143 {
00144 eMayaZUp,
00145 eMayaYUp,
00146 eMax,
00147 eMotionBuilder,
00148 eOpenGL,
00149 eDirectX,
00150 eLightwave
00151 };
00152
00157
00163 FbxAxisSystem(EUpVector pUpVector, EFrontVector pFrontVector, ECoordSystem pCoorSystem);
00164
00168 FbxAxisSystem(const FbxAxisSystem& pAxisSystem);
00169
00173 FbxAxisSystem(const EPreDefinedAxisSystem pAxisSystem);
00174
00176 virtual ~FbxAxisSystem();
00178
00183
00188 bool operator==(const FbxAxisSystem& pAxisSystem)const;
00189
00194 bool operator!=(const FbxAxisSystem& pAxisSystem)const;
00196
00200 FbxAxisSystem& operator=(const FbxAxisSystem& pAxisSystem);
00201
00207
00209 static const FbxAxisSystem MayaZUp;
00210
00212 static const FbxAxisSystem MayaYUp;
00213
00215 static const FbxAxisSystem Max;
00216
00218 static const FbxAxisSystem Motionbuilder;
00219
00221 static const FbxAxisSystem OpenGL;
00222
00224 static const FbxAxisSystem DirectX;
00225
00227 static const FbxAxisSystem Lightwave;
00229
00233 void ConvertScene(FbxScene* pScene) const;
00234
00241 void ConvertScene(FbxScene* pScene, FbxNode* pFbxRoot) const;
00242
00247 EFrontVector GetFrontVector( int & pSign ) const;
00248
00253 EUpVector GetUpVector( int & pSign ) const;
00254
00258 ECoordSystem GetCoorSystem() const;
00259
00267 void ConvertChildren(FbxNode* pRoot, const FbxAxisSystem& pSrcSystem) const;
00268
00270
00271
00272
00273
00274
00275
00277 protected:
00278 class AxisDef
00279 {
00280 public:
00281 enum EAxis {eXAxis, eYAxis, eZAxis};
00282
00283 EAxis mAxis;
00284 int mSign;
00285
00286 bool operator==(const AxisDef& pAxis) const
00287 {
00288 return (mAxis == pAxis.mAxis) && (mSign == pAxis.mSign);
00289 }
00290 };
00291
00293 AxisDef mUpVector;
00294
00296 AxisDef mFrontVector;
00297
00299 AxisDef mCoorSystem;
00300
00301 protected:
00303
00304
00306 void ConvertTProperty(FbxArray<FbxNode*>& pNodes, const FbxAxisSystem& pFrom) const;
00307
00309 void ConvertCurveNodes(FbxArray<FbxAnimCurveNode*>& pCurveNodes, const FbxAxisSystem& pFrom) const;
00310
00312 void AdjustPreRotation(FbxNode* pNode, const FbxMatrix& pConversionRM) const;
00313
00315 void AdjustPivots(FbxNode* pNode, const FbxMatrix& pConversionRM) const;
00316
00318 void GetConversionMatrix(const FbxAxisSystem& pFrom, FbxMatrix& pConversionRM) const;
00319
00321 void AdjustLimits(FbxNode* pNode, const FbxMatrix& pConversionRM) const;
00322
00324 void AdjustPoses(FbxScene* pScene, const FbxMatrix& pConversionRM) const;
00325
00327 void AdjustCamera(FbxNode* pNode, const FbxMatrix& pConversionRM ) const;
00328
00330 void AdjustCluster(FbxNode* pNode, const FbxMatrix& pConversionRM) const;
00331
00333 void ConvertChildren(FbxNode* pRoot, const FbxAxisSystem& pSrcSystem, bool pSubChildrenOnly) const;
00334
00335 friend class FbxGlobalSettings;
00336 };
00337
00338 #include <fbxsdk/fbxsdk_nsend.h>
00339
00340 #endif