00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00013 #ifndef _FBXSDK_SCENE_ANIMATION_EVALUATOR_H_
00014 #define _FBXSDK_SCENE_ANIMATION_EVALUATOR_H_
00015
00016 #include <fbxsdk/fbxsdk_def.h>
00017
00018 #include <fbxsdk/core/fbxobject.h>
00019 #include <fbxsdk/scene/animation/fbxanimevalstate.h>
00020 #include <fbxsdk/scene/animation/fbxanimstack.h>
00021
00022 #include <fbxsdk/fbxsdk_nsbegin.h>
00023
00024 struct FbxAnimEvaluator_internal;
00025
00070 class FBXSDK_DLL FbxAnimEvaluator : public FbxObject
00071 {
00072 FBXSDK_ABSTRACT_OBJECT_DECLARE(FbxAnimEvaluator, FbxObject);
00073
00074 public:
00082 void SetContext(FbxAnimStack* pAnimStack);
00083
00089 FbxAnimStack* GetContext();
00090
00099 FbxAMatrix& GetNodeGlobalTransform(FbxNode* pNode, FbxTime pTime=FBXSDK_TIME_INFINITE, FbxNode::EPivotSet pPivotSet=FbxNode::eSourcePivot, bool pApplyTarget=false, bool pForceEval=false);
00100
00112 FbxAMatrix& GetNodeLocalTransform(FbxNode* pNode, FbxTime pTime=FBXSDK_TIME_INFINITE, FbxNode::EPivotSet pPivotSet=FbxNode::eSourcePivot, bool pApplyTarget=false, bool pForceEval=false);
00113
00123 FbxVector4& GetNodeLocalTranslation(FbxNode* pNode, FbxTime pTime=FBXSDK_TIME_INFINITE, FbxNode::EPivotSet pPivotSet=FbxNode::eSourcePivot, bool pApplyTarget=false, bool pForceEval=false);
00124
00134 FbxVector4& GetNodeLocalRotation(FbxNode* pNode, FbxTime pTime=FBXSDK_TIME_INFINITE, FbxNode::EPivotSet pPivotSet=FbxNode::eSourcePivot, bool pApplyTarget=false, bool pForceEval=false);
00135
00145 FbxVector4& GetNodeLocalScaling(FbxNode* pNode, FbxTime pTime=FBXSDK_TIME_INFINITE, FbxNode::EPivotSet pPivotSet=FbxNode::eSourcePivot, bool pApplyTarget=false, bool pForceEval=false);
00146
00153 FbxAnimCurveNode& GetPropertyValue(FbxProperty& pProperty, FbxTime pTime, bool pForceEval=false);
00154
00160 FbxTime ValidateTime(FbxTime pTime);
00161
00175 FbxAMatrix& GetNodeGlobalTransformFast(FbxNode* pNode, int& pDirectIndex, FbxTime pTime=FBXSDK_TIME_INFINITE, FbxNode::EPivotSet pPivotSet=FbxNode::eSourcePivot, bool pApplyTarget=false, bool pForceEval=false);
00176
00194 FbxAMatrix& GetNodeLocalTransformFast(FbxNode* pNode, int& pDirectIndex, FbxTime pTime=FBXSDK_TIME_INFINITE, FbxNode::EPivotSet pPivotSet=FbxNode::eSourcePivot, bool pApplyTarget=false, bool pForceEval=false);
00195
00209 FbxVector4& GetNodeLocalTranslationFast(FbxNode* pNode, int& pDirectIndex, FbxTime pTime=FBXSDK_TIME_INFINITE, FbxNode::EPivotSet pPivotSet=FbxNode::eSourcePivot, bool pApplyTarget=false, bool pForceEval=false);
00210
00225 FbxVector4& GetNodeLocalRotationFast(FbxNode* pNode, int& pDirectIndex, FbxTime pTime=FBXSDK_TIME_INFINITE, FbxNode::EPivotSet pPivotSet=FbxNode::eSourcePivot, bool pApplyTarget=false, bool pForceEval=false);
00226
00241 FbxVector4& GetNodeLocalScalingFast(FbxNode* pNode, int& pDirectIndex, FbxTime pTime=FBXSDK_TIME_INFINITE, FbxNode::EPivotSet pPivotSet=FbxNode::eSourcePivot, bool pApplyTarget=false, bool pForceEval=false);
00242
00253 FbxAnimCurveNode& GetPropertyValueFast(FbxProperty& pProperty, int& pDirectIndex, FbxTime pTime=FBXSDK_TIME_INFINITE, bool pForceEval=false);
00254
00258 void ResetEvaluationState();
00259
00263 void InvalidateNode(FbxNode* pNode);
00264
00268 void InvalidateProperty(FbxProperty& pProperty);
00269
00284 void ComputeLocalTRSFromGlobal(FbxVector4& pRetLT, FbxVector4& pRetLR, FbxVector4& pRetLS, FbxNode* pNode, int& pDirectIndex, FbxAMatrix& pGX, FbxTime pTime=FBXSDK_TIME_INFINITE, FbxNode::EPivotSet pPivotSet=FbxNode::eSourcePivot, bool pApplyTarget=false, bool pForceEval=false);
00285
00286
00287
00288
00289 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00290 protected:
00291 virtual void Construct(const FbxAnimEvaluator* pFrom);
00292 virtual void Destruct(bool pRecursive);
00293
00294 virtual void EvaluateNodeTransform(FbxNodeEvalState* pResult, FbxNode* pNode, FbxTime pTime, FbxAnimStack* pStack, FbxNode::EPivotSet pPivotSet, bool pApplyTarget) = 0;
00295 virtual void EvaluatePropertyValue(FbxAnimCurveNode* pResult, FbxProperty& pProperty, FbxTime pTime, FbxAnimStack* pStack) = 0;
00296
00297 FbxAnimEvalState* GetEvalState(FbxTime pTime);
00298 FbxNodeEvalState* GetNodeEvalState(FbxNode* pNode, int& pDirectIndex, FbxTime pTime, FbxNode::EPivotSet pPivotSet, bool pApplyTarget, bool pForceEval);
00299
00300 private:
00301 FbxAnimEvalState* mEvalState;
00302 FbxAnimStack* mAnimStack;
00303 #endif
00304 };
00305
00306 #include <fbxsdk/fbxsdk_nsend.h>
00307
00308 #endif