00001
00004 #ifndef _FBXSDK_KFCURVE_NODE_H_
00005 #define _FBXSDK_KFCURVE_NODE_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
00042 #include <kfcurve/kfcurve_h.h>
00043
00044 #include <klib/karrayul.h>
00045 #include <klib/kerror.h>
00046 #include <klib/kstring.h>
00047 #include <object/e/keventbase.h>
00048
00049 #include <kfcurve/kfcurve.h>
00050
00051 #ifndef K_PLUGIN
00052 #include <kfcurve/i/ifcurveeti.h>
00053 #include <object/i/iobject.h>
00054 #include <object/i/ifbobjectholder.h>
00055 #endif
00056
00057 K_FORWARD (IConnector)
00058 K_FORWARD (IData)
00059
00060 #ifndef MB_FBXSDK
00061 #include <kbaselib_nsuse.h>
00062 #endif
00063 #include <kbaselib_forward.h>
00064
00065 #include <kfcurve/kfcurve_nsbegin.h>
00066
00067 enum
00068 {
00069 KFCN_IN = 0,
00070 KFCN_OUT = 1,
00071 KFCN_INOUT_MASK = 1,
00072
00073 KFCN_HIDDEN = 0,
00074 KFCN_SHOWN = 2,
00075
00076 KFCN_CONTAINER_NODE = 0,
00077 KFCN_REFERENCER_NODE = 8,
00078 KFCN_REFERENCER_MASK = 8,
00079
00080 KFCN_TAKE_NODE = 16,
00081 KFCN_FIXED_NODE = 0,
00082 KFCN_TAKE_MASK = 16,
00083
00084 KFCN_EXPENDED_NODE = 32,
00085 KFCN_NOTEXPENDED_NODE = 0,
00086 KFCN_EXPENDED_MASK = 32,
00087
00088 KFCN_MULTILAYER = 64,
00089 KFCN_MONOLAYER = 0,
00090 KFCN_MULTILAYER_MASK = 64,
00091
00092 KFCN_ALWAYS_CANDIDATE = 128,
00093 KFCN_ALWAYS_CANDIDATE_TESTED = 256
00094 };
00095
00096
00097
00098
00099 enum
00100 {
00101 KCP_KEY = 1,
00102 KCP_LTANGENT,
00103 KCP_RTANGENT
00104 };
00105
00106
00107
00108
00109 enum
00110 {
00111 KFCL_NOLAYER,
00112 KFCL_ADD,
00113 KFCL_EULER_XYZ,
00114 KFCL_MULT,
00115 KFCL_QUAT
00116 };
00117
00118 #define KFCURVENODE_TRANSFORM "Transform"
00119 #define KFCURVENODE_T "T"
00120 #define KFCURVENODE_T_X "X"
00121 #define KFCURVENODE_T_Y "Y"
00122 #define KFCURVENODE_T_Z "Z"
00123 #define KFCURVENODE_R "R"
00124 #define KFCURVENODE_R_X "X"
00125 #define KFCURVENODE_R_Y "Y"
00126 #define KFCURVENODE_R_Z "Z"
00127 #define KFCURVENODE_R_W "W"
00128 #define KFCURVENODE_S "S"
00129 #define KFCURVENODE_S_X "X"
00130 #define KFCURVENODE_S_Y "Y"
00131 #define KFCURVENODE_S_Z "Z"
00132 #define KFCURVENODE_LCL_T "Lcl Translation"
00133 #define KFCURVENODE_LCL_R "Lcl Rotation"
00134 #define KFCURVENODE_LCL_S "Lcl Scaling"
00135 #define KFCURVENODE_VISIBILITY "Visibility"
00136
00137
00138 #define KFCURVENODE_OCCLUSION "Occlusion"
00139
00140
00141 #define KFCURVENODE_IK_REACH_TRANSLATION "IK Reach Translation"
00142 #define KFCURVENODE_IK_REACH_ROTATION "IK Reach Rotation"
00143
00144
00145 #define KFCURVENODE_LIGHT_CONEANGLE "Cone angle"
00146 #define KFCURVENODE_LIGHT_FOG "Fog"
00147 #define KFCURVENODE_LIGHT_INTENSITY "Intensity"
00148 #define KFCURVENODE_COLOR "Color"
00149 #define KFCURVENODE_COLOR_RED "X"
00150 #define KFCURVENODE_COLOR_GREEN "Y"
00151 #define KFCURVENODE_COLOR_BLUE "Z"
00152
00153
00154 #define KFCURVENODE_CAMERA_FIELDOFVIEW "FieldOfView"
00155 #define KFCURVENODE_CAMERA_FIELDOFVIEWX "FieldOfViewX"
00156 #define KFCURVENODE_CAMERA_FIELDOFVIEWY "FieldOfViewY"
00157 #define KFCURVENODE_CAMERA_FOCALLENGTH "FocalLength"
00158 #define KFCURVENODE_CAMERA_OPTICALCENTERX "OpticalCenterX"
00159 #define KFCURVENODE_CAMERA_OPTICALCENTERY "OpticalCenterY"
00160 #define KFCURVENODE_CAMERA_ROLL "Roll"
00161 #define KFCURVENODE_CAMERA_TURNTABLE "TurnTable"
00162 #define KFCURVENODE_BACKGROUND_COLOR "BackgroundColor"
00163 #define KFCURVENODE_BACKGROUND_COLOR_RED "X"
00164 #define KFCURVENODE_BACKGROUND_COLOR_GREEN "Y"
00165 #define KFCURVENODE_BACKGROUND_COLOR_BLUE "Z"
00166
00167
00168 #define KFCURVENODE_CAMERA_INDEX "Camera Index"
00169
00170
00171 #define KFCURVENODE_TEXTURE_TRANSLATION "Translation"
00172 #define KFCURVENODE_TEXTURE_TRANSLATION_X "X"
00173 #define KFCURVENODE_TEXTURE_TRANSLATION_Y "Y"
00174 #define KFCURVENODE_TEXTURE_TRANSLATION_Z "Z"
00175 #define KFCURVENODE_TEXTURE_ROTATION "Rotation"
00176 #define KFCURVENODE_TEXTURE_ROTATION_X "X"
00177 #define KFCURVENODE_TEXTURE_ROTATION_Y "Y"
00178 #define KFCURVENODE_TEXTURE_ROTATION_Z "Z"
00179 #define KFCURVENODE_TEXTURE_SCALING "Scaling"
00180 #define KFCURVENODE_TEXTURE_SCALING_X "X"
00181 #define KFCURVENODE_TEXTURE_SCALING_Y "Y"
00182 #define KFCURVENODE_TEXTURE_SCALING_Z "Z"
00183 #define KFCURVENODE_TEXTURE_ALPHA "Alpha"
00184
00185
00186 #define KFCURVENODE_MATERIAL_EMISSIVE "Emissive"
00187 #define KFCURVENODE_MATERIAL_EMISSIVE_R "X"
00188 #define KFCURVENODE_MATERIAL_EMISSIVE_G "Y"
00189 #define KFCURVENODE_MATERIAL_EMISSIVE_B "Z"
00190 #define KFCURVENODE_MATERIAL_AMBIENT "Ambient"
00191 #define KFCURVENODE_MATERIAL_AMBIENT_R "X"
00192 #define KFCURVENODE_MATERIAL_AMBIENT_G "Y"
00193 #define KFCURVENODE_MATERIAL_AMBIENT_B "Z"
00194 #define KFCURVENODE_MATERIAL_DIFFUSE "Diffuse"
00195 #define KFCURVENODE_MATERIAL_DIFFUSE_R "X"
00196 #define KFCURVENODE_MATERIAL_DIFFUSE_G "Y"
00197 #define KFCURVENODE_MATERIAL_DIFFUSE_B "Z"
00198 #define KFCURVENODE_MATERIAL_SPECULAR "Specular"
00199 #define KFCURVENODE_MATERIAL_SPECULAR_R "X"
00200 #define KFCURVENODE_MATERIAL_SPECULAR_G "Y"
00201 #define KFCURVENODE_MATERIAL_SPECULAR_B "Z"
00202 #define KFCURVENODE_MATERIAL_OPACITY "Opacity"
00203 #define KFCURVENODE_MATERIAL_REFLECTIVITY "Reflectivity"
00204 #define KFCURVENODE_MATERIAL_SHININESS "Shininess"
00205
00206
00207 #define KFCURVENODE_USER_PROPERTY_VECTOR_X "X"
00208 #define KFCURVENODE_USER_PROPERTY_VECTOR_Y "Y"
00209 #define KFCURVENODE_USER_PROPERTY_VECTOR_Z "Z"
00210
00211
00212 #define KFCURVENODE_USER_PROPERTY_COLOR_R "X"
00213 #define KFCURVENODE_USER_PROPERTY_COLOR_G "Y"
00214 #define KFCURVENODE_USER_PROPERTY_COLOR_B "Z"
00215
00216
00217
00218 #define KFCURVENODE_USER_PROPERTY_MATRIX "Matrix"
00219 #define KFCURVENODE_USER_PROPERTY_MATRIX_0 "0"
00220 #define KFCURVENODE_USER_PROPERTY_MATRIX_1 "1"
00221 #define KFCURVENODE_USER_PROPERTY_MATRIX_2 "2"
00222 #define KFCURVENODE_USER_PROPERTY_MATRIX_3 "3"
00223 #define KFCURVENODE_USER_PROPERTY_MATRIX_4 "4"
00224 #define KFCURVENODE_USER_PROPERTY_MATRIX_5 "5"
00225 #define KFCURVENODE_USER_PROPERTY_MATRIX_6 "6"
00226 #define KFCURVENODE_USER_PROPERTY_MATRIX_7 "7"
00227 #define KFCURVENODE_USER_PROPERTY_MATRIX_8 "8"
00228 #define KFCURVENODE_USER_PROPERTY_MATRIX_9 "9"
00229 #define KFCURVENODE_USER_PROPERTY_MATRIX_A "A"
00230 #define KFCURVENODE_USER_PROPERTY_MATRIX_B "B"
00231 #define KFCURVENODE_USER_PROPERTY_MATRIX_C "C"
00232 #define KFCURVENODE_USER_PROPERTY_MATRIX_D "D"
00233 #define KFCURVENODE_USER_PROPERTY_MATRIX_E "E"
00234 #define KFCURVENODE_USER_PROPERTY_MATRIX_F "F"
00235
00236
00237 #define SELECTION_ARRAY_SIZE 30*60+1
00238
00239
00240 #define KFCURVENODE_CANDIDATE_MAX_COUNT 4
00241
00242
00243 typedef int kFCurveNodeType;
00244
00245 K_FORWARD (KFCurveNode);
00246 typedef HKFCurveNode HIKFCurveNode;
00247 typedef KFCurveNode IKFCurveNode;
00248
00249 #define IKFCurveNodeID 43763634
00250
00251 enum EKFCurveNodeEventType
00252 {
00253 KFCURVENODEEVENT_NONE = 0,
00254 KFCURVENODEEVENT_SELECTION = 1,
00255 KFCURVENODEEVENT_DESTROY = 2,
00256 KFCURVENODEEVENT_FCURVE = 4,
00257 KFCURVENODEEVENT_TIMEWARP = 8,
00258 KFCURVENODEEVENT_CTRLCURVE = 16,
00259 KFCURVENODEEVENT_DATAUPDATED = 32
00260 };
00261
00262 struct KExternalTimingInformation
00263 {
00264 KTime mLclOffset;
00265 KTime mDuration;
00266 };
00267
00268
00269
00270 class KFCURVE_DLL KFCurveNodeEvent : public KEventBase
00271 {
00272 public:
00273
00274
00275
00276
00277
00278
00279 int mEventCount;
00280
00281
00282 void* mData;
00283
00284
00285 inline void Clear ()
00286 {
00287 mType=KFCURVENODEEVENT_NONE;
00288 mEventCount = 0;
00289 mData = NULL;
00290 }
00291
00292
00293
00294
00295 inline void Add (int pWhat)
00296 {
00297 mType |= pWhat;
00298 mEventCount++;
00299 }
00300
00301
00302 inline void SetData (void* pData) {mData = pData;}
00303 };
00304
00305
00306 struct KFCurveNodeCallback
00307 {
00308 KFCurveNodeEvent mEvent;
00309 KArrayUL mCallbackFunctions;
00310 KArrayUL mCallbackObjects;
00311 bool mCallbackEnable;
00312 };
00313
00314 typedef void (*kFCurveNodeCallback) (KFCurveNode* pFCurve, KFCurveNodeEvent* FCurveNodeEvent, void* pObject) ;
00315
00316 typedef class KArrayTemplate< HKFCurveNode > KArrayTemplateFCurveNode;
00317
00318
00319 enum
00320 {
00321 ISKEY_NONE,
00322 ISKEY_SOME,
00323 ISKEY_ALL
00324 };
00325
00326
00327 class KFCURVE_DLL KFCurveNodeCandidateState
00328 {
00329 public:
00330 KFCurveNodeCandidateState();
00331 ~KFCurveNodeCandidateState();
00332
00333 void Dump(int pLevel = 0);
00334
00335 void SetCandidateTotalTime ( KTime &pCandidateTime ) { mCandidateTotalTime = pCandidateTime; };
00336 void SetCandidateSpecificTime ( KTime &pCandidateTime ) { mCandidateSpecificTime = pCandidateTime; };
00337
00338 protected:
00339 friend class KFCurveNode;
00340
00341 int mSpecificCandidateMethod;
00342 int mTotalCandidateMethod;
00343
00344 double mCandidateTotalValue[KFCURVENODE_CANDIDATE_MAX_COUNT];
00345 KTime mCandidateTotalTime;
00346
00347 double mCandidateSpecificValue;
00348 double mFCurveValue;
00349 KTime mCandidateSpecificTime;
00350
00351 KFCurveNodeCandidateState *mSubStates[KFCURVENODE_CANDIDATE_MAX_COUNT];
00352 KFCurveNodeCandidateState *mLayerState;
00353 int mLayerID;
00354
00355 };
00356
00357
00370 #ifdef K_PLUGIN
00371 class KFCURVE_DLL KFCurveNode
00372 #else
00373 class KFCURVE_DLL KFCurveNode : public IFBObjectHolder
00374 #endif
00375 {
00376
00377 public:
00378
00383
00392 KFCurveNode
00393 (
00394 char* pNodeName,
00395 char* pTimeWarpName,
00396 HKDataType pDataType,
00397 int pLayerType = KFCL_NOLAYER,
00398 int pLayerID = 0
00399 ) ;
00400
00408 KFCurveNode(HKFCurveNode pTemplateCurveNode);
00409
00411 virtual ~KFCurveNode () ;
00412
00413 #ifdef K_PLUGIN
00414 void Destroy (int Local=0) ;
00415 #else
00416 IObject_Declare (Implementation)
00417 #endif
00418
00420
00425
00429 void CreateFCurve( );
00430
00435 bool FCurveCreated( );
00436
00438
00443
00454 HKFCurveNode Clone(bool pKeepAttached);
00455
00469 HKFCurveNode CloneTemplate(bool pKeepAttached=false, bool pCloneFCurves=false, bool pCreateCurves=false, int pLayerID = -1);
00470
00478 void CopyFrom(HKFCurveNode pSource, bool pTransferCurve = false);
00479
00488 HKFCurveNode Copy(KTime pStart=KTIME_MINUS_INFINITE, KTime pStop=KTIME_INFINITE);
00489
00491
00496
00498 char* GetName () ;
00499
00501 char* GetTimeWarpName() ;
00502
00504 char* GetTypeName() ;
00505
00507
00512
00516 HKFCurve FCurveGet();
00517
00526 KFCurve* FCurveSet (KFCurve* pCurve, bool pDestroyOldCurve = false) ;
00527
00534 void FCurveReplace (KFCurve* pCurve) ;
00535
00544 bool GetTransformCurves (KFCurve* pT[3], KFCurve* pR[3], KFCurve* pS[3]) ;
00545
00547
00552
00556 virtual void Clear () ;
00557
00559 virtual int Add(HKFCurveNode pCurveNode);
00560
00564 virtual void Remove (int pIndex) ;
00565
00569 virtual void Delete (int pIndex) ;
00570
00572 virtual int GetCount () ;
00573
00578 virtual HKFCurveNode Get(int pIndex) ;
00579
00586 virtual bool IsChild(KFCurveNode* pCurveNode, bool pRecursive = false) ;
00587
00593 virtual int Find (char* pName) ;
00594
00600 virtual int Find(HKFCurveNode pNode);
00601
00606 HKFCurveNode FindRecursive(char* pName);
00607
00614 HKFCurveNode FindOrCreate(char* pName, bool pFindOrCreateCurve = true) ;
00615
00617 virtual void SetParent(HKFCurveNode pParent) {mParent = pParent;}
00618
00622 virtual HKFCurveNode GetParent() {return mParent;}
00623
00625
00630
00635 int KeyGetCount(bool pRecursiveInLayers = false);
00636
00643 void KeyGetCount(int& pCurveCount, int& pTotalCount, int& pMinCount, int& pMaxCount);
00644
00645
00646
00647
00648
00649
00650
00651
00652
00653
00654 void GetCurveWithFirstKey(KFCurve*& lCurveWithFirstKey, bool *pCurveMask , bool pRecursiveInLayers);
00655
00656
00657 void GetCurveWithLastKey(KFCurve*& lCurveWithLastKey, bool *pCurveMask , bool pRecursiveInLayers);
00658
00659
00660
00661 KTime GetFirstKeyTime(bool *pCurveMask = NULL, bool pRecursiveInLayers = false);
00662
00663
00664 KTime GetLastKeyTime(bool *pCurveMask = NULL, bool pRecursiveInLayers = false);
00665
00676 double* KeyAdd (KTime pTime, double* pValue) ;
00677
00691 double* KeyAppend (KTime pTime, double* pValue, bool pCheckForContinuousRotation = false) ;
00692
00703 bool GetAnimationInterval (KTime& pStart, KTime& pStop) ;
00704
00709 void GetTimeSpan (KTime& pStart, KTime& pStop) ;
00710
00726 int IsKey (KTime& pTime, int *pLast, bool* pCurveMask = NULL, double pKeyIndexTolerance = 0.0, double pMin = -K_DOUBLE_MAX, double pMax = K_DOUBLE_MAX );
00727
00737 bool DeleteKey (KTime& pTime, bool* pCurveMask = NULL, double pKeyIndexTolerance = 0.0 );
00738
00748 KTime GetNextKeyTime (KTime pTime, bool* pCurveMask = NULL, bool pRecursiveInLayers = false);
00749
00759 KTime GetPrevKeyTime (KTime pTime, bool* pCurveMask = NULL );
00760
00775 double* Evaluate (double* pValue, KTime pTime, kFCurveIndex* pLast=NULL) ;
00776
00787 double* GetValue (double* pValue) ;
00788
00798 double* SetValue (double* pValue) ;
00799
00806 void Delete(KTime pStart=KTIME_MINUS_INFINITE, KTime pStop=KTIME_INFINITE);
00807
00819 void Replace(HKFCurveNode pSource, KTime pStart = KTIME_MINUS_INFINITE, KTime pStop = KTIME_INFINITE, bool pUseGivenSpan = false, bool pKeyStartEndOnNoKey = true, KTime pTimeSpanOffset = KTIME_ZERO );
00820
00822
00824
00825
00826
00827
00828
00829
00831
00832 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00833
00838
00840 float* GetColor();
00841
00843 void SetColor (float pColor[3]) ;
00844
00846
00851
00853 inline int IncReferenceCount () {return ++mReferenceCount;}
00854
00856 inline int DecReferenceCount () {mReferenceCount--; return mReferenceCount;}
00857
00859 inline int GetReferenceCount () {return mReferenceCount;}
00860
00862
00867
00869 int GetTakeType () ;
00870
00872 void SetTakeType (int pType) ;
00873
00875
00880
00882 bool GetVisibility () ;
00883
00885 void SetVisibility (bool pVisible, bool pRecursive=false, bool pRecurseLayer = false, int lChildIndex = -1) ;
00886
00888
00893
00898 void DataNodeSet (HKFCurveNode pDataNode, bool pRecursive=true) ;
00899
00903 HKFCurveNode DataNodeGet () ;
00904
00908 bool SetPreExtrapolation(kUInt pNewPreExtrapolation, bool pRespectUserLock=true );
00909 bool SetPreExtrapolationCount(kUInt pNewPreExtrapolationCount, bool pRespectUserLock=true);
00910 bool SetPostExtrapolation(kUInt pNewPreExtrapolation, bool pRespectUserLock=true);
00911 bool SetPostExtrapolationCount(kUInt pNewPreExtrapolationCount, bool pRespectUserLock=true);
00912
00914
00919
00921 int GetContainerType () ;
00922
00924 void SetContainerType (int pInOutType) ;
00925
00927
00932
00934 int GetIOType () ;
00935
00937 void SetIOType (int pInOutType) ;
00938
00940
00945
00947 int IsExpended () ;
00948
00950 void SetExpended (bool pExpended) ;
00951
00953
00958
00960 int IsMultiLayer() ;
00961
00963 void SetMultiLayer (bool pMultiLayer) ;
00964
00966 HKFCurveNode GetLayerNode(int pLayerID);
00967
00969 #ifndef K_PLUGIN
00970 void ExtractKeysIndex( KArraykInt &pArray, KTimeSpan pTimeSpan, double pMinValue = -K_DOUBLE_MAX, double pMaxValue = K_DOUBLE_MAX);
00971 #endif
00972
00974
00979
00983 bool LookLikeSampledData(KTime pThresholdPeriod);
00984
00986
00991
00993 int GetUpdateId () ;
00994
00996 int GetValuesUpdateId ();
00997
00999 int GetNodeUpdateId () ;
01000
01001
01003
01008
01010 bool CallbackEnable (bool pEnable) ;
01011
01013 bool CallbackIsEnable () ;
01014
01016 void CallbackClear () ;
01017
01019 void CallbackAddEvent (int pWhat) ;
01020
01022 void CallbackRegister (kFCurveNodeCallback, void* pObject) ;
01023
01025 void CallbackUnregister (kFCurveNodeCallback, void* pObject) ;
01026
01028
01029 #ifndef K_PLUGIN
01030
01034
01036 void SetETI(IKFCurveETI * pFCurveETI);
01037 IKFCurveETI * GetETI() const;
01038
01040 KTime ETINodeTime2GlobalTime(KTime const & pTime);
01041 KTime ETIGlobalTime2NodeTime(KTime const & pTime);
01042 KTime ETIGetDuration();
01043 KTime ETIGetTrimOffset();
01044 KTime ETIGetGlobalOffset();
01045 double ETIGetScaleFactor();
01046 bool ETIGetColor(KgeRGBVector & pColor);
01047 bool ETIIsGlobalTimeInSpan(KTime const & pTime, bool pIncludeStop = true);
01048 typedef KTime (IKFCurveETI::*TETITimeFetcher)();
01049 KTime ETIGetSpecifiedTime(TETITimeFetcher pFunc);
01050 bool ETIIsSelectedDuration();
01051 #endif
01052
01054
01055 #ifndef K_FBXSDK_INTERFACE
01056 #include <kfcurve/kfcurvenodeinhouse.h>
01057 #endif
01058
01059 bool FbxStore (KFbx* pFbx, bool pOnlyDefaults = false, bool pReplaceLclTRSName = false, bool pSkipTimeWarpName = false, char* pFieldName = "Channel", bool pColor = true, bool pIsVersion5 = false ) ;
01060 bool FbxRetrieve (KFbx* pFbx, bool pOnlyDefaults = false, bool pCreateIfNotFound = true,bool pColor = false);
01061 bool FbxInternalRetrieve (KFbx* pFbx, bool pOnlyDefaults = false, bool pCreateIfNotFound = true,bool pColor = false) ;
01062
01064
01068 bool mUseQuaternion;
01069 inline bool GetUseQuaternion(){return mUseQuaternion;};
01070 void SetUseQuaternion(bool pVal);
01071 private:
01072 void RotationNodeEvaluate(double* pValue, KTime pTime, kFCurveIndex* pLast,bool pEvaluateCandidate );
01073
01075
01076 public:
01078
01082 void GetCandidateState(KFCurveNodeCandidateState& pState);
01083 void SetCandidateState(const KFCurveNodeCandidateState& pState, bool pDestroyMissingLayers = false );
01084
01086
01087 void GetQuaternionInterpolationBezierPoints(KTime pCurrentTime, KgeQuaternion &pQ0, KgeQuaternion &lQ1, KgeQuaternion &lQ2, KgeQuaternion &lQ3);
01088
01089 protected:
01090 struct NameInfo
01091 {
01092 KString mName;
01093 KString mTimeWarpName;
01094 HKDataType mDataType;
01095 KProperty* mProperty;
01096 int mRefCount;
01097 }*mNameInfo;
01098
01099 void SetNameInfo( NameInfo* pNameInfo );
01100
01101 int mType;
01102
01103 int mReferenceCount;
01104 KArrayTemplate<HKFCurveNode> mNodes;
01105
01106 HIKFCurve mFCurve;
01107 HKFCurveNode mTimeWarp;
01108 HKFCurveNode mLayer;
01109 HKFCurveNode mObjectLayer;
01110 HKFCurveNode mTemplate;
01111 HKFCurveNode mDataNode;
01112 HKFCurveNode mParent;
01113
01114 int mLayerType;
01115 int mLayerID;
01116
01117 int mUpdateId;
01118
01119 public:
01120 int mMBRotationOrder;
01121 inline int GetRotationOrder(){return mMBRotationOrder;};
01122 void SetRotationOrder(int pRotationOrder);
01123 protected:
01124
01125
01126
01127
01128 void FromTotalCandidateToSpecificCandidate(int pLayerID);
01129
01130 enum {eUseFCurve = 1, eUseTotal = 2};
01131 int mSpecificCandidateMethod;
01132 int mTotalCandidateMethod;
01133
01134
01135
01136
01137
01138
01139
01140
01141
01142
01143
01144
01145 double mCandidateTotalValue[KFCURVENODE_CANDIDATE_MAX_COUNT];
01146 KTime mCandidateTotalTime;
01147
01148
01149
01150
01151
01152 KFCurveNodeCallback* mCallback;
01153 int mUserLock;
01154
01155
01156 #ifndef K_PLUGIN
01157
01158
01159
01160 IKFCurveETI * mETI;
01161 #endif
01162
01163 private:
01164 void KeyGetCountRecursive(int& pCurveCount, int& pTotalCount, int& pMinCount, int& pMaxCount);
01165 bool GetAnimationIntervalRecursive (KTime& pStart, KTime& pStop) ;
01166 void IsKeyRecursive( KTime& pTime, int &pKeyCount, int &pKeyFound, int *pLast, bool *pCurveMask, double pKeyIndexTolerance = 0.0, double pMin = -K_DOUBLE_MAX, double pMax = K_DOUBLE_MAX );
01167
01168 friend KFCURVE_DLL HKFCurveNode KFCurveNodeCreate (KFbx* pFbx, HKFCurveNode pParent, bool pOnlyDefaults, bool pCreateIfNotFound, bool pColor );
01169
01170 #endif // #ifndef DOXYGEN_SHOULD_SKIP_THIS
01171
01172 };
01173
01174
01184 KFCURVE_DLL HKFCurveNode KFCurveNodeCreate(char* pNodeName, char* pTimeWarpName, char* pTypeName, int pLayerType = KFCL_NOLAYER, int pLayerID = 0);
01185 KFCURVE_DLL HKFCurveNode KFCurveNodeCreate(char* pNodeName, HKDataType pDataType=NULL, int pLayerType = KFCL_NOLAYER, int pLayerID = 0);
01186
01187
01195 KFCURVE_DLL HKFCurveNode KFCurveNodeCreate(HKFCurveNode pTemplateCurveNode);
01196
01197
01198 KFCURVE_DLL HKFCurveNode KFCurveNodeCreate(KFbx* pFbx, bool pOnlyDefaults = false, bool pColor = false);
01199
01200
01201 KFCURVE_DLL HKFCurveNode KFCurveNodeCreate(KFbx* pFbx, HKFCurveNode pParent, bool pOnlyDefaults = false, bool pCreateIfNotFound = true, bool pColor = false);
01202
01203
01204 KFCURVE_DLL HKFCurveNode KFCurveNodeLayerCreate (KFbx* pFbx,HKFCurveNode pParent, bool pOnlyDefaults = false );
01205
01206
01207 KFCURVE_DLL HKFCurveNode FCurveNodeCreateFromDataType( HKDataType pDataType,char* pNodeName);
01208
01209 #include <kfcurve/kfcurve_nsend.h>
01210
01211 #endif // #ifndef _FBXSDK_KFCURVE_NODE_H_
01212
01213