00001
00004 #ifndef FBXFILESDK_KFBXPLUGINS_KFBXSYSTEMUNIT_H
00005 #define FBXFILESDK_KFBXPLUGINS_KFBXSYSTEMUNIT_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 #include <fbxfilesdk/fbxfilesdk_def.h>
00042
00043 #include <fbxfilesdk/components/kbaselib/klib/kstring.h>
00044 #include <fbxfilesdk/components/kbaselib/klib/karrayul.h>
00045
00046 #include <fbxfilesdk/fbxfilesdk_nsbegin.h>
00047
00048 class KFbxGlobalSettings;
00049 class KFbxAnimCurveNode;
00050 class KFbxXMatrix;
00051 class KFbxNode;
00052 class KFbxScene;
00053
00057 class KFBX_DLL KFbxSystemUnit
00058 {
00059 public:
00060
00073 struct KFbxUnitConversionOptions
00074 {
00076 bool mConvertRrsNodes;
00077
00079 bool mConvertLimits;
00080
00082 bool mConvertClusters;
00083
00085 bool mConvertLightIntensity;
00086
00088 bool mConvertPhotometricLProperties;
00089
00091 bool mConvertCameraClipPlanes;
00092 };
00093
00099 KFbxSystemUnit(double pScaleFactor, double pMultiplier = 1.0);
00100
00103 ~KFbxSystemUnit();
00104
00106 static const KFbxSystemUnit mm;
00107
00109 static const KFbxSystemUnit dm;
00110
00112 static const KFbxSystemUnit cm;
00113
00115 static const KFbxSystemUnit m;
00116
00118 static const KFbxSystemUnit km;
00119
00121 static const KFbxSystemUnit Inch;
00122
00124 static const KFbxSystemUnit Foot;
00125
00127 static const KFbxSystemUnit Mile;
00128
00130 static const KFbxSystemUnit Yard;
00131
00132 #define KFbxSystemUnit_sPredefinedUnitCount 9
00133
00135 static const KFbxSystemUnit *sPredefinedUnits;
00136
00138 static const KFbxUnitConversionOptions DefaultConversionOptions;
00139
00144 void ConvertScene( KFbxScene* pScene, const KFbxUnitConversionOptions& pOptions = DefaultConversionOptions ) const;
00145
00154 void ConvertChildren( KFbxNode* pRoot, const KFbxSystemUnit& pSrcUnit, const KFbxUnitConversionOptions& pOptions = DefaultConversionOptions ) const;
00155
00163 void ConvertScene( KFbxScene* pScene, KFbxNode* pFbxRoot, const KFbxUnitConversionOptions& pOptions = DefaultConversionOptions ) const;
00164
00170 double GetScaleFactor() const;
00171
00176 KString GetScaleFactorAsString(bool pAbbreviated = true) const;
00177
00182 KString GetScaleFactorAsString_Plurial() const;
00183
00186 double GetMultiplier() const;
00187
00192 bool operator==(const KFbxSystemUnit& pOther) const;
00193
00198 bool operator!=(const KFbxSystemUnit& pOther) const;
00199
00203 double GetConversionFactorTo( const KFbxSystemUnit& pTarget ) const;
00204
00208 double GetConversionFactorFrom( const KFbxSystemUnit& pSource ) const;
00209
00211
00212
00213
00214
00215
00216
00218
00219 protected:
00220 double mScaleFactor;
00221 double mMultiplier;
00222
00223 void ApplyMultiplier(KFbxNode* pRoot, bool pSubChildrenOnly) const;
00224 void ConvertSTProperties(KArrayTemplate<KFbxNode*>& pNodes, double pConversionFactor) const;
00225 void ConvertSProperty(KArrayTemplate<KFbxNode*>& pNodes, double pConversionFactor) const;
00226 void ConvertAnimCurveNode(KArrayTemplate<KFbxAnimCurveNode*>& pFCurves, double pConversionFactor) const;
00227 double GetConversionFactor( double pTargetScaleFactor, double pSourceScaleFactor) const;
00228 void AdjustPivots(KFbxNode* pNode, double pConversionFactor, KFbxXMatrix& pOriginalGlobalM ) const;
00229 void AdjustLimits(KFbxNode* pNode, double pConversionFactor) const;
00230 void AdjustPoses(KFbxScene* pScene, double pConversionFactor) const;
00231
00232 void AdjustCluster(KFbxNode* pNode, double pConversionFactor) const;
00233 void AdjustLightIntensity(KFbxNode* pNode, const double pConversionFactor) const;
00234 void AdjustPhotometricLightProperties(KFbxNode* pNode, const double pConversionFactor) const;
00235 void AdjustCameraClipPlanes(KFbxNode* pNode, const double pConversionFactor) const;
00236
00237 void ConvertChildren( KFbxNode* pRoot, const KFbxSystemUnit& pSrcUnit, bool pSubChildrenOnly, const KFbxUnitConversionOptions& pOptions ) const;
00238
00239 friend class KFbxGlobalSettings;
00240 };
00241
00242 #include <fbxfilesdk/fbxfilesdk_nsend.h>
00243
00244 #endif // FBXFILESDK_KFBXPLUGINS_KFBXSYSTEMUNIT_H
00245