00001 
00004 #ifndef FBXFILESDK_KFBXPLUGINS_KFBXEVALUATIONCLASSIC_H
00005 #define FBXFILESDK_KFBXPLUGINS_KFBXEVALUATIONCLASSIC_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/kfbxplugins/kfbxobject.h>
00042 #include <fbxfilesdk/kfbxplugins/kfbxanimevaluator.h>
00043 #include <fbxfilesdk/kfbxplugins/kfbxanimlayer.h>
00044 
00045 #include <fbxfilesdk/fbxfilesdk_nsbegin.h>
00046 
00050 class KFBX_DLL KFbxAnimEvalClassic : public KFbxAnimEvaluator
00051 {
00052     KFBXOBJECT_DECLARE(KFbxAnimEvalClassic, KFbxAnimEvaluator);
00053 
00054 public:
00055 
00057 
00058 
00059 
00060 
00061 
00062 
00064 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00065 protected:
00066     virtual void EvaluateNodeTransform(KFbxNodeEvalState* pResult, KFbxNode* pNode, KTime pTime, KFbxAnimStack* pStack, KFbxNode::EPivotSet pPivotSet, bool pApplyTarget);
00067     virtual void EvaluatePropertyValue(KFbxAnimCurveNode* pResult, KFbxProperty& pProperty, KTime pTime, KFbxAnimStack* pStack);
00068 
00069     virtual KFbxObject* Clone(KFbxObject* pContainer, KFbxObject::ECloneType pCloneType) const;
00070 
00071 private:
00072     KFbxAnimEvalClassic(KFbxSdkManager& pManager, char const* pName);
00073     virtual void Destruct(bool pRecursive, bool pDependents);
00074 
00075     enum eFbxBlendType {eFbxBlendSimple, eFbxBlendRotation, eFbxBlendScaling, eFbxBlendTypeCount};
00076 
00077     void ComputeTRSLocal(KFbxNodeEvalState* pResult, KFbxNode* pNode, KTime pTime, KFbxAnimStack* pStack);
00078     void ComputeTRSGlobal(KFbxNodeEvalState* pResult, KFbxNode* pNode, KTime pTime, KFbxAnimStack* pStack, KFbxNode::EPivotSet pPivotSet, bool pApplyTarget);
00079     void ComputeTRSAnimationLayer(KFbxNodeEvalState* pResult, KFbxNode* pNode, KFbxVector4& pLT, KFbxVector4& pLR, KFbxVector4& pLS, KTime pTime, KFbxAnimLayer* pLayer, bool pBlend);
00080     void BlendPropertyEvalWithLayer(double* pResult, int pResultSize, KFbxProperty& pProperty, KFbxNodeEvalState* pEvalState, KTime pTime, KFbxAnimLayer* pLayer, eFbxBlendType pType);
00081     void BlendSimple(double* pResult, int pResultSize, double* pApply, int pApplySize, double pWeight, KFbxAnimLayer::EBlendMode pBlendMode);
00082     void BlendRotation(double* pResult, int pResultSize, double* pApply, int pApplySize, double pWeight, KFbxAnimLayer::EBlendMode pBlendMode, KFbxAnimLayer::ERotationAccumulationMode pRotAccuMode, int pRotationOrder);
00083     void BlendScaling(double* pResult, int pResultSize, double* pApply, int pApplySize, double pWeight, KFbxAnimLayer::EBlendMode pBlendMode, KFbxAnimLayer::EScaleAccumulationMode pScaleAccuMode);
00084 
00085     double* mPropertyValues;
00086     int     mPropertySize;
00087 
00088     double* mCurveNodeEvalValues;
00089     int     mCurveNodeEvalSize;
00090 
00091 #endif // #ifndef DOXYGEN_SHOULD_SKIP_THIS 
00092 };
00093 
00094 #include <fbxfilesdk/fbxfilesdk_nsend.h>
00095 
00096 #endif