00001 #ifndef __FBDATA_H__
00002 #define __FBDATA_H__
00003
00004
00005
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
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
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
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
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
00091 #define ANIMATIONNODE_TYPE_COLOR_RGBA "ColorAndAlpha"
00092
00094
00095 K_FORWARD( IConnector );
00096 K_FORWARD( KFCurve );
00097
00098 #ifdef FBSDKUseNamespace
00099 namespace FBSDKNamespace {
00100 #endif
00101
00102 FB_FORWARD( FBEvaluateInfo );
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 };
00136 FB_DEFINE_ENUM( FBSDK_DLL, TangentMode );
00137
00141 enum FBTangentClampMode {
00142 kFBTangentClampModeNone,
00143 kFBTangentClampModeClamped
00144
00145 };
00146 FB_DEFINE_ENUM( FBSDK_DLL, TangentClampMode );
00147
00151 enum FBTangentConstantMode {
00152 kFBTangentConstantModeNormal,
00153 kFBTangentConstantModeNext
00154 };
00155 FB_DEFINE_ENUM( FBSDK_DLL, TangentConstantMode );
00156
00158
00160 FB_FORWARD( FBFCurve );
00161 __FB_FORWARD( FBFCurveKey );
00162 FB_FORWARD( FBPropertyListFCurveKey );
00163
00165 class FBSDK_DLL FBFCurveKey
00166 {
00167 private:
00168 HDataFBFCurveKey mLocalPtr;
00169 void FBFCurveKeyInitProperties();
00171 void PropertyAdd( FBProperty* ) {};
00172 public:
00177 FBFCurveKey( HKFCurve pFCurve=NULL, int pKeyIndex=1 );
00178
00182 FBFCurveKey( const FBFCurveKey &pFCurveKey );
00183
00186 ~FBFCurveKey();
00187
00193 bool operator==(const FBFCurveKey &pValue) const;
00194
00195
00196
00197
00198
00199
00200
00201
00202
00203 FBPropertyFloat Value;
00204 FBPropertyFloat LeftDerivative;
00205 FBPropertyFloat RightDerivative;
00206 FBPropertyFloat LeftTangentWeight;
00207 FBPropertyFloat RightTangentWeight;
00208 FBPropertyFloat LeftBezierTangent;
00209 FBPropertyFloat RightBezierTangent;
00210
00211
00212 FBPropertyFloat Tension;
00213 FBPropertyFloat Continuity;
00214 FBPropertyFloat Bias;
00215
00216 FBPropertyTime Time;
00217 FBPropertyInterpolation Interpolation;
00218 FBPropertyTangentMode TangentMode;
00219 FBPropertyTangentClampMode TangentClampMode;
00220 FBPropertyBool TangentBreak;
00221 FBPropertyTangentConstantMode TangentConstantMode;
00222
00223 friend class FBFCurve;
00224 friend class FBPropertyListFCurveKey;
00225 };
00226
00228
00230 FB_FORWARD( FBFCurveKey );
00231
00233 class FBSDK_DLL FBPropertyListFCurveKey : public FBPropertyBaseList< FBFCurveKey >
00234 {
00235 private:
00241 virtual int Add ( FBFCurveKey pItem );
00242
00248 virtual int Remove ( FBFCurveKey pItem );
00249
00250 public:
00251
00255 virtual void RemoveAt( int pIndex );
00256
00261 virtual FBFCurveKey operator[](int pIndex);
00262
00266 virtual int GetCount();
00267 };
00268
00270
00272 __FB_FORWARD( FBFCurve);
00273
00275 class FBSDK_DLL FBFCurve : public FBComponent {
00276 __FBClassDeclare( FBFCurve,FBComponent );
00277 public:
00281 FBFCurve(HIObject pObject=NULL);
00282
00285 virtual void FBDelete() override;
00286
00291 float Evaluate(FBTime &pTime);
00292
00296 void EditBegin(int pKeyCount=-1);
00297
00301 void EditEnd(int pKeyCount=-1);
00302
00304 void EditClear();
00305
00313 int KeyAdd( FBTime &pTime, double pValue );
00314
00319 bool KeyRemove( int pIndex );
00320
00330 bool KeyDelete(int pStartIndex , int pStopIndex);
00331
00339 bool KeyDelete(FBTime pStart = FBTime::MinusInfinity, FBTime pStop = FBTime::Infinity, bool pInclusive = false);
00340
00346 void KeyInsert( FBTime &pTime, FBInterpolation pInterpolation = kFBInterpolationCubic, FBTangentMode pTangentMode = kFBTangentModeAuto );
00347
00355 void Replace( FBFCurve& pSource, FBTime pStart = FBTime::MinusInfinity, FBTime pStop = FBTime::Infinity, bool pUseExactGivenSpan = false, bool pKeyStartEndOnNoKey = true );
00356
00360 static FBFCurve* CreateInterpolatorCurve( FBInterpolatorCurveType pCurveType );
00361
00362 FBPropertyListFCurveKey Keys;
00363 };
00364
00365 FB_DEFINE_COMPONENT( FBSDK_DLL, FCurve );
00366
00368
00370 __FB_FORWARD( FBAnimationNode);
00371 __FB_FORWARD( FBPropertyListAnimationNode);
00372 FB_DEFINE_LIST( FBSDK_DLL, AnimationNode );
00373
00375 class FBSDK_DLL FBPropertyListAnimationNode : public FBPropertyBaseList< FBAnimationNode* >
00376 {
00377 public:
00382 virtual int Add ( FBAnimationNode* pItem );
00387 virtual int Remove ( FBAnimationNode* pItem );
00391 virtual void RemoveAt( int pIndex );
00396 virtual FBAnimationNode* operator[](int pIndex);
00400 virtual int GetCount();
00406 FBAnimationNode* Find( FBBox *pOriginalOwner, const char* pDataType );
00411 FBAnimationNode* Find( const char* pNodeName );
00416 FBAnimationNode* FindByLabel( const char* pNodeLabel );
00417 };
00418
00419 FB_DEFINE_COMPONENT( FBSDK_DLL, AnimationNode );
00421
00424
00426 enum FBEventAnimationNodeType {
00427 kFBEventAnimationNodeDataChange,
00428 kFBEventAnimationNodeConstraintChange,
00429 kFBEventAnimationNodeNone
00430 };
00431
00432 FB_DEFINE_ENUM( FBSDK_DLL, EventAnimationNodeType );
00433
00434 __FB_FORWARD( FBEventAnimationNode );
00435
00442 class FBSDK_DLL FBEventAnimationNode: public FBEvent
00443 {
00444 public:
00448 FBEventAnimationNode( HKEventBase pEvent );
00449
00450 FBPropertyEventAnimationNodeType Type;
00451 };
00452
00454
00457 class FBSDK_DLL FBPropertyEventAnimationNode : public FBPropertyEvent
00458 {
00459 public:
00464 virtual void Add ( HICallback pOwner, kICallbackHandler pHandler );
00465 virtual void Remove ( HICallback pOwner, kICallbackHandler pHandler );
00466 };
00474 typedef bool (* kFBDataHandler )(void* pBuffer,FBEvaluateInfo* pEvaluateInfo,FBAnimationNode* pAnimationNode,void* p1,void* p2);
00475
00477
00480 FB_DEFINE_COMPONENT( FBSDK_DLL, AnimationNode );
00481
00482 class FBSDK_DLL FBAnimationNode : public FBComponent
00483 {
00484 __FBClassDeclare( FBAnimationNode,FBComponent );
00485 public:
00490 FBAnimationNode(const char *pName = NULL, HIObject pObject=NULL);
00491
00496 void KeyAdd( FBTime &pTime, double *pData );
00497
00501 void KeyAdd( double *pData );
00502
00506 bool SetCandidate( double* Data );
00507
00511 void SetBufferType( bool pGlobal );
00512
00516 void KeyCandidate( FBTime pTime = FBTime::Infinity );
00517
00520 int GetSizeOfData();
00521
00525 int GetDataDoubleArrayCount();
00526
00532 bool WriteData( double* Data,FBEvaluateInfo* pEvaluateInfo );
00533
00539 bool WriteGlobalData( double* Data,FBEvaluateInfo* pEvaluateInfo );
00540
00546 bool ReadData( double* Data,FBEvaluateInfo* pEvaluateInfo );
00547
00558 bool ReadData( double *Data, FBTime pTime );
00559
00567 bool ReadData( double* Data );
00568
00575 bool Evaluate( double* Data, FBTime pTime, bool pEvaluateCandidate = true );
00576
00580 bool IsKey();
00581
00584 void KeyRemove();
00585
00589 void KeyRemoveAt( FBTime pTime );
00590
00594 FBAnimationNode* GetAnimationToRecord();
00595
00599 FBAnimationNode* GetAnimationToPlay();
00600
00604 FBTime ConvertGlobalToNodeTime(FBTime& pKeyTime);
00605
00609 FBTime ConvertNodeToGlobalTime(FBTime& pKeyTime);
00610
00611 FBPropertyString Label;
00612 FBPropertyString UserName;
00613 FBPropertykReference Reference;
00614 FBPropertyInt KeyCount;
00615 FBPropertyFCurve FCurve;
00616 FBPropertyBool Live;
00617 FBPropertyBool RecordMode;
00618 FBPropertyAnimationNode Parent;
00619 FBPropertyInterpolation DefaultInterpolation;
00620
00621 FBPropertyListAnimationNode Nodes;
00622
00623 FBPropertyEventAnimationNode OnChange;
00624
00625 friend class FBBox;
00626 };
00627
00629
00631
00635 enum FBLayerMode {
00636 kFBLayerModeInvalidIndex = -1,
00637 kFBLayerModeAdditive = 0,
00638 kFBLayerModeOverride,
00639 kFBLayerModeOverridePassthrough
00640 };
00641 FB_DEFINE_ENUM( FBSDK_DLL, LayerMode );
00642
00646 enum FBLayerRotationMode {
00647 kFBLayerRotationModeInvalidIndex = -1,
00648 kFBLayerRotationModeEulerRotation = 0,
00649 kFBLayerRotationModeQuaternionRotation
00650 };
00651 FB_DEFINE_ENUM( FBSDK_DLL, LayerRotationMode );
00652
00653
00654 __FB_FORWARD( FBAnimationLayer );
00655
00663 class FBSDK_DLL FBAnimationLayer : public FBComponent
00664 {
00665
00666 __FBClassDeclare(FBAnimationLayer, FBComponent);
00667 public:
00668
00674 FBAnimationLayer(const char *pName, int pLayerID, HIObject pObject=NULL);
00675
00678 virtual void FBDelete();
00679
00680 FBPropertyBool Solo;
00681 FBPropertyBool Mute;
00682 FBPropertyBool Lock;
00683 FBPropertyAnimatableDouble Weight;
00684 FBPropertyLayerMode LayerMode;
00685 FBPropertyLayerRotationMode LayerRotationMode;
00686
00690 void AddChildLayer( HFBAnimationLayer pAnimationLayer );
00691
00696 FBAnimationLayer* GetChildLayer( int pIndex );
00697
00701 int GetChildCount();
00702
00709 void GetCompleteChildHierarchy(FBArrayTemplate<FBAnimationLayer*>* pChildArray);
00710
00714 void SetParentLayer(FBAnimationLayer* pParentLayer);
00715
00719 FBAnimationLayer* GetParentLayer();
00720
00724 int GetLayerIndex();
00725
00730 void SelectLayer(bool pValue, bool pExclusiveSelect);
00731
00735 bool IsSelected();
00736
00737 private:
00738 void FBAnimationLayerInitProperties();
00739 };
00740
00741
00742 __FB_FORWARD( FBTake);
00744
00746
00749 class FBSDK_DLL FBPropertyListTake : public FBPropertyListComponent
00750 {
00751 public:
00752 FBPropertyListTake();
00757 FBTake* operator[](int pIndex);
00758 };
00759
00761 enum FBAnimationLayerMergeOptions {
00762 kFBAnimLayerMerge_SelectedLayers_SelectedProperties,
00763 kFBAnimLayerMerge_AllLayers_SelectedProperties,
00764 kFBAnimLayerMerge_SelectedLayers_AllProperties,
00765 kFBAnimLayerMerge_AllLayers_AllProperties,
00766 kFBAnimLayerMerge_SelectedLayer_CompleteScene,
00767 kFBAnimLayerMerge_AllLayers_CompleteScene,
00768 };
00769
00771 enum FBMergeLayerMode {
00772 kFBMergeLayerModeAutomatic,
00773 kFBMergeLayerModeAdditive,
00774 kFBMergeLayerModeOverride,
00775 };
00776
00778
00780
00808 class FBSDK_DLL FBTake : public FBComponent {
00809 __FBClassDeclare( FBTake,FBComponent );
00810 public:
00818 FBTake(const char* pName, HIObject pObject=NULL);
00819
00824 virtual void FBDelete();
00825
00834 HFBTake CopyTake( const char *pNewTakeName );
00835
00840 void PlotAllTakesOnSelected(FBTime pPlotPeriod);
00843 void CreateNewLayer();
00844
00848 void RemoveLayer(int pLayerIndex);
00849
00854 FBAnimationLayer* GetLayer(int pLayerIndex);
00855
00860 FBAnimationLayer* GetLayerByName(const char* pName);
00861
00865 void SetCurrentLayer(int pLayerIndex);
00866
00870 int GetCurrentLayer();
00871
00875 int GetLayerCount();
00876
00880 bool MoveCurrentLayerUp();
00881
00885 bool MoveCurrentLayerDown();
00886
00889 void DuplicateSelectedLayers();
00890
00896 void MergeLayers(FBAnimationLayerMergeOptions pMergeOptions, bool pDeleteMergedLayers, FBMergeLayerMode pMergeMode);
00897
00902 void PlotTakeOnSelected(FBTime pPlotPeriod);
00903
00908 void PlotAllTakesOnSelectedProperties(FBTime pPlotPeriod);
00909
00914 void PlotTakeOnSelectedProperties(FBTime pPlotPeriod);
00915
00919 void ClearAllProperties(bool pOnSelectedObjectsOnly);
00920
00921 FBPropertyTimeSpan ReferenceTimeSpan;
00922 FBPropertyTimeSpan LocalTimeSpan;
00923 FBPropertyString Comments;
00924 };
00925
00926 FB_DEFINE_COMPONENT( FBSDK_DLL, Take );
00927
00929
00931 __FB_FORWARD( FBTimeWarpManager );
00932
00936 class FBSDK_DLL FBTimeWarpManager : public FBComponent
00937 {
00938 __FBClassDeclare(FBTimeWarpManager, FBComponent);
00939
00940 public:
00941 typedef void (*TimeWarpChangeCallback)(void* pObject);
00942
00946 FBTimeWarpManager();
00947
00948
00951 void TimeWarpTakeChange();
00952
00956 void TimeWarpClearTake(HFBTake pTake);
00957
00961 void TimeWarpInitTake(HFBTake pTake);
00962
00967 void TimeWarpCopyTake(HFBTake pDstTake, HFBTake pSrcTake );
00968
00969
00975 void TimeWarpAddToTake(HFBTake pTake, FBAnimationNode* pTimeWarp, int pNickNumber=0);
00976
00981 void DestroyTimeWarpFromTake(HFBTake pTake, FBAnimationNode* pTimeWarp);
00982
00986 void RemoveTimeWarpFromScene(FBAnimationNode* pTimeWarp);
00987
00988
00993 kLong GetTimeWarpCount(HFBTake pTake);
00994
01000 FBAnimationNode* GetTimeWarpAtIndex(HFBTake pTake, kLong pIndex);
01001
01002
01008 int GetTimeWarpNickNumber(HFBTake pTake, FBAnimationNode* pTimeWarp);
01009
01016 bool SetTimeWarpNickNumber(HFBTake pTake, FBAnimationNode* pTimeWarp, int pNumber);
01017
01023 int GetTimeWarpNickNumberAtIndex(HFBTake pTake, kLong pIndex);
01024
01030 FBAnimationNode* GetTimeWarpFromNickNumber(HFBTake pTake, int pNumber);
01031
01036 int FindTimeWarpNickNumberGlobal(FBAnimationNode* pTimeWarp);
01037
01038
01045 bool ApplyTimeWarp(HFBTake pTake, FBProperty* pEvalProp, FBAnimationNode* pTimeWarp);
01046
01051 void RemoveTimeWarp(HFBTake pTake, FBProperty* pEvalProp );
01052
01053
01058 void TimeWarpRegisterChangeEvent(TimeWarpChangeCallback pCallback, void* pObject);
01059
01064 void TimeWarpUnregisterChangeEvent(TimeWarpChangeCallback pCallback, void* pObject);
01065
01066
01071 FBAnimationNode* TimeWarpCreateNew( const char* pName );
01072
01073
01079 void TimeWarpRename( HFBTake pTake, FBAnimationNode* pTimeWarp, const char* pNewName );
01080
01087 void TimeWarpMergeCurveNode( HFBTake pTake,FBProperty* pEvalProp, FBAnimationNode* pNode, FBAnimationNode* pTimeWarpNode );
01088
01092 static FBTimeWarpManager& TheOne();
01093 };
01094
01095 #ifdef FBSDKUseNamespace
01096 }
01097 #endif
01098
01099 #endif
01100