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 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
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
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
00198
00199
00200
00201
00202
00203
00204
00205 FBPropertyFloat Value;
00206 FBPropertyFloat LeftDerivative;
00207 FBPropertyFloat RightDerivative;
00208 FBPropertyFloat LeftTangentWeight;
00209 FBPropertyFloat RightTangentWeight;
00210 FBPropertyFloat LeftBezierTangent;
00211 FBPropertyFloat RightBezierTangent;
00212
00213
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
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
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
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
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
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
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
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
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
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
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
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