fbdata.h

Go to the documentation of this file.
00001 #ifndef __FBDATA_H__
00002 #define __FBDATA_H__
00003 /**************************************************************************
00004  Copyright (c) 1994 - 2009 Autodesk, Inc. and/or its licensors.
00005  All Rights Reserved.
00006  
00007  The coded instructions, statements, computer programs, and/or related 
00008  material (collectively the "Data") in these files contain unpublished 
00009  information proprietary to Autodesk, Inc. and/or its licensors, which is 
00010  protected by Canada and United States of America federal copyright law 
00011  and by international treaties.
00012  
00013  The Data may not be disclosed or distributed to third parties, in whole 
00014  or in part, without the prior written consent of Autodesk, Inc. 
00015  ("Autodesk").
00016  
00017  THE DATA IS PROVIDED "AS IS" AND WITHOUT WARRANTY.
00018  ALL WARRANTIES ARE EXPRESSLY EXCLUDED AND DISCLAIMED. AUTODESK MAKES NO 
00019  WARRANTY OF ANY KIND WITH RESPECT TO THE DATA, EXPRESS, IMPLIED OR 
00020  ARISING BY CUSTOM OR TRADE USAGE, AND DISCLAIMS ANY IMPLIED WARRANTIES 
00021  OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR 
00022  PURPOSE OR USE. WITHOUT LIMITING THE FOREGOING, AUTODESK DOES NOT 
00023  WARRANT THAT THE OPERATION OF THE DATA WILL BE UNINTERRUPTED OR ERROR 
00024  FREE.
00025  
00026  IN NO EVENT SHALL AUTODESK, ITS AFFILIATES, PARENT COMPANIES, LICENSORS 
00027  OR SUPPLIERS ("AUTODESK GROUP") BE LIABLE FOR ANY LOSSES, DAMAGES OR 
00028  EXPENSES OF ANY KIND (INCLUDING WITHOUT LIMITATION PUNITIVE OR MULTIPLE 
00029  DAMAGES OR OTHER SPECIAL, DIRECT, INDIRECT, EXEMPLARY, INCIDENTAL, LOSS 
00030  OF PROFITS, REVENUE OR DATA, COST OF COVER OR CONSEQUENTIAL LOSSES OR 
00031  DAMAGES OF ANY KIND), HOWEVER CAUSED, AND REGARDLESS OF THE THEORY OF 
00032  LIABILITY, WHETHER DERIVED FROM CONTRACT, TORT (INCLUDING, BUT NOT 
00033  LIMITED TO, NEGLIGENCE), OR OTHERWISE, ARISING OUT OF OR RELATING TO THE 
00034  DATA OR ITS USE OR ANY OTHER PERFORMANCE, WHETHER OR NOT AUTODESK HAS 
00035  BEEN ADVISED OF THE POSSIBILITY OF SUCH LOSS OR DAMAGE.
00036  
00037 **************************************************************************/
00038 
00045 #include <kaydaradef.h>
00046 #ifndef FBSDK_DLL
00047 
00050     #define FBSDK_DLL K_DLLIMPORT
00051 #endif
00052 
00053 #include <fbsdk/fbcomponent.h>
00054 
00056 
00057 // Basic types
00058 #define ANIMATIONNODE_TYPE_NUMBER               "Number"
00059 #define ANIMATIONNODE_TYPE_TIME                 "Time"
00060 #define ANIMATIONNODE_TYPE_TIMECODE             "TimeCode"
00061 #define ANIMATIONNODE_TYPE_VECTOR               "Vector"
00062 #define ANIMATIONNODE_TYPE_VECTOR_4             "Vector4"
00063 #define ANIMATIONNODE_TYPE_OBJECT               "Object"
00064 #define ANIMATIONNODE_TYPE_REFERENCE            "Reference"
00065 #define ANIMATIONNODE_TYPE_EVENT                "Event"
00066 #define ANIMATIONNODE_TYPE_STRING               "String"
00067 
00068 // Types which are numbers
00069 #define ANIMATIONNODE_TYPE_ACTION               "Action"
00070 #define ANIMATIONNODE_TYPE_BOOL                 "Bool"
00071 #define ANIMATIONNODE_TYPE_ENUM                 "Enum"
00072 #define ANIMATIONNODE_TYPE_INTEGER              "Integer"
00073 #define ANIMATIONNODE_TYPE_OCCLUSION            "Occlusion"
00074 #define ANIMATIONNODE_TYPE_FIELDOFVIEWX         "FieldOfViewX"
00075 #define ANIMATIONNODE_TYPE_FIELDOFVIEWY         "FieldOfViewY"
00076 #define ANIMATIONNODE_TYPE_OPTICALCENTERX       "OpticalCenterX"
00077 #define ANIMATIONNODE_TYPE_OPTICALCENTERY       "OpticalCenterY"
00078 #define ANIMATIONNODE_TYPE_IKREACHTRANSLATION   "IK Reach Translation"
00079 #define ANIMATIONNODE_TYPE_IKREACHROTATION      "IK Reach Rotation"
00080 
00081 // Types which are vectors (3 members)
00082 #define ANIMATIONNODE_TYPE_COLOR                "Color"
00083 #define ANIMATIONNODE_TYPE_LOCAL_TRANSLATION    "Lcl Translation"
00084 #define ANIMATIONNODE_TYPE_LOCAL_ROTATION       "Lcl Rotation"
00085 #define ANIMATIONNODE_TYPE_LOCAL_SCALING        "Lcl Scaling"
00086 #define ANIMATIONNODE_TYPE_TRANSLATION          "Translation"
00087 #define ANIMATIONNODE_TYPE_ROTATION             "Rotation"
00088 #define ANIMATIONNODE_TYPE_SCALING              "Scaling"
00089 
00090 // Types which are vectors (4 members)
00091 #define ANIMATIONNODE_TYPE_COLOR_RGBA           "ColorAndAlpha"
00092 
00094 
00095 class KFCurve;
00096 
00097 #ifdef FBSDKUseNamespace
00098     namespace FBSDKNamespace {
00099 #endif
00100 
00101 FB_FORWARD( FBEvaluateInfo );
00102 FB_FORWARD( FBPlotOptions );
00103         
00105 enum FBInterpolation    {   
00106     kFBInterpolationInvalid  = -1,  
00107     kFBInterpolationConstant = 0,   
00108     kFBInterpolationLinear,         
00109     kFBInterpolationCubic,          
00110     kFBInterpolationCount           
00111 };
00112 FB_DEFINE_ENUM( FBSDK_DLL, Interpolation ); 
00113 
00115 enum FBInterpolatorCurveType {
00116     kFBInterpolatorCurveLinearIn, 
00117     kFBInterpolatorCurveLinearOut, 
00118     kFBInterpolatorCurveSmoothIn, 
00119     kFBInterpolatorCurveSmoothOut, 
00120     kFBInterpolatorCurveSlowIn, 
00121     kFBInterpolatorCurveSlowOut, 
00122     kFBInterpolatorCurveFastIn, 
00123     kFBInterpolatorCurveFastOut, 
00124     kFBInterpolatorCurveLast 
00125 };
00126 
00130 enum FBTangentMode  {
00131     kFBTangentModeAuto,             
00132     kFBTangentModeTCB,              
00133     kFBTangentModeUser,             
00134     kFBTangentModeBreak,            
00135     kFBTangentModeTimeIndependent,  
00136     kFBTangentModeClampProgressive  
00137 };
00138 FB_DEFINE_ENUM( FBSDK_DLL, TangentMode );
00139 
00143 enum FBTangentClampMode {
00144     kFBTangentClampModeNone,    
00145     kFBTangentClampModeClamped  
00146     //Add other clamping methods here...
00147 };
00148 FB_DEFINE_ENUM( FBSDK_DLL, TangentClampMode );
00149 
00153 enum FBTangentConstantMode {
00154     kFBTangentConstantModeNormal,   
00155     kFBTangentConstantModeNext      
00156 };
00157 FB_DEFINE_ENUM( FBSDK_DLL, TangentConstantMode );
00158  
00160 // FBFCurveKey
00162 FB_FORWARD( FBFCurve );
00163 __FB_FORWARD( FBFCurveKey );
00164 FB_FORWARD( FBPropertyListFCurveKey );
00165 
00167 class FBSDK_DLL FBFCurveKey
00168 {
00169 private:
00170     DataFBFCurveKey* mLocalPtr;
00171     void FBFCurveKeyInitProperties();
00173     void PropertyAdd( FBProperty* ) {};
00174 public:
00179     FBFCurveKey( ::KFCurve* pFCurve=NULL, int pKeyIndex=1 );
00180 
00184     FBFCurveKey( const FBFCurveKey &pFCurveKey );
00185 
00188     ~FBFCurveKey();
00189 
00195     bool operator==(const FBFCurveKey &pValue) const;
00196 
00197     // To convert the derivative values to degrees (as shown in Exact mode):
00198     //    degrees( atan( RightDerivative ))
00199     //    -1 * degrees( atan( LeftDerivative )) 
00200     //
00201     // To convert from the exact degree in Exact mode in the GUI to the corresponding
00202     // derivative:
00203     //    tan( radians( RightDerivative ))
00204     //    tan( radians( -1 * LeftDerivative ))
00205     FBPropertyFloat Value;              
00206     FBPropertyFloat LeftDerivative;     
00207     FBPropertyFloat RightDerivative;    
00208     FBPropertyFloat LeftTangentWeight;  
00209     FBPropertyFloat RightTangentWeight; 
00210     FBPropertyFloat LeftBezierTangent;  
00211     FBPropertyFloat RightBezierTangent; 
00212 
00213     // TCB
00214     FBPropertyFloat Tension;            
00215     FBPropertyFloat Continuity;         
00216     FBPropertyFloat Bias;               
00217     
00218     FBPropertyTime          Time;           
00219     FBPropertyInterpolation Interpolation;  
00220     FBPropertyTangentMode   TangentMode;    
00221     FBPropertyTangentClampMode      TangentClampMode;   
00222     FBPropertyBool          TangentBreak;   
00223     FBPropertyTangentConstantMode   TangentConstantMode;        
00224     
00225     friend class FBFCurve;
00226     friend class FBPropertyListFCurveKey;
00227 };
00228 
00230 // FBPropertyListFCurveKey
00232 FB_FORWARD( FBFCurveKey );
00233  
00235 class FBSDK_DLL FBPropertyListFCurveKey : public FBPropertyBaseList< FBFCurveKey >
00236 {
00237 private:
00243     virtual int  Add    ( FBFCurveKey pItem );
00244 
00250     virtual int  Remove ( FBFCurveKey pItem );
00251 
00252 public:
00253 
00257     virtual void RemoveAt( int pIndex );
00258 
00263     virtual FBFCurveKey operator[](int pIndex);
00264 
00268     virtual int  GetCount();
00269 };
00270 
00272 // FBFCurve
00274 __FB_FORWARD( FBFCurve);
00275 
00277 class FBSDK_DLL FBFCurve : public FBComponent {
00278     __FBClassDeclare( FBFCurve,FBComponent );
00279 public:
00283     FBFCurve(HIObject pObject=NULL);
00284 
00287     virtual void FBDelete() override;
00288 
00293     float   Evaluate(FBTime &pTime);
00294 
00298     void    EditBegin(int pKeyCount=-1);
00299 
00303     void    EditEnd(int pKeyCount=-1);
00304 
00306     void    EditClear();
00307 
00317     int KeyAdd( FBTime &pTime, double pValue, FBInterpolation pInterpolation=kFBInterpolationCubic, FBTangentMode pTangentMode=kFBTangentModeAuto );
00318 
00323     bool KeyRemove( int pIndex );
00324 
00334     bool KeyDelete(int pStartIndex , int pStopIndex);   
00335 
00343     bool KeyDelete(FBTime pStart = FBTime::MinusInfinity, FBTime pStop = FBTime::Infinity, bool pInclusive = false);
00344 
00350     void KeyInsert( FBTime &pTime, FBInterpolation pInterpolation = kFBInterpolationCubic, FBTangentMode pTangentMode = kFBTangentModeAuto );
00351 
00359     void KeyReplaceBy( FBFCurve& pSource, FBTime pStart = FBTime::MinusInfinity, FBTime pStop = FBTime::Infinity, bool pUseExactGivenSpan = false, bool pKeyStartEndOnNoKey = true );
00360 
00369     K_DEPRECATED_2014 void Replace( FBFCurve& pSource, FBTime pStart = FBTime::MinusInfinity, FBTime pStop = FBTime::Infinity, bool pUseExactGivenSpan = false, bool pKeyStartEndOnNoKey = true );
00370 
00374     static FBFCurve* CreateInterpolatorCurve( FBInterpolatorCurveType pCurveType );
00375 
00376     FBPropertyListFCurveKey Keys;       
00377 };
00378 
00379 FB_DEFINE_COMPONENT( FBSDK_DLL, FCurve );
00380 
00382 // FBPropertyListAnimationNode
00384 __FB_FORWARD( FBAnimationNode);
00385 __FB_FORWARD( FBPropertyListAnimationNode);
00386 FB_DEFINE_LIST( FBSDK_DLL, AnimationNode );
00387 
00389 class FBSDK_DLL FBPropertyListAnimationNode : public FBPropertyBaseList< FBAnimationNode* >
00390 {
00391 public:
00396     virtual int  Add    ( FBAnimationNode* pItem );
00401     virtual int  Remove ( FBAnimationNode* pItem );
00405     virtual void RemoveAt( int pIndex );
00410     virtual FBAnimationNode* operator[](int pIndex);
00414     virtual int  GetCount();
00420     FBAnimationNode* Find( FBBox *pOriginalOwner, const char* pDataType );
00425     FBAnimationNode* Find( const char* pNodeName );
00430     FBAnimationNode* FindByLabel( const char* pNodeLabel );
00431 };
00432 
00434 // FBEventAnimationNode
00437 
00439 enum FBEventAnimationNodeType {
00440     kFBEventAnimationNodeDataChange,
00441     kFBEventAnimationNodeConstraintChange,
00442     kFBEventAnimationNodeNone
00443 };
00444 
00445 FB_DEFINE_ENUM( FBSDK_DLL, EventAnimationNodeType );
00446 
00447 __FB_FORWARD( FBEventAnimationNode );
00448 
00455 class FBSDK_DLL FBEventAnimationNode: public FBEvent
00456 {
00457 public:
00461     FBEventAnimationNode( HKEventBase pEvent );     
00462 
00463     FBPropertyEventAnimationNodeType        Type;   
00464 };
00465 
00467 // FBPropertyEventAnimationNode
00470 class FBSDK_DLL FBPropertyEventAnimationNode : public FBPropertyEvent
00471 {
00472   public:
00477     virtual void Add    ( HICallback pOwner, kICallbackHandler pHandler );
00478     virtual void Remove ( HICallback pOwner, kICallbackHandler pHandler );
00479 };
00487 typedef bool (* kFBDataHandler )(void* pBuffer,FBEvaluateInfo* pEvaluateInfo,FBAnimationNode* pAnimationNode,void* p1,void* p2);
00488 
00490 // FBAnimationNode
00493 FB_DEFINE_COMPONENT( FBSDK_DLL, AnimationNode );
00494 
00495 class FBSDK_DLL FBAnimationNode : public FBComponent
00496 {
00497     __FBClassDeclare( FBAnimationNode,FBComponent );
00498 public:
00503     FBAnimationNode(const char *pName = NULL, HIObject pObject=NULL);
00504 
00511     void KeyAdd( const FBTime &pTime, double *pData, FBInterpolation pInterpolation=kFBInterpolationCubic, FBTangentMode pTangentMode=kFBTangentModeAuto );
00512 
00518     void KeyAdd( double *pData, FBInterpolation pInterpolation=kFBInterpolationCubic, FBTangentMode pTangentMode=kFBTangentModeAuto );
00519 
00523     bool SetCandidate( double* Data );
00524 
00528     void SetBufferType( bool pGlobal );
00529 
00533     void KeyCandidate( FBTime pTime = FBTime::Infinity );
00534 
00537     int GetSizeOfData();
00538 
00542     int GetDataDoubleArrayCount();
00543 
00549     bool WriteData( double* Data,FBEvaluateInfo* pEvaluateInfo );
00550 
00556     bool WriteGlobalData( double* Data,FBEvaluateInfo* pEvaluateInfo );
00557 
00563     bool ReadData( double* Data,FBEvaluateInfo* pEvaluateInfo );
00564 
00575     bool ReadData( double *Data, FBTime pTime );
00576 
00584     bool ReadData( double* Data );
00585 
00592     bool Evaluate( double* Data, FBTime pTime, bool pEvaluateCandidate = true );
00593 
00595     bool IsEvaluationRecursive( FBEvaluateInfo* pEvaluateInfo );
00596 
00604     void DisableIfNotWritten( FBEvaluateInfo* pEvaluateInfo );
00605 
00609     bool IsKey();
00610 
00613     void KeyRemove();
00614 
00618     void KeyRemoveAt( FBTime pTime );
00619 
00623     FBAnimationNode* GetAnimationToRecord();
00624 
00628     FBAnimationNode* GetAnimationToPlay();
00629 
00633     FBTime ConvertGlobalToNodeTime(FBTime& pKeyTime);
00634     
00638     FBTime ConvertNodeToGlobalTime(FBTime& pKeyTime);
00639 
00640     FBPropertyString            Label;          
00641     FBPropertyString            UserName;       
00642     FBPropertykReference        Reference;      
00643     FBPropertyInt               KeyCount;       
00644     FBPropertyFCurve            FCurve;         
00645     FBPropertyBool              Live;           
00646     FBPropertyBool              RecordMode;     
00647     FBPropertyAnimationNode     Parent;         
00648     FBPropertyInterpolation     DefaultInterpolation;   
00649 
00650     FBPropertyListAnimationNode Nodes;          
00651 
00652     FBPropertyEventAnimationNode    OnChange;       
00653 
00654     friend class FBBox;
00655 };
00656 
00658 // FBAnimationLayer
00660 
00664 enum FBLayerMode    {
00665     kFBLayerModeInvalidIndex = -1,  
00666     kFBLayerModeAdditive = 0,       
00667     kFBLayerModeOverride,           
00668     kFBLayerModeOverridePassthrough 
00669 };
00670 FB_DEFINE_ENUM( FBSDK_DLL, LayerMode );
00671 
00675 enum FBLayerRotationMode    {
00676     kFBLayerRotationModeInvalidIndex = -1,      
00677     kFBLayerRotationModeEulerRotation = 0,  
00678     kFBLayerRotationModeQuaternionRotation  
00679 };
00680 FB_DEFINE_ENUM( FBSDK_DLL, LayerRotationMode );
00681 
00682 
00683 __FB_FORWARD( FBAnimationLayer );
00684 
00692 class FBSDK_DLL FBAnimationLayer : public FBComponent
00693 {
00694     //--- Open Reality declaration.
00695     __FBClassDeclare(FBAnimationLayer, FBComponent);
00696 public:
00697 
00703     FBAnimationLayer(const char *pName, int pLayerID, HIObject pObject=NULL);
00704 
00707     virtual void FBDelete();
00708 
00709     FBPropertyBool              Solo;               
00710     FBPropertyBool              Mute;               
00711     FBPropertyBool              Lock;               
00712     FBPropertyAnimatableDouble  Weight;             
00713     FBPropertyLayerMode         LayerMode;          
00714     FBPropertyLayerRotationMode LayerRotationMode;  
00715 
00719     void    AddChildLayer( FBAnimationLayer* pAnimationLayer );
00720 
00725     FBAnimationLayer*   GetChildLayer( int pIndex );
00726 
00730     int     GetChildCount();
00731 
00738     void    GetCompleteChildHierarchy(FBArrayTemplate<FBAnimationLayer*>* pChildArray);
00739 
00743     void SetParentLayer(FBAnimationLayer* pParentLayer);
00744 
00748     FBAnimationLayer*   GetParentLayer();
00749 
00753     int GetLayerIndex();
00754 
00759     void SelectLayer(bool pValue, bool pExclusiveSelect);
00760 
00764     bool IsSelected();
00765 };
00766 
00767 
00768 __FB_FORWARD( FBTake);
00770 // FBPropertyListTake
00772 
00775 class FBSDK_DLL FBPropertyListTake : public FBPropertyListComponent
00776 {
00777 public:
00778     FBPropertyListTake();
00783     FBTake* operator[](int pIndex);
00784 
00789     virtual int Add( FBComponent* pItem ) override;
00790     
00794     virtual void RemoveAt( int pIndex ) override;
00795 };
00796 
00798 enum FBAnimationLayerMergeOptions   {   
00799     kFBAnimLayerMerge_SelectedLayers_SelectedProperties,
00800     kFBAnimLayerMerge_AllLayers_SelectedProperties,     
00801     kFBAnimLayerMerge_SelectedLayers_AllProperties,     
00802     kFBAnimLayerMerge_AllLayers_AllProperties,          
00803     kFBAnimLayerMerge_SelectedLayers_CompleteScene,     
00804     kFBAnimLayerMerge_AllLayers_CompleteScene,          
00805 };
00806 
00808 K_DEPRECATED_2014 static const FBAnimationLayerMergeOptions kFBAnimLayerMerge_SelectedLayer_CompleteScene = kFBAnimLayerMerge_SelectedLayers_CompleteScene; 
00809 
00811 enum FBMergeLayerMode   {   
00812     kFBMergeLayerModeAutomatic, 
00813     kFBMergeLayerModeAdditive,  
00814     kFBMergeLayerModeOverride,  
00815 };
00816 
00818 // FBTake
00820 
00862 class FBSDK_DLL FBTake : public FBComponent {
00863     __FBClassDeclare( FBTake,FBComponent );
00864 public:
00869     FBTake(const char* pName, HIObject pObject=NULL);
00870 
00875     virtual void FBDelete();
00876 
00885     FBTake* CopyTake( const char *pNewTakeName );
00886 
00889     void CreateNewLayer();    
00890 
00894     void RemoveLayer(int pLayerIndex);  
00895 
00900     FBAnimationLayer* GetLayer(int pLayerIndex);  
00901 
00906     FBAnimationLayer* GetLayerByName(const char* pName);  
00907 
00911     void SetCurrentLayer(int pLayerIndex);
00912 
00916     int GetCurrentLayer();
00917 
00921     int GetLayerCount();
00922 
00926     bool MoveCurrentLayerUp();
00927 
00931     bool MoveCurrentLayerDown();
00932 
00935     void DuplicateSelectedLayers();
00936 
00943     void MergeLayers(FBAnimationLayerMergeOptions pMergeOptions, bool pDeleteMergedLayers, FBMergeLayerMode pMergeMode, bool pMergeLockedProperties = false);
00944 
00949     void PlotTakeOnSelected(FBPlotOptions* pPlotOptions);
00950 
00955     void PlotTakeOnSelectedProperties(FBPlotOptions* pPlotOptions);
00956 
00961     void PlotTakeOnSelected(FBTime pPlotPeriod);
00962 
00967     void PlotAllTakesOnSelected(FBTime pPlotPeriod);
00968 
00973     void PlotTakeOnSelectedProperties(FBTime pPlotPeriod);
00974 
00979     void PlotAllTakesOnSelectedProperties(FBTime pPlotPeriod);
00980 
00985     void ClearAllProperties(bool pOnSelectedObjectsOnly, bool pOnLockedProperties = false);
00986 
00989     void ClearAllPropertiesOnCurrentLayer();
00990 
00991     FBPropertyTimeSpan  ReferenceTimeSpan;      
00992     FBPropertyTimeSpan  LocalTimeSpan;          
00993     FBPropertyString    Comments;               
00994 };
00995 
00996 FB_DEFINE_COMPONENT( FBSDK_DLL, Take );
00997 
00999 // FBTimeWarpManager
01001 __FB_FORWARD( FBTimeWarpManager );
01002 
01006 class FBSDK_DLL FBTimeWarpManager : public FBComponent
01007 {
01008     __FBClassDeclare(FBTimeWarpManager, FBComponent);
01009 
01010 public:
01011     typedef void (*TimeWarpChangeCallback)(void* pObject);
01012 
01016     FBTimeWarpManager();
01017 
01018 
01021     void TimeWarpTakeChange();
01022 
01026     void TimeWarpClearTake(FBTake* pTake);
01027 
01031     void TimeWarpInitTake(FBTake* pTake);
01032 
01037     void TimeWarpCopyTake(FBTake* pDstTake, FBTake* pSrcTake );
01038 
01039 
01045     void TimeWarpAddToTake(FBTake* pTake, FBAnimationNode* pTimeWarp, int pNickNumber=0);
01046 
01051     void DestroyTimeWarpFromTake(FBTake* pTake, FBAnimationNode* pTimeWarp);
01052     
01056     void RemoveTimeWarpFromScene(FBAnimationNode* pTimeWarp);
01057 
01058 
01063     kLong GetTimeWarpCount(FBTake* pTake);
01064     
01070     FBAnimationNode* GetTimeWarpAtIndex(FBTake* pTake, kLong pIndex);
01071 
01072 
01078     int GetTimeWarpNickNumber(FBTake* pTake, FBAnimationNode* pTimeWarp);
01079 
01086     bool SetTimeWarpNickNumber(FBTake* pTake, FBAnimationNode* pTimeWarp, int pNumber);
01087     
01093     int GetTimeWarpNickNumberAtIndex(FBTake* pTake, kLong pIndex);
01094 
01100     FBAnimationNode* GetTimeWarpFromNickNumber(FBTake* pTake, int pNumber);
01101     
01106     int FindTimeWarpNickNumberGlobal(FBAnimationNode* pTimeWarp);
01107 
01108 
01115     bool ApplyTimeWarp(FBTake* pTake, FBProperty* pEvalProp, FBAnimationNode* pTimeWarp);
01116     
01121     void RemoveTimeWarp(FBTake* pTake, FBProperty* pEvalProp );
01122 
01123 
01128     void TimeWarpRegisterChangeEvent(TimeWarpChangeCallback pCallback, void* pObject);
01129     
01134     void TimeWarpUnregisterChangeEvent(TimeWarpChangeCallback pCallback, void* pObject);
01135 
01136 
01141     FBAnimationNode* TimeWarpCreateNew( const char* pName );
01142 
01143 
01149     void TimeWarpRename( FBTake* pTake, FBAnimationNode* pTimeWarp, const char* pNewName );
01150     
01157     void TimeWarpMergeCurveNode( FBTake* pTake,FBProperty* pEvalProp, FBAnimationNode*  pNode, FBAnimationNode*  pTimeWarpNode );
01158     
01162     static FBTimeWarpManager& TheOne();
01163 };
01164 
01165 #ifdef FBSDKUseNamespace
01166     }
01167 #endif
01168 
01169 #endif
01170