00001
00004 #ifndef FBXFILESDK_KFBXPLUGINS_KFBXAXISSYSTEM_H
00005 #define FBXFILESDK_KFBXPLUGINS_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 <fbxfilesdk/components/kbaselib/kaydaradef_h.h>
00043 #include <fbxfilesdk/components/kbaselib/kaydara.h>
00044
00045 #include <fbxfilesdk/components/kbaselib/klib/karrayul.h>
00046 #include <fbxfilesdk/components/kbaselib/klib/kstring.h>
00047
00048 #include <fbxfilesdk/components/kfcurve/kfcurve_forward.h>
00049
00050 #include <fbxfilesdk/kfbxmath/kfbxmatrix.h>
00051
00052 #include <fbxfilesdk/fbxfilesdk_nsbegin.h>
00053
00054 class KFbxNode;
00055 class KFbxScene;
00056
00061 class KFBX_DLL KFbxAxisSystem
00062 {
00063 public:
00064
00070 enum eUpVector {
00071 XAxis = 1,
00072 YAxis = 2,
00073 ZAxis = 3
00074 };
00075
00076
00077
00078
00079
00080
00081 enum eFrontVector {
00082 ParityEven = 1,
00083 ParityOdd = 2
00084 };
00085
00086
00087
00088
00089
00090 enum eCoorSystem {
00091 RightHanded = 0,
00092 LeftHanded = 1
00093 };
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104 enum ePreDefinedAxisSystem {
00105 eMayaZUp = 0,
00106 eMayaYUp,
00107 eMax,
00108 eMotionBuilder,
00109 eOpenGL,
00110 eDirectX,
00111 eLightwave
00112 };
00113
00114 KFbxAxisSystem(eUpVector pUpVector, eFrontVector pFrontVector, eCoorSystem pCoorSystem);
00115 KFbxAxisSystem(const KFbxAxisSystem& pAxisSystem);
00116 KFbxAxisSystem(const ePreDefinedAxisSystem pAxisSystem);
00117 virtual ~KFbxAxisSystem();
00118
00119 bool operator==(const KFbxAxisSystem& pAxisSystem)const;
00120 bool operator!=(const KFbxAxisSystem& pAxisSystem)const;
00121 KFbxAxisSystem& operator=(const KFbxAxisSystem& pAxisSystem);
00122
00123 static const KFbxAxisSystem MayaZUp;
00124 static const KFbxAxisSystem MayaYUp;
00125 static const KFbxAxisSystem Max;
00126 static const KFbxAxisSystem Motionbuilder;
00127 static const KFbxAxisSystem OpenGL;
00128 static const KFbxAxisSystem DirectX;
00129 static const KFbxAxisSystem Lightwave;
00130
00135 void ConvertScene(KFbxScene* pScene) const;
00136
00144 void ConvertScene(KFbxScene* pScene, KFbxNode* pFbxRoot) const;
00145
00149 eUpVector GetUpVector( int & pSign ) const;
00150
00153 eCoorSystem GetCoorSystem() const;
00154
00162 void ConvertChildren(KFbxNode* pRoot, const KFbxAxisSystem& pSrcSystem) const;
00163
00165
00166
00167
00168
00169
00170
00172
00173 protected:
00174
00175 class KFbxAxis
00176 {
00177 public:
00178 enum eAxis {
00179 eXAxis = 0, eYAxis, eZAxis
00180 };
00181
00182 eAxis mAxis;
00183 int mSign;
00184
00185 bool operator==(const KFbxAxis& pAxis)const
00186 {
00187 return mAxis == pAxis.mAxis && mSign == pAxis.mSign;
00188 }
00189 };
00190
00191 KFbxAxis mUpVector;
00192 KFbxAxis mFrontVector;
00193 KFbxAxis mCoorSystem;
00194
00195 protected:
00197
00198
00199
00200 void ConvertTProperty(KArrayTemplate<KFbxNode*>& pNodes, const KFbxAxisSystem& pFrom) const;
00201 void ConvertFCurve(KArrayTemplate<KFCurve*>& pFCurves, const KFbxAxisSystem& pFrom)const;
00202
00203
00204 void AdjustPreRotation(KFbxNode* pNode, const KFbxMatrix& pConversionRM)const;
00205
00206 void AdjustPivots(KFbxNode* pNode, const KFbxMatrix& pConversionRM)const;
00207
00208 void GetConversionMatrix(const KFbxAxisSystem& pFrom, KFbxMatrix& pConversionRM)const;
00209
00210 void AdjustLimits(KFbxNode* pNode, const KFbxMatrix& pConversionRM)const;
00211
00212 void AdjustPoses(KFbxScene* pScene, const KFbxMatrix& pConversionRM) const;
00213
00214 void AdjustCamera(KFbxNode* pNode, const KFbxMatrix& pConversionRM ) const;
00215
00216 void AdjustCluster(KFbxNode* pNode, const KFbxMatrix& pConversionRM) const;
00217
00218 void ConvertChildren(KFbxNode* pRoot, const KFbxAxisSystem& pSrcSystem, bool pSubChildrenOnly) const;
00219
00220 friend class KFbxGlobalSettings;
00221 };
00222
00223 #include <fbxfilesdk/fbxfilesdk_nsend.h>
00224
00225
00226 #endif // FBXFILESDK_KFBXPLUGINS_KFBXAXISSYSTEM_H
00227