00001
00004 #ifndef _KFbxAxisSystem_h
00005 #define _KFbxAxisSystem_h
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042 #include <kaydaradef.h>
00043 #ifndef KFBX_DLL
00044 #define KFBX_DLL K_DLLIMPORT
00045 #endif
00046
00047 #include <kaydara.h>
00048
00049 #include <klib/karrayul.h>
00050 #include <klib/kstring.h>
00051
00052 #ifndef MB_FBXSDK
00053 #include <kbaselib_nsuse.h>
00054 #endif
00055
00056 #include <kfcurve/kfcurve_forward.h>
00057 #ifndef MB_FBXSDK
00058 #include <kfcurve/kfcurve_nsuse.h>
00059 #endif
00060
00061 #include <kfbxmath/kfbxmatrix.h>
00062
00063 #include <fbxfilesdk_nsbegin.h>
00064
00065 class KFbxNode;
00066 class KFbxScene;
00067
00072 class KFBX_DLL KFbxAxisSystem
00073 {
00074 public:
00075
00081 enum eUpVector {
00082 XAxis = 1,
00083 YAxis = 2,
00084 ZAxis = 3
00085 };
00086
00087
00088
00089
00090
00091
00092 enum eFrontVector {
00093 ParityEven = 1,
00094 ParityOdd = 2
00095 };
00096
00097
00098
00099
00100
00101 enum eCoorSystem {
00102 RightHanded = 0,
00103 LeftHanded = 1
00104 };
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115 enum ePreDefinedAxisSystem {
00116 eMayaZUp = 0,
00117 eMayaYUp,
00118 eMax,
00119 eMotionBuilder,
00120 eOpenGL,
00121 eDirectX,
00122 eLightwave
00123 };
00124
00125 KFbxAxisSystem(eUpVector pUpVector, eFrontVector pFrontVector, eCoorSystem pCoorSystem);
00126 KFbxAxisSystem(const KFbxAxisSystem& pAxisSystem);
00127 KFbxAxisSystem(const ePreDefinedAxisSystem pAxisSystem);
00128 virtual ~KFbxAxisSystem();
00129
00130 bool operator==(const KFbxAxisSystem& pAxisSystem)const;
00131 bool operator!=(const KFbxAxisSystem& pAxisSystem)const;
00132 KFbxAxisSystem& operator=(const KFbxAxisSystem& pAxisSystem);
00133
00134 static const KFbxAxisSystem MayaZUp;
00135 static const KFbxAxisSystem MayaYUp;
00136 static const KFbxAxisSystem Max;
00137 static const KFbxAxisSystem Motionbuilder;
00138 static const KFbxAxisSystem OpenGL;
00139 static const KFbxAxisSystem DirectX;
00140 static const KFbxAxisSystem Lightwave;
00141
00146 void ConvertScene(KFbxScene* pScene) const;
00147
00155 void ConvertScene(KFbxScene* pScene, KFbxNode* pFbxRoot) const;
00156
00160 eUpVector GetUpVector( int & pSign ) const;
00161
00164 eCoorSystem GetCoorSystem() const;
00165
00171 void ConvertChildren(KFbxNode* pRoot, const KFbxAxisSystem& pSrcSystem) const;
00172
00174
00175
00176
00177
00178
00179
00181
00182 protected:
00183
00184 class KFbxAxis
00185 {
00186 public:
00187 enum eAxis {
00188 eXAxis = 0, eYAxis, eZAxis
00189 };
00190
00191 eAxis mAxis;
00192 int mSign;
00193
00194 bool operator==(const KFbxAxis& pAxis)const
00195 {
00196 return mAxis == pAxis.mAxis && mSign == pAxis.mSign;
00197 }
00198 };
00199
00200 KFbxAxis mUpVector;
00201 KFbxAxis mFrontVector;
00202 KFbxAxis mCoorSystem;
00203
00204 protected:
00206
00207
00208
00209 void ConvertTProperty(KArrayTemplate<KFbxNode*>& pNodes, const KFbxAxisSystem& pFrom) const;
00210 void ConvertFCurve(KArrayTemplate<KFCurve*>& pFCurves, const KFbxAxisSystem& pFrom)const;
00211
00212
00213 void AdjustPreRotation(KFbxNode* pNode, const KFbxMatrix& pConversionRM)const;
00214
00215 void AdjustPivots(KFbxNode* pNode, const KFbxMatrix& pConversionRM)const;
00216
00217 void GetConversionMatrix(const KFbxAxisSystem& pFrom, KFbxMatrix& pConversionRM)const;
00218
00219 void AdjustLimits(KFbxNode* pNode, const KFbxMatrix& pConversionRM)const;
00220
00221 void AdjustPoses(KFbxScene* pScene, const KFbxMatrix& pConversionRM) const;
00222
00223 void AdjustCamera(KFbxNode* pNode, const KFbxMatrix& pConversionRM ) const;
00224
00225 void AdjustCluster(KFbxNode* pNode, const KFbxMatrix& pConversionRM) const;
00226
00227 void ConvertChildren(KFbxNode* pRoot, const KFbxAxisSystem& pSrcSystem, bool pSubChildrenOnly) const;
00228
00229 friend class KFbxReaderFbx;
00230 friend class KFbxReaderFbx6;
00231 friend class KFbxWriterFbx;
00232 friend class KFbxWriterFbx6;
00233
00234 friend class KFbxGlobalSettings;
00235 };
00236
00237 #include <fbxfilesdk_nsend.h>
00238
00239
00240 #endif // _KFbxAxisSystem_h