00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00013 #ifndef _FBXSDK_SCENE_ANIMATION_CURVE_FILTERS_H_
00014 #define _FBXSDK_SCENE_ANIMATION_CURVE_FILTERS_H_
00015
00016 #include <fbxsdk/fbxsdk_def.h>
00017
00018 #include <fbxsdk/core/base/fbxtime.h>
00019 #include <fbxsdk/core/base/fbxstatus.h>
00020 #include <fbxsdk/scene/animation/fbxanimcurve.h>
00021 #include <fbxsdk/fileio/fbxiosettings.h>
00022
00023 #include <fbxsdk/fbxsdk_nsbegin.h>
00024
00025 class FbxObject;
00026 class FbxAnimStack;
00027 class FbxRotationOrder;
00028
00074 class FBXSDK_DLL FbxAnimCurveFilter
00075 {
00076 public:
00078 FbxAnimCurveFilter();
00079
00081 virtual ~FbxAnimCurveFilter() {};
00082
00090 virtual const char* GetName() const {return NULL;}
00091
00096 FbxTime& GetStartTime() {return mStart;}
00097
00102 void SetStartTime(FbxTime& pTime) { mStart = pTime; }
00103
00108 FbxTime& GetStopTime() {return mStop;}
00109
00114 void SetStopTime(FbxTime& pTime) { mStop = pTime; }
00115
00121 int GetStartKey(FbxAnimCurve& pCurve) const;
00122
00128 int GetStopKey(FbxAnimCurve& pCurve) const;
00129
00135 virtual bool NeedApply(FbxAnimStack* pAnimStack, FbxStatus* pStatus=NULL);
00136
00143 virtual bool NeedApply(FbxObject* pObj, FbxAnimStack* pAnimStack, FbxStatus* pStatus=NULL);
00144
00152 virtual bool NeedApply(FbxAnimCurveNode& pCurveNode, FbxStatus* pStatus=NULL);
00153
00160 virtual bool NeedApply(FbxAnimCurve** pCurve, int pCount, FbxStatus* pStatus=NULL);
00161
00167 virtual bool NeedApply(FbxAnimCurve& pCurve, FbxStatus* pStatus=NULL);
00168
00174 virtual bool Apply(FbxAnimStack* pAnimStack, FbxStatus* pStatus = NULL);
00175
00182 virtual bool Apply(FbxObject* pObj, FbxAnimStack* pAnimStack, FbxStatus* pStatus = NULL);
00183
00191 virtual bool Apply(FbxAnimCurveNode& pCurveNode, FbxStatus* pStatus = NULL);
00192
00199 virtual bool Apply(FbxAnimCurve** pCurve, int pCount, FbxStatus* pStatus = NULL);
00200
00206 virtual bool Apply(FbxAnimCurve& pCurve, FbxStatus* pStatus = NULL) = 0;
00207
00210 virtual void Reset()
00211 {
00212 mStart= FBXSDK_TIME_MINUS_INFINITE;
00213 mStop = FBXSDK_TIME_INFINITE;
00214 }
00215
00216
00217
00218
00219 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00220 static bool GetContinuousOffset(FbxRotationOrder& pOrder, FbxVector4& pOffset, FbxVector4& pNew, FbxVector4& pOld);
00221
00222 protected:
00223 void GetKFCurvesFromAnimCurve(FbxAnimCurve** pSrc, int pSrcCount, KFCurve** pDst, int& pDstCount);
00224
00225
00226 virtual void UpdateProgressInformation(FbxTime , FbxTime ) {};
00227
00228
00229 FbxTime mStart, mStop;
00230
00231 #endif
00232 };
00233
00234
00241 class FBXSDK_DLL FbxAnimCurveFilterConstantKeyReducer : public FbxAnimCurveFilter
00242 {
00243 public:
00245 FbxAnimCurveFilterConstantKeyReducer();
00246
00248 virtual ~FbxAnimCurveFilterConstantKeyReducer() {};
00249
00253 virtual const char* GetName() const;
00254
00259 virtual bool Apply(FbxAnimStack* pAnimStack, FbxStatus* pStatus=NULL) { return FbxAnimCurveFilter::Apply(pAnimStack, pStatus); }
00260 virtual bool Apply(FbxObject* pObj, FbxAnimStack* pAnimStack, FbxStatus* pStatus=NULL) { return FbxAnimCurveFilter::Apply(pObj, pAnimStack, pStatus); }
00261 virtual bool Apply(FbxAnimCurve** pCurve, int pCount, FbxStatus* pStatus=NULL) { return FbxAnimCurveFilter::Apply(pCurve, pCount, pStatus); }
00263
00271 virtual bool Apply(FbxAnimCurveNode& pCurveNode, FbxStatus* pStatus=NULL);
00272
00278 virtual bool Apply(FbxAnimCurve& pCurve, FbxStatus* pStatus=NULL);
00279
00282 virtual void Reset();
00283
00287 double GetDerivativeTolerance() const;
00288
00292 void SetDerivativeTolerance(double pValue);
00293
00297 double GetValueTolerance() const;
00298
00302 void SetValueTolerance(double pValue);
00303
00307 bool GetKeepFirstAndLastKeys() const;
00308
00312 void SetKeepFirstAndLastKeys( bool pKeepFirstAndLastKeys );
00313
00319 bool GetKeepOneKey() const;
00320
00326 void SetKeepOneKey( bool pKeepOneKey );
00327
00331 void SetKeepNotPureAutoKeys(bool pKeep);
00332
00333
00334
00335
00336 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00337
00338
00339
00340
00341 void SetTranslationThreshold ( double pTranslationThreshold );
00342 void SetRotationThreshold ( double pRotationThreshold );
00343 void SetScalingThreshold ( double pScalingThreshold );
00344 void SetDefaultThreshold ( double pDefaultThreshold );
00345
00346 void SetModes(bool pExporting, FbxIOSettings& pIOS);
00347
00348 private:
00349 double mDerTol;
00350 double mValTol;
00351
00352 double mTranslationThreshold;
00353 double mRotationThreshold;
00354 double mScalingThreshold;
00355 double mDefaultThreshold;
00356
00357 bool mKeepFirstAndLastKeys;
00358 bool mKeepOneKey;
00359 bool mKeepNotPureAutoKeys;
00360
00361 bool IsKeyConstant(FbxAnimCurve& pCurve, int pIndex, int pFirstIndex, int pLastIndex, double pMinValue, double pMaxValue, bool pOnlyCheckAutoKeys);
00362 #endif
00363 };
00364
00372 class FBXSDK_DLL FbxAnimCurveFilterScaleCompensate : public FbxAnimCurveFilter
00373 {
00374 public:
00376 FbxAnimCurveFilterScaleCompensate();
00378 virtual const char* GetName() const;
00379
00388 virtual bool Apply(FbxAnimCurve** pCurve, int pCount, FbxIOSettings& pIOS, FbxStatus* pStatus = NULL);
00390 virtual bool Apply(FbxAnimCurve& pCurve, FbxStatus* pStatus = NULL);
00391 };
00392
00400 class FBXSDK_DLL FbxAnimCurveFilterGimbleKiller : public FbxAnimCurveFilter
00401 {
00402 public:
00404 FbxAnimCurveFilterGimbleKiller();
00405
00407 virtual ~FbxAnimCurveFilterGimbleKiller();
00408
00412 virtual const char* GetName() const;
00413
00420 virtual bool NeedApply(FbxAnimStack* , FbxStatus* pStatus=NULL) { FBX_UNUSED(pStatus); return false; }
00421
00429 virtual bool NeedApply(FbxObject* , FbxAnimStack* , FbxStatus* pStatus=NULL) { FBX_UNUSED(pStatus); return false; }
00430
00439 virtual bool NeedApply(FbxAnimCurveNode& pCurveNode, FbxStatus* pStatus=NULL);
00440
00450 virtual bool NeedApply(FbxAnimCurve** pCurve, int pCount, FbxStatus* pStatus=NULL);
00451
00456 virtual bool NeedApply(FbxAnimCurve& , FbxStatus* pStatus=NULL) { FBX_UNUSED(pStatus); return false; }
00457
00464 virtual bool Apply(FbxAnimStack* , FbxStatus* pStatus=NULL) { FBX_UNUSED(pStatus); return false; }
00465
00473 virtual bool Apply(FbxObject* , FbxAnimStack* , FbxStatus* pStatus=NULL) { FBX_UNUSED(pStatus); return false; }
00474
00482 virtual bool Apply(FbxAnimCurveNode& pCurveNode, FbxStatus* pStatus = NULL);
00483
00493 virtual bool Apply(FbxAnimCurve** pCurve, int pCount, FbxStatus* pStatus = NULL);
00494
00498 virtual bool Apply(FbxAnimCurve& , FbxStatus* pStatus = NULL) { FBX_UNUSED(pStatus); return false; }
00499
00502 virtual void Reset();
00503
00505 bool GetApplyKeySyncFilter() const;
00506
00510 void SetApplyKeySyncFilter(bool pFlag);
00511
00512
00513
00514
00515 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00516 private:
00517 FbxRotationOrder* mRotationOrder;
00518 bool mApplyKeySyncFilter;
00519 int mRotationLayerType;
00520 #endif
00521 };
00522
00529 class FBXSDK_DLL FbxAnimCurveFilterKeyReducer : public FbxAnimCurveFilter
00530 {
00531 public:
00533 FbxAnimCurveFilterKeyReducer();
00534
00536 virtual ~FbxAnimCurveFilterKeyReducer() {};
00537
00541 virtual const char* GetName() const;
00542
00547 virtual bool Apply(FbxAnimStack* pAnimStack, FbxStatus* pStatus=NULL) { return FbxAnimCurveFilter::Apply(pAnimStack, pStatus); }
00548 virtual bool Apply(FbxObject* pObj, FbxAnimStack* pAnimStack, FbxStatus* pStatus=NULL) { return FbxAnimCurveFilter::Apply(pObj, pAnimStack, pStatus); }
00549 virtual bool Apply(FbxAnimCurveNode& pCurveNode, FbxStatus* pStatus=NULL) { return FbxAnimCurveFilter::Apply(pCurveNode, pStatus); }
00551
00558 virtual bool Apply(FbxAnimCurve** pCurve, int pCount, FbxStatus* pStatus=NULL);
00559
00565 virtual bool Apply(FbxAnimCurve& pCurve, FbxStatus* pStatus=NULL);
00566
00569 virtual void Reset();
00570
00572 double GetPrecision() const;
00573
00577 void SetPrecision(double pPrecision);
00578
00580 bool GetKeySync() const;
00581
00585 void SetKeySync(bool pKeySync);
00586
00587
00588
00589
00590 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00591 private:
00592 bool KeyReducer(FbxAnimCurve& pSCurve, FbxAnimCurve& pTCurve, FbxTime pStart, FbxTime pStop);
00593 bool Subdivise(FbxAnimCurve& pSCurve, FbxAnimCurve& pTCurve, int pLeft, int pRight);
00594 double FindMaxError(FbxAnimCurve& pSCurve, FbxAnimCurve& pTCurve, int pLeft, int pRight, int& pSplit);
00595
00596
00597 double mPrecision;
00598 int mProgressCurrentRecurseLevel;
00599 bool mKeySync;
00600 #endif
00601 };
00602
00603
00608 class FBXSDK_DLL FbxAnimCurveFilterKeySync : public FbxAnimCurveFilter
00609 {
00610 public:
00612 FbxAnimCurveFilterKeySync();
00613
00615 virtual ~FbxAnimCurveFilterKeySync() {};
00616
00620 virtual const char* GetName() const;
00621
00626 virtual bool NeedApply(FbxAnimStack* pAnimStack, FbxStatus* pStatus=NULL) { return FbxAnimCurveFilter::NeedApply(pAnimStack, pStatus); }
00627 virtual bool NeedApply(FbxObject* pObj, FbxAnimStack* pAnimStack, FbxStatus* pStatus=NULL) { return FbxAnimCurveFilter::NeedApply(pObj, pAnimStack, pStatus); }
00628 virtual bool NeedApply(FbxAnimCurveNode& pCurveNode, FbxStatus* pStatus=NULL) { return FbxAnimCurveFilter::NeedApply(pCurveNode, pStatus); }
00629 virtual bool Apply(FbxAnimStack* pAnimStack, FbxStatus* pStatus=NULL) { return FbxAnimCurveFilter::Apply(pAnimStack, pStatus); }
00630 virtual bool Apply(FbxObject* pObj, FbxAnimStack* pAnimStack, FbxStatus* pStatus=NULL) { return FbxAnimCurveFilter::Apply(pObj, pAnimStack, pStatus); }
00631 virtual bool Apply(FbxAnimCurveNode& pCurveNode, FbxStatus* pStatus=NULL) { return FbxAnimCurveFilter::Apply(pCurveNode, pStatus); }
00633
00640 virtual bool NeedApply(FbxAnimCurve** pCurve, int pCount, FbxStatus* pStatus=NULL);
00641
00647 virtual bool NeedApply(FbxAnimCurve& , FbxStatus* pStatus=NULL) { FBX_UNUSED(pStatus); return false; }
00648
00655 virtual bool Apply(FbxAnimCurve** pCurve, int pCount, FbxStatus* pStatus=NULL);
00656
00663 virtual bool Apply(FbxAnimCurve& , FbxStatus* pStatus=NULL) { FBX_UNUSED(pStatus); return true; }
00664 };
00665
00666
00671 class FBXSDK_DLL FbxAnimCurveFilterResample : public FbxAnimCurveFilter
00672 {
00673 public:
00675 FbxAnimCurveFilterResample();
00676
00678 virtual ~FbxAnimCurveFilterResample() {};
00679
00683 virtual const char* GetName() const;
00684
00689 virtual bool Apply(FbxAnimStack* pAnimStack, FbxStatus* pStatus=NULL) { return FbxAnimCurveFilter::Apply(pAnimStack, pStatus); }
00690 virtual bool Apply(FbxObject* pObj, FbxAnimStack* pAnimStack, FbxStatus* pStatus=NULL) { return FbxAnimCurveFilter::Apply(pObj, pAnimStack, pStatus); }
00691 virtual bool Apply(FbxAnimCurveNode& pCurveNode, FbxStatus* pStatus=NULL) { return FbxAnimCurveFilter::Apply(pCurveNode, pStatus); }
00692 virtual bool Apply(FbxAnimCurve** pCurve, int pCount, FbxStatus* pStatus=NULL) { return FbxAnimCurveFilter::Apply(pCurve, pCount, pStatus); }
00694
00700 virtual bool Apply(FbxAnimCurve& pCurve, FbxStatus* pStatus=NULL);
00701
00704 virtual void Reset();
00705
00709 void SetKeysOnFrame(bool pKeysOnFrame);
00710
00714 bool GetKeysOnFrame() const;
00715
00719 FbxTime GetPeriodTime() const;
00720
00724 void SetPeriodTime(FbxTime &pPeriod);
00725
00726
00734 bool GetIntelligentMode() const;
00735
00742 void SetIntelligentMode( bool pIntelligent );
00743
00744
00745
00746
00747 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00748 private:
00749 bool mKeysOnFrame;
00750 FbxTime mPeriod;
00751 bool mIntelligent;
00752 #endif
00753 };
00754
00755
00760 class FBXSDK_DLL FbxAnimCurveFilterScale : public FbxAnimCurveFilter
00761 {
00762 public:
00764 FbxAnimCurveFilterScale();
00765
00767 virtual ~FbxAnimCurveFilterScale() {};
00768
00772 virtual const char* GetName() const;
00773
00778 virtual bool Apply(FbxAnimStack* pAnimStack, FbxStatus* pStatus=NULL) { return FbxAnimCurveFilter::Apply(pAnimStack, pStatus); }
00779 virtual bool Apply(FbxObject* pObj, FbxAnimStack* pAnimStack, FbxStatus* pStatus=NULL) { return FbxAnimCurveFilter::Apply(pObj, pAnimStack, pStatus); }
00780 virtual bool Apply(FbxAnimCurve** pCurve, int pCount, FbxStatus* pStatus=NULL) { return FbxAnimCurveFilter::Apply(pCurve, pCount, pStatus); }
00782
00790 virtual bool Apply(FbxAnimCurveNode& pCurveNode, FbxStatus* pStatus=NULL);
00791
00797 virtual bool Apply(FbxAnimCurve& pCurve, FbxStatus* pStatus=NULL);
00798
00801 virtual void Reset();
00802
00806 double GetScale() const;
00807
00811 void SetScale(double pScale);
00812
00813
00814
00815
00816 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00817 private:
00818 double mScale;
00819 #endif
00820 };
00821
00822
00828 class FBXSDK_DLL FbxAnimCurveFilterScaleByCurve : public FbxAnimCurveFilter
00829 {
00830 public:
00832 FbxAnimCurveFilterScaleByCurve();
00833
00835 virtual ~FbxAnimCurveFilterScaleByCurve() {};
00836
00840 virtual const char* GetName() const;
00841
00846 virtual bool Apply(FbxAnimStack* pAnimStack, FbxStatus* pStatus=NULL) { return FbxAnimCurveFilter::Apply(pAnimStack, pStatus); }
00847 virtual bool Apply(FbxObject* pObj, FbxAnimStack* pAnimStack, FbxStatus* pStatus=NULL) { return FbxAnimCurveFilter::Apply(pObj, pAnimStack, pStatus); }
00848 virtual bool Apply(FbxAnimCurve** pCurve, int pCount, FbxStatus* pStatus=NULL) { return FbxAnimCurveFilter::Apply(pCurve, pCount, pStatus); }
00850
00858 virtual bool Apply(FbxAnimCurveNode& pCurveNode, FbxStatus* pStatus=NULL);
00859
00865 virtual bool Apply(FbxAnimCurve& pCurve, FbxStatus* pStatus=NULL);
00866
00869 virtual void Reset();
00870
00874 FbxAnimCurve* GetScale() const;
00875
00879 void SetScale(FbxAnimCurve* pScale);
00880
00881
00882
00883
00884 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00885 private:
00886 FbxAnimCurve* mScale;
00887 #endif
00888 };
00889
00894 class FBXSDK_DLL FbxAnimCurveFilterTSS : public FbxAnimCurveFilter
00895 {
00896 public:
00898 FbxAnimCurveFilterTSS();
00899
00901 virtual ~FbxAnimCurveFilterTSS() {};
00902
00906 virtual const char* GetName() const;
00907
00912 virtual bool Apply(FbxAnimStack* pAnimStack, FbxStatus* pStatus=NULL) { FBX_UNUSED(pStatus); return FbxAnimCurveFilter::Apply(pAnimStack); }
00913 virtual bool Apply(FbxObject* pObj, FbxAnimStack* pAnimStack, FbxStatus* pStatus=NULL) { FBX_UNUSED(pStatus); return FbxAnimCurveFilter::Apply(pObj, pAnimStack); }
00914 virtual bool Apply(FbxAnimCurveNode& pCurveNode, FbxStatus* pStatus=NULL) { FBX_UNUSED(pStatus); return FbxAnimCurveFilter::Apply(pCurveNode); }
00915 virtual bool Apply(FbxAnimCurve** pCurve, int pCount, FbxStatus* pStatus=NULL) { FBX_UNUSED(pStatus); return FbxAnimCurveFilter::Apply(pCurve, pCount); }
00917
00923 virtual bool Apply(FbxAnimCurve& pCurve, FbxStatus* pStatus=NULL);
00924
00927 virtual void Reset();
00928
00932 FbxTime GetShift() const;
00933
00937 void SetShift(FbxTime& pShift);
00938
00942 double GetScale() const;
00943
00947 void SetScale(double pScale);
00948
00949
00950
00951
00952 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00953 private:
00954 FbxTime mShift;
00955 double mScale;
00956 #endif
00957 };
00958
00974 class FBXSDK_DLL FbxAnimCurveFilterUnroll : public FbxAnimCurveFilter
00975 {
00976 public:
00978 FbxAnimCurveFilterUnroll();
00979
00981 virtual ~FbxAnimCurveFilterUnroll() {};
00982
00986 virtual const char* GetName() const;
00987
00994 virtual bool NeedApply(FbxAnimStack* , FbxStatus* pStatus=NULL) { FBX_UNUSED(pStatus); return false; };
00995
01003 virtual bool NeedApply(FbxObject* , FbxAnimStack* , FbxStatus* pStatus=NULL) { FBX_UNUSED(pStatus); return false; }
01004
01013 virtual bool NeedApply(FbxAnimCurveNode& pCurveNode, FbxStatus* pStatus=NULL);
01014
01025 virtual bool NeedApply(FbxAnimCurve** pCurve, int pCount, FbxStatus* pStatus=NULL);
01026
01030 virtual bool NeedApply(FbxAnimCurve& , FbxStatus* pStatus=NULL) { FBX_UNUSED(pStatus); return false; };
01031
01038 virtual bool Apply(FbxAnimStack* , FbxStatus* pStatus=NULL) { FBX_UNUSED(pStatus); return false; };
01039
01047 virtual bool Apply(FbxObject* , FbxAnimStack* , FbxStatus* pStatus=NULL) { FBX_UNUSED(pStatus); return false; }
01048
01055 virtual bool Apply(FbxAnimCurveNode& pCurveNode, FbxStatus* pStatus=NULL);
01056
01066 virtual bool Apply(FbxAnimCurve** pCurve, int pCount, FbxStatus* pStatus=NULL);
01067
01071 virtual bool Apply(FbxAnimCurve& , FbxStatus* pStatus=NULL) { FBX_UNUSED(pStatus); return false; }
01072
01075 virtual void Reset();
01076
01081 double GetQualityTolerance() const;
01082
01087 void SetQualityTolerance(double pQualityTolerance);
01088
01099 bool GetTestForPath() const;
01100
01111 void SetTestForPath(bool pTestForPath);
01112
01119 bool GetForceAutoTangents() const;
01120
01127 void SetForceAutoTangents(bool pForceAutoTangents);
01128
01129
01130
01131
01132 #ifndef DOXYGEN_SHOULD_SKIP_THIS
01133 void SetRotationOrder(int pOrder);
01134
01135 private:
01136 double InterpolationQualityFactor(FbxVector4& lV1, FbxVector4& lV2);
01137
01138 double mQualityTolerance;
01139 bool mTestForPath;
01140 bool mForceAutoTangents;
01141 int mRotationOrder;
01142 int mRotationLayerType;
01143 #endif
01144 };
01145
01153 class FBXSDK_DLL FbxAnimCurveFilterMatrixConverter : public FbxAnimCurveFilter
01154 {
01155 public:
01157 FbxAnimCurveFilterMatrixConverter();
01158
01160 virtual ~FbxAnimCurveFilterMatrixConverter();
01161
01165 virtual const char* GetName() const;
01166
01171 virtual bool NeedApply(FbxAnimCurve** pCurve, int pCount, FbxStatus* pStatus=NULL) { return FbxAnimCurveFilter::NeedApply(pCurve, pCount,pStatus); }
01173
01180 virtual bool NeedApply(FbxAnimStack* , FbxStatus* pStatus=NULL) { FBX_UNUSED(pStatus); return false; }
01181
01189 virtual bool NeedApply(FbxObject* , FbxAnimStack* , FbxStatus* pStatus=NULL) { FBX_UNUSED(pStatus); return false; }
01190
01200 virtual bool NeedApply(FbxAnimCurveNode* pCurveNode[3], FbxStatus* pStatus=NULL);
01201
01205 virtual bool NeedApply(FbxAnimCurve& , FbxStatus* pStatus=NULL) { FBX_UNUSED(pStatus); return false; }
01206
01213 virtual bool Apply(FbxAnimStack* , FbxStatus* pStatus=NULL) { FBX_UNUSED(pStatus); return false; }
01214
01222 virtual bool Apply(FbxObject* , FbxAnimStack* , FbxStatus* pStatus=NULL) { FBX_UNUSED(pStatus); return false; }
01223
01232 virtual bool Apply(FbxAnimCurveNode* pCurveNode[3], FbxStatus* pStatus=NULL);
01233
01247 virtual bool Apply(FbxAnimCurve** pCurve, int pCount, FbxStatus* pStatus=NULL);
01248
01260 bool Apply(FbxAnimCurve** pCurve, double* pVals, FbxStatus* pStatus=NULL);
01261
01265 virtual bool Apply(FbxAnimCurve& , FbxStatus* pStatus=NULL) { FBX_UNUSED(pStatus); return false; };
01266
01269 virtual void Reset();
01270
01285 enum EMatrixIndex
01286 {
01287 ePreGlobal,
01288 ePreTranslate,
01289 ePostTranslate,
01290 ePreRotate,
01291 ePostRotate,
01292 ePreScale,
01293 ePostScale,
01294 ePostGlobal,
01295 eScaleOffset,
01296 eInactivePre,
01297 eInactivePost,
01298 eRotationPivot,
01299 eScalingPivot,
01300 eMatrixIndexCount
01301 };
01302
01307 void GetSourceMatrix(EMatrixIndex pIndex, FbxAMatrix& pMatrix) const;
01308
01313 void SetSourceMatrix(EMatrixIndex pIndex, FbxAMatrix& pMatrix);
01314
01319 void GetDestMatrix(EMatrixIndex pIndex, FbxAMatrix& pMatrix) const;
01320
01325 void SetDestMatrix(EMatrixIndex pIndex, FbxAMatrix& pMatrix);
01326
01330 FbxTime GetResamplingPeriod () const;
01331
01335 void SetResamplingPeriod (FbxTime& pResamplingPeriod);
01336
01341 bool GetGenerateLastKeyExactlyAtEndTime() const;
01342
01347 void SetGenerateLastKeyExactlyAtEndTime(bool pFlag);
01348
01352 bool GetResamplingOnFrameRateMultiple() const;
01353
01362 void SetResamplingOnFrameRateMultiple(bool pFlag);
01363
01369 bool GetApplyUnroll() const;
01370
01375 void SetApplyUnroll(bool pFlag);
01376
01380 bool GetApplyConstantKeyReducer() const;
01381
01386 void SetApplyConstantKeyReducer(bool pFlag);
01387
01393 bool GetResampleTranslation() const;
01394
01400 void SetResampleTranslation(bool pFlag);
01401
01405 void SetSrcRotateOrder(int pOrder);
01406
01410 void SetDestRotateOrder(int pOrder);
01411
01415 void SetForceApply(bool pVal);
01416
01420 bool GetForceApply() const;
01421
01422
01423
01424
01425 #ifndef DOXYGEN_SHOULD_SKIP_THIS
01426 private:
01427
01428 enum EAxisIndex {eX, eY, eZ, eAxisCount};
01429
01430
01431 class Cell;
01432
01433 bool MatricesEquivalence(FbxAMatrix pMatArrayA [eMatrixIndexCount], FbxAMatrix pMatArrayB [eMatrixIndexCount]) const;
01434
01435 bool DoConvert(FbxAnimCurve** pCurve,
01436 double pT[eAxisCount],
01437 double pR[eAxisCount],
01438 double pS[eAxisCount]);
01439
01440 void FindTimeInterval
01441 (
01442 FbxTime& pStart,
01443 FbxTime& pEnd,
01444 FbxAnimCurve* pTFCurve [eAxisCount],
01445 FbxAnimCurve* pRFCurve [eAxisCount],
01446 FbxAnimCurve* pSFCurve [eAxisCount]
01447 );
01448
01449 void ComputeTotalMatrix
01450 (
01451 FbxAMatrix& pGlobal,
01452 Cell& pCell,
01453 FbxAMatrix& pTranslate,
01454 FbxAMatrix& pRotate,
01455 FbxAMatrix& pScale
01456 );
01457
01458 void ExtractTransforms
01459 (
01460 FbxVector4& pScaleVector,
01461 FbxVector4& pRotateVector,
01462 FbxVector4& pTranslateVector,
01463 FbxAMatrix& pGlobal,
01464 Cell& pDest
01465 );
01466
01467 void SetDestFCurve(FbxAnimCurve* pCurve [eAxisCount],
01468 int pIndex,
01469 FbxTime pTime,
01470 FbxVector4 pVector,
01471 FbxAnimCurveDef::EInterpolationType pInterpMode[eAxisCount],
01472 FbxAnimCurveDef::ETangentMode pTangentMode[eAxisCount]);
01473
01474 void FillInterpAndTangeant(FbxTime& pTime,
01475 FbxAnimCurve* pSourceCurve[eAxisCount],
01476 FbxAnimCurveDef::EInterpolationType* pInterp,
01477 FbxAnimCurveDef::ETangentMode* pTangeant);
01478
01479 void SetDestFCurveTangeant(FbxAnimCurve* pCurve [eAxisCount],
01480 int pIndex,
01481 FbxAnimCurveDef::ETangentMode pTangentMode[eAxisCount],
01482 FbxVector4 pKeyValue,
01483 FbxVector4 pNextKeyValue);
01484
01485 Cell* mSource;
01486 Cell* mDest;
01487
01488 FbxTime mResamplingPeriod;
01489 bool mResamplingOnFrameRateMultiple;
01490
01491 bool mApplyUnroll;
01492 bool mApplyConstantKeyReducer;
01493
01494
01495 FbxRotationOrder* mSrcRotationOrder;
01496 FbxRotationOrder* mDestRotationOrder;
01497
01498
01499 bool mGenerateLastKeyExactlyAtEndTime;
01500
01501
01502 bool mResampleTranslation;
01503
01504
01505 bool mForceApply;
01506
01507
01508 FbxAnimCurveNode* mRotationCurveNode;
01509 #endif
01510 };
01511
01512 #include <fbxsdk/fbxsdk_nsend.h>
01513
01514 #endif