KFCurve
#include<kfcurve.h>

List of all members.

Detailed Description

Function curve class.

A function curve is basically a collection of keys (see classKFCurveKey) sorted in time order. Since it is a function, only one key per time is allowed.

Definition at line678of filekfcurve.h.


Constructor and Destructor

 KFCurve()
 Constructor.
virtual ~KFCurve()
 Destructor.
 IObject_Declare(Implementation) float *GetColor()
 Get function curve color.
void SetColor(float *pColor)
 Set function curve color.
void SetValue(kFCurveDouble pValue)
 Set default value.
KFCURVE_INLINE kFCurveDouble GetValue() const
 Get default value.

Key Management

void ResizeKeyBuffer(int pKeyCount)
 Resize fcurve buffer to hold a certain number of key.
void KeyModifyBegin()
 Call this function prior to modifying the keys of a function curve.
void KeyModifyEnd()
 Call this function after modification of the keys of a function curve.
int KeyGetCount()
 Get the number of keys.
int KeyGetSelectionCount()
 Get the number of selected keys.
void KeySelectAll()
 Resize fcurve buffer to hold a certain number of key.
void KeyUnselectAll()
 Resize fcurve buffer to hold a certain number of key.
KFCurveKey KeyGet(kFCurveIndex pIndex)
 Get key at given index.
void KeyClear()
 Remove all the keys and free buffer memory.
void KeyShrink()
 Minimize use of buffer memory.
bool KeySet(kFCurveIndex pIndex,KFCurveKey&pKey)
 Set key at given index.
KFCURVE_INLINE bool KeySet(kFCurveIndex pIndex,KFCurve*pSourceCurve, int pSourceIndex)
 Resize fcurve buffer to hold a certain number of key.
int KeyMove(kFCurveIndex pIndex,KTimepTime)
 Change time of key found at given index.
bool KeyMoveOf(bool pSelectedOnly,KTimepDeltaTime, kFCurveDouble pDeltaValue)
 Add time and value offsets to keys, all or selected only.
bool KeyMoveValueTo(bool pSelectedOnly, kFCurveDouble pValue)
 Set value of keys, all or selected only.
bool KeyScaleValue(bool pSelectedOnly, kFCurveDouble pMultValue)
 Scale value of keys, all or selected only.
bool KeyScaleTangeant(bool pSelectedOnly, kFCurveDouble pMultValue)
 Scale tangent of keys, all or selected only.
bool KeyScaleValueAndTangeant(bool pSelectedOnly, kFCurveDouble pMultValue)
 Scale value and tangent of keys, all or selected only.
bool KeyRemove(kFCurveIndex pIndex)
 Remove key at given index.
int KeyInsert(KTimepTime, kFCurveIndex *pLast=NULL)
 Insert a key at given time.
int KeyAdd(KTimepTime,KFCurveKey&pKey, kFCurveIndex *pLast=NULL)
 Add a key at given time.
int KeyAdd(KTimepTime,KFCurve*pSourceCurve, int pSourceIndex, kFCurveIndex *pLast=NULL)
 Resize fcurve buffer to hold a certain number of key.
int KeyAdd(KTimepTime, kFCurveIndex *pLast=NULL)
 Add a key at given time.
int KeyAppend(KTimepAtTime,KFCurve*pSourceCurve, int pSourceIndex)
 Append a key at the end of the function curve.
int KeyAppendFast(KTimepTime, kFCurveDouble pValue)
 Append a key at the end of the function curve.
double KeyFind(KTimepTime, kFCurveIndex *pLast=NULL)
 Find key index for a given time.

Key Manipulation

KFCURVE_INLINE void KeySet(kFCurveIndex pKeyIndex,KTimepTime, kFCurveDouble pValue, kFCurveInterpolation pInterpolation=KFCURVE_INTERPOLATION_CUBIC, kFCurveTangeantMode pTangentMode=KFCURVE_TANGEANT_AUTO, kFCurveDouble pData0=0.0, kFCurveDouble pData1=0.0, kFCurveTangeantWeightMode pTangentWeightMode=KFCURVE_WEIGHTED_NONE, kFCurveDouble pWeight0=KFCURVE_DEFAULT_WEIGHT, kFCurveDouble pWeight1=KFCURVE_DEFAULT_WEIGHT, kFCurveDouble pVelocity0=KFCURVE_DEFAULT_VELOCITY, kFCurveDouble pVelocity1=KFCURVE_DEFAULT_VELOCITY)
 Set a key.
KFCURVE_INLINE void KeySetTCB(kFCurveIndex pKeyIndex,KTimepTime, kFCurveDouble pValue, float pData0=0.0f, float pData1=0.0f, float pData2=0.0f)
 Set a key with cubic interpolation, TCB tangent mode.
KFCURVE_INLINE kFCurveInterpolation KeyGetInterpolation(kFCurveIndex pKeyIndex)
 Get key interpolation type.
KFCURVE_INLINE void KeySetInterpolation(kFCurveIndex pKeyIndex, kFCurveInterpolation pInterpolation)
 Set key interpolation type.
KFCURVE_INLINE kFCurveConstantMode KeyGetConstantMode(kFCurveIndex pKeyIndex)
 Get key constant mode.
KFCURVE_INLINE kFCurveTangeantMode KeyGetTangeantMode(kFCurveIndex pKeyIndex, bool pIncludeOverrides=false)
 Get key tangent mode.
KFCURVE_INLINE
kFCurveTangeantWeightMode 
KeyGetTangeantWeightMode(kFCurveIndex pKeyIndex)
 Get key tangent weight mode.
KFCURVE_INLINE
kFCurveTangeantVelocityMode 
KeyGetTangeantVelocityMode(kFCurveIndex pKeyIndex)
 Get key tangent velocity mode.
KFCURVE_INLINE void KeySetConstantMode(kFCurveIndex pKeyIndex, kFCurveConstantMode pMode)
 Set key constant mode.
KFCURVE_INLINE void KeySetTangeantMode(kFCurveIndex pKeyIndex, kFCurveTangeantMode pTangent)
 Set key tangent mode.
KFCURVE_INLINE void KeySetTangeantWeightMode(kFCurveIndex pKeyIndex, kFCurveTangeantWeightMode pTangentWeightMode, kFCurveTangeantWeightMode pMask=KFCURVE_WEIGHTED_ALL)
 Set key tengent weight mode as double value (cubic interpolation, non TCB tangent mode).
KFCURVE_INLINE void KeySetTangeantVelocityMode(kFCurveIndex pKeyIndex, kFCurveTangeantVelocityMode pTangentVelocityMode, kFCurveTangeantVelocityMode pMask=KFCURVE_VELOCITY_ALL)
 Set key tengent velocity mode as double value (cubic interpolation, non TCB tangent mode).
KFCURVE_INLINE kFCurveDouble KeyGetDataDouble(kFCurveIndex pKeyIndex,EKFCurveDataIndexpIndex)
 Get key data as double value (cubic interpolation, non TCB tangent mode).
KFCURVE_INLINE void KeySetDataDouble(kFCurveIndex pKeyIndex,EKFCurveDataIndexpIndex, kFCurveDouble pValue)
 Set data as double value (cubic interpolation, non TCB tangent mode).
KFCURVE_INLINE float KeyGetDataFloat(kFCurveIndex pKeyIndex,EKFCurveDataIndexpIndex)
 Get key data as float value (cubic interpolation, TCB tangent mode).
KFCURVE_INLINE void KeySetDataFloat(kFCurveIndex pKeyIndex,EKFCurveDataIndexpIndex, float pValue)
 Set data as float value (cubic interpolation, TCB tangent mode).
KFCURVE_INLINE const float * KeyGetDataPtr(kFCurveIndex pKeyIndex)
 Get key data as a pointer Warning: not supported in 'double' mode.
KFCURVE_INLINE kFCurveDouble KeyGetValue(kFCurveIndex pKeyIndex)
 Get key value.
KFCURVE_INLINE void KeySetValue(kFCurveIndex pKeyIndex, kFCurveDouble pValue)
 Set key value.
KFCURVE_INLINE void KeyIncValue(kFCurveIndex pKeyIndex, kFCurveDouble pValue)
 Increment key value.
KFCURVE_INLINE void KeyMultValue(kFCurveIndex pKeyIndex, kFCurveDouble pValue)
 Multiply key value.
KFCURVE_INLINE void KeyMultTangeant(kFCurveIndex pKeyIndex, kFCurveDouble pValue)
 Multiply key tangents.
KFCURVE_INLINEKTime KeyGetTime(kFCurveIndex pKeyIndex)
 Get key time.
KFCURVE_INLINE void KeySetTime(kFCurveIndex pKeyIndex,KTimepTime)
 Set key time.
KFCURVE_INLINE void KeyIncTime(kFCurveIndex pKeyIndex,KTimepTime)
 Increment key time.
KFCURVE_INLINE void KeySetSelected(kFCurveIndex pKeyIndex, bool pSelected)
 Set if key is currently selected.
KFCURVE_INLINE bool KeyGetSelected(kFCurveIndex pKeyIndex)
 Return if key is currently selected.
KFCURVE_INLINE void KeySetMarkedForManipulation(kFCurveIndex pKeyIndex, bool pMark)
 Set if key is currently marked for manipulation.
KFCURVE_INLINE bool KeyGetMarkedForManipulation(kFCurveIndex pKeyIndex)
 Return if key is currently marked for manipulation.
KFCURVE_INLINE void KeySetTangeantVisibility(kFCurveIndex pKeyIndex, kFCurveTangeantVisibility pVisibility)
 Set tangent visibility mode.
KFCURVE_INLINE
kFCurveTangeantVisibility 
KeyGetTangeantVisibility(kFCurveIndex pKeyIndex)
 Return tangent visibility mode.
KFCURVE_INLINE void KeySetBreak(kFCurveIndex pKeyIndex, bool pVal)
 Set/Unset Break tangeant Only valid for User and Auto keys.
KFCURVE_INLINE bool KeyGetBreak(kFCurveIndex pKeyIndex)
 Get if tangeant is break Only valid for User and Auto keys.

Key Tangent Management

void KeyTangeantSetInterpolation(bool pSelectedOnly, kFCurveInterpolation pInterpolation)
 Set interpolation type on keys, all or selected only.
void KeyTangeantSetMode(bool pSelectedOnly, kFCurveTangeantMode pTangentMode)
 Set tangent mode on keys, all or selected only.
kFCurveDouble KeyGetLeftDerivative(kFCurveIndex pIndex)
 Get the left derivative of a key.
void KeySetLeftDerivative(kFCurveIndex pIndex, kFCurveDouble pValue)
 Set the left derivative of a key.
kFCurveDouble KeyGetLeftAuto(kFCurveIndex pIndex, bool pApplyOvershootProtection=false)
 Get the left auto parametric of a key.
void KeySetLeftAuto(kFCurveIndex pIndex, kFCurveDouble pValue)
 Set the left auto parametric of a key.
KFCurveTangeantInfo KeyGetLeftDerivativeInfo(kFCurveIndex pIndex)
 Get the left derivative info of a key.
void KeySetLeftDerivativeInfo(kFCurveIndex pIndex,KFCurveTangeantInfopValue, bool pForceDerivative=false)
 Set the left derivative info of a key.
void KeyIncLeftDerivative(kFCurveIndex pIndex, kFCurveDouble pInc)
 Increment the left derivative of a key.
kFCurveDouble KeyGetRightDerivative(kFCurveIndex pIndex)
 Get the right derivative of a key.
void KeySetRightDerivative(kFCurveIndex pIndex, kFCurveDouble pValue)
 Set the right derivative of a key.
kFCurveDouble KeyGetRightAuto(kFCurveIndex pIndex, bool pApplyOvershootProtection=false)
 Get the right auto parametric of a key.
void KeySetRightAuto(kFCurveIndex pIndex, kFCurveDouble pValue)
 Set the right auto parametric of a key.
KFCurveTangeantInfo KeyGetRightDerivativeInfo(kFCurveIndex pIndex)
 Get the right derivative info of a key.
void KeySetRightDerivativeInfo(kFCurveIndex pIndex,KFCurveTangeantInfopValue, bool pForceDerivative=false)
 Set the right derivative info of a key.
void KeyIncRightDerivative(kFCurveIndex pIndex, kFCurveDouble pInc)
 Increment the right derivative of a key.
kFCurveDouble KeyGetRightBezierTangeant(kFCurveIndex pIndex)
 This function is disabled and always return 0.
void KeySetLeftBezierTangeant(kFCurveIndex pIndex, kFCurveDouble pValue)
 Set the left derivative of a key as a Bezier tangent.
kFCurveDouble KeyGetLeftBezierTangeant(kFCurveIndex pIndex)
 This function is disabled and always returns 0.
void KeySetRightBezierTangeant(kFCurveIndex pIndex, kFCurveDouble pValue)
 Set the right derivative of a key as a Bezier tangent.
void KeyMultDerivative(kFCurveIndex pIndex, kFCurveDouble pMultValue)
 Multiply the Derivative of a key.
bool KeyIsLeftTangeantWeighted(kFCurveIndex pIndex)
 Get the left tangent weight mode of a key.
bool KeyIsRightTangeantWeighted(kFCurveIndex pIndex)
 Get the right tangent weight mode of a key.
void KeySetLeftTangeantWeightedMode(kFCurveIndex pIndex, bool pWeighted)
 Set the left tangent weight mode of a key.
void KeySetRightTangeantWeightedMode(kFCurveIndex pIndex, bool pWeighted)
 Set the right tangent weight mode of a key.
kFCurveDouble KeyGetLeftTangeantWeight(kFCurveIndex pIndex)
 Get the weight value component of the left tangent of a key.
kFCurveDouble KeyGetRightTangeantWeight(kFCurveIndex pIndex)
 Get the weight value component of the right tangent of a key.
void KeySetLeftTangeantWeight(kFCurveIndex pIndex, kFCurveDouble pWeight)
 Set the left tangent weight of a key.
void KeySetRightTangeantWeight(kFCurveIndex pIndex, kFCurveDouble pWeight)
 Set the right tangent weight of a key.
bool KeyIsLeftTangeantVelocity(kFCurveIndex pIndex)
 Get the left tangent velocity mode of a key.
bool KeyIsRightTangeantVelocity(kFCurveIndex pIndex)
 Get the right tangent velocity mode of a key.
void KeySetLeftTangeantVelocityMode(kFCurveIndex pIndex, bool pVelocity)
 Set the left tangent velocity mode of a key.
void KeySetRightTangeantVelocityMode(kFCurveIndex pIndex, bool pVelocity)
 Set the right tangent velocity mode of a key.
kFCurveDouble KeyGetLeftTangeantVelocity(kFCurveIndex pIndex)
 Get the velocity value component of the left tangent of a key.
kFCurveDouble KeyGetRightTangeantVelocity(kFCurveIndex pIndex)
 Get the velocity value component of the right tangent of a key.
void KeySetLeftTangeantVelocity(kFCurveIndex pIndex, kFCurveDouble pVelocity)
 Set the left tangent velocity of a key.
void KeySetRightTangeantVelocity(kFCurveIndex pIndex, kFCurveDouble pVelocity)
 Set the right tangent velocity of a key.

Extrapolation

Extrapolation defines the function curve value before and after the keys.

Pre-extrapolation defines the function curve value before first key. Post-extrapolation defines the function curve value after last key.

  • KFCURVE_EXTRAPOLATION_CONST means a constant value matching the first/last key
  • KFCURVE_EXTRAPOLATION_REPETITION means the entire function curve is looped
  • KFCURVE_EXTRAPOLATION_MIRROR_REPETITION means the entire function curve is looped once backward, once forward and so on
  • KFCURVE_EXTRAPOLATION_KEEP_SLOPE means a linear function with a slope matching the first/last key


KFCURVE_INLINE void SetPreExtrapolation(kFCurveExtrapolationMode pExtrapolation)
 Set pre-extrapolation mode.
KFCURVE_INLINE
kFCurveExtrapolationMode 
GetPreExtrapolation()
 Get pre-extrapolation mode.
KFCURVE_INLINE void SetPreExtrapolationCount(kULong pCount)
 Set pre-extrapolation count.
KFCURVE_INLINE kULong GetPreExtrapolationCount()
 Get pre-extrapolation count.
KFCURVE_INLINE void SetPostExtrapolation(kFCurveExtrapolationMode pExtrapolation)
 Set post-extrapolation mode.
KFCURVE_INLINE
kFCurveExtrapolationMode 
GetPostExtrapolation()
 Get post-extrapolation mode.
KFCURVE_INLINE void SetPostExtrapolationCount(kULong pCount)
 Set post-extrapolation count.
KFCURVE_INLINE kULong GetPostExtrapolationCount()
 Get post-extrapolation count.
int KeyGetCountAll()
 Get total number of keys taking extrapolation into account.
double KeyFindAll(KTimepTime, kFCurveIndex *pLast=NULL)
 Find key index for a given time taking extrapolation into account.

Evaluation and Analysis

kFCurveDouble Evaluate(KTimepTime, kFCurveIndex *pLast=NULL)
 Evaluate function curve value at a given time.
kFCurveDouble EvaluateIndex(double pIndex)
 Evaluate function curve value at a given key index.
kFCurveDouble EvaluateLeftDerivative(KTimepTime, kFCurveIndex *pLast=NULL)
 Evaluate function left derivative at given time.
kFCurveDouble EvaluateRightDerivative(KTimepTime, kFCurveIndex *pLast=NULL)
 Evaluate function right derivative at given time.
int FindPeaks(kFCurveIndex pLeftKeyIndex,KTime&pPeakTime1,KTime&pPeakTime2)
 Find the peaks time between 2 keys (a local minimum and/or maximum).
int FindPeaks(kFCurveIndex pLeftKeyIndex, kFCurveDouble&pPeak1, kFCurveDouble&pPeak2)
 Find the peaks value between 2 keys (a local minimum and/or maximum).
int FindPeaks(kFCurveIndex pLeftKeyIndex,KTime&pPeakTime1, kFCurveDouble&pPeak1,KTime&pPeakTime2, kFCurveDouble&pPeak2)
 Find the peaks time and value between 2 keys (a local minimum and/or maximum).
void KeyGetPeriods(KTime&pAveragePeriod,KTime&pMinPeriod,KTime&pMaxPeriod)
 Get key period statistics.

Copy, Insert, Replace and Delete Functions

HKFCurve Copy(KTimepStart=KTIME_MINUS_INFINITE,KTimepStop=KTIME_INFINITE)
 Create a new function curve and copy keys found between a given time range.
void CopyFrom(KFCurve&pSource, bool pWithKeys=true)
 Copy a function curve content into current function curve.
void Replace(HKFCurvepSource,KTimepStart=KTIME_MINUS_INFINITE,KTimepStop=KTIME_INFINITE, bool pUseExactGivenSpan=false, bool pKeyStartEndOnNoKey=true,KTimepTimeSpanOffset=KTIME_ZERO)
 Replace keys within a range in current function curve with keys found in a source function curve.
void ReplaceForQuaternion(HKFCurvepSource,KTimepStart,KTimepStop, kFCurveDouble pScaleStart, kFCurveDouble pScaleStop, bool pUseExactGivenSpan=false, bool pKeyStartEndOnNoKey=true,KTimepTimeSpanOffset=KTIME_ZERO)
 Replace keys within a range in current function curve with keys found in a source function curve.
void ReplaceForEulerXYZ(HKFCurvepSource,KTimepStart,KTimepStop, kFCurveDouble pAddFromStart, kFCurveDouble pAddAfterStop, bool pValueSubOffsetAfterStart, bool pValueSubOffsetAfterStop, bool pUseExactGivenSpan=false, bool pKeyStartEndOnNoKey=true,KTimepTimeSpanOffset=KTIME_ZERO)
 Replace keys within a range in current function curve with keys found in a source function curve.
void Insert(HKFCurvepSource,KTimepInsertTime, kFCurveDouble pFirstKeyLeftDerivative, bool pFirstKeyIsWeighted=false, kFCurveDouble pFirstKeyWeight=KFCURVE_DEFAULT_WEIGHT)
 Insert all keys found in a source function curve in current function curve.
void Insert(HKFCurvepSource,KTimepInsertTime,KFCurveTangeantInfopFirstKeyLeftDerivative)
 Insert all keys found in a source function curve in current function curve.
bool Delete(kFCurveIndex pStartIndex, kFCurveIndex pStopIndex)
 Delete keys within an index range.
bool Delete(KTimepStart=KTIME_MINUS_INFINITE,KTimepStop=KTIME_INFINITE)
 Delete keys within a time range.
bool IsKeyInterpolationPureCubicAuto(kFCurveIndex pKeyIndex)
 Get if interpolation is cubic and that the tangents and weightings are untouched.
void ExtractKeysIndex(KArraykInt&pArray, int pMinIndex, int pMaxIndex, double pMinValue=-K_DOUBLE_MAX, double pMaxValue=K_DOUBLE_MAX)
 Extract All Keys in the Given Selection Span.

Constructor&Destructor Documentation

KFCurve( ) 

Constructor.

virtual ~KFCurve( ) [virtual]

Destructor.

Member Function Documentation

IObject_Declare(Implementation  ) 

Get function curve color.

Returns:
Pointer to an array of 3 elements: RGB values on a scale from 0 to 1.

void SetColor(float * pColor ) 

Set function curve color.

Parameters:
pColor Pointer to an array of 3 elements: RGB values on a scale from 0 to 1.

void SetValue(kFCurveDouble pValue ) 

Set default value.

Default value is used when there is no key in the function curve.

Parameters:
pValue Default value.

KFCURVE_INLINE kFCurveDouble GetValue( ) const

Get default value.

Default value is used when there is no key in the function curve.

Returns:
Default value.

void ResizeKeyBuffer(int pKeyCount ) 

Resize fcurve buffer to hold a certain number of key.

Parameters:
pKeyCount Number of key the function curve will eventually hold.

void KeyModifyBegin( ) 

Call this function prior to modifying the keys of a function curve.

Call functionKFCurve::KeyModifyEnd()after modification of the keys are completed.

void KeyModifyEnd( ) 

Call this function after modification of the keys of a function curve.

Call functionKFCurve::KeyModifyBegin()prior to modifying the keys.

int KeyGetCount( ) 

Get the number of keys.

int KeyGetSelectionCount( ) 

Get the number of selected keys.

void KeySelectAll( ) 

Resize fcurve buffer to hold a certain number of key.

Parameters:
pKeyCount Number of key the function curve will eventually hold.

void KeyUnselectAll( ) 

Resize fcurve buffer to hold a certain number of key.

Parameters:
pKeyCount Number of key the function curve will eventually hold.

KFCurveKeyKeyGet(kFCurveIndex pIndex ) 

Get key at given index.

Remarks:
Result is undetermined if function curve has no key or index is out of bounds.

void KeyClear( ) 

Remove all the keys and free buffer memory.

void KeyShrink( ) 

Minimize use of buffer memory.

bool KeySet(kFCurveIndex pIndex,
KFCurveKeypKey 
)

Set key at given index.

Remarks:
Result is undetermined if function curve has no key or index is out of bounds.
Returns:
true if key time is superior to previous key and inferior to next key.

KFCURVE_INLINE bool KeySet(kFCurveIndex pIndex,
KFCurvepSourceCurve,
int pSourceIndex 
)

Resize fcurve buffer to hold a certain number of key.

Parameters:
pKeyCount Number of key the function curve will eventually hold.

int KeyMove(kFCurveIndex pIndex,
KTime pTime 
)

Change time of key found at given index.

Parameters:
pIndex Index of key to move.
pTime Destination time.
Returns:
New index of moved key.
Remarks:
Result is undetermined if function curve has no key or index is out of bounds.

bool KeyMoveOf(bool pSelectedOnly,
KTime pDeltaTime,
kFCurveDouble pDeltaValue 
)

Add time and value offsets to keys, all or selected only.

Parameters:
pSelectedOnly If set totrue, only selected keys are affected. Otherwise, all keys are affected.
pDeltaTime Time offset added to keys.
pDeltaValue Value offset added to keys.
Returns:
true on success.

bool KeyMoveValueTo(bool pSelectedOnly,
kFCurveDouble pValue 
)

Set value of keys, all or selected only.

Parameters:
pSelectedOnly If set totrue, only selected keys are affected. Otherwise, all keys are affected.
pValue Value set to keys.
Returns:
true on success.

bool KeyScaleValue(bool pSelectedOnly,
kFCurveDouble pMultValue 
)

Scale value of keys, all or selected only.

Parameters:
pSelectedOnly If set totrue, only selected keys are affected. Otherwise, all keys are affected.
pMultValue Scale applied on key values.
Returns:
true on success.

bool KeyScaleTangeant(bool pSelectedOnly,
kFCurveDouble pMultValue 
)

Scale tangent of keys, all or selected only.

Parameters:
pSelectedOnly If set totrue, only selected keys are affected. Otherwise, all keys are affected.
pMultValue Scale applied on key tangents.
Returns:
true on success.

bool KeyScaleValueAndTangeant(bool pSelectedOnly,
kFCurveDouble pMultValue 
)

Scale value and tangent of keys, all or selected only.

Parameters:
pSelectedOnly If set totrue, only selected keys are affected. Otherwise, all keys are affected.
pMultValue Scale applied on key values and tangents.
Returns:
true on success.

bool KeyRemove(kFCurveIndex pIndex ) 

Remove key at given index.

Parameters:
pIndex Index of key to remove.
Returns:
true on success.

int KeyInsert(KTime pTime,
kFCurveIndex * pLast=NULL 
)

Insert a key at given time.

This function SHOULD be used instead ofKFCurve::KeyAdd()if the key is to be added in the curve and not at the end. It inserts the key in respect to the interpolation type and tangents of the neighboring keys. If there is already a key a the given time, the key is modified and no new key is added.

Parameters:
pTime Time to insert the key.
pLast Function curve index to speed up search. If this function is called in a loop, initialize this value to 0 and let it be updated by each call.
Returns:
Index of the key at given time, no matter if it was inserted or already present.
Remarks:
Key value must be set explicitly afterwards. The interpolation type and tangent mode are copied from the previous key.

int KeyAdd(KTime pTime,
KFCurveKeypKey,
kFCurveIndex * pLast=NULL 
)

Add a key at given time.

FunctionKFCurve::KeyInsert()SHOULD be used instead if the key is to be added in the curve and not at the end. This function does not respect the interpolation type and tangents of the neighboring keys. If there is already a key at the given time, the key is modified and no new key is added.

Parameters:
pTime Time to add the key.
pKey Key to add.
pLast Function curve index to speed up search. If this function is called in a loop, initialize this value to 0 and let it be updated by each call.
Returns:
Index of the key at given time, no matter if it was added or already present.
Remarks:
Key value, interpolation type and tangent mode must be set explicitly afterwards.

int KeyAdd(KTime pTime,
KFCurvepSourceCurve,
int pSourceIndex,
kFCurveIndex * pLast=NULL 
)

Resize fcurve buffer to hold a certain number of key.

Parameters:
pKeyCount Number of key the function curve will eventually hold.

int KeyAdd(KTime pTime,
kFCurveIndex * pLast=NULL 
)

Add a key at given time.

FunctionKFCurve::KeyInsert()SHOULD be used instead if the key is to be added in the curve and not at the end. This function does not respect of the interpolation type and tangents of the neighboring keys. If there is already a key a the given time, no key is added.

Parameters:
pTime Time to add the key.
pLast Function curve index to speed up search. If this function is called in a loop, initialize this value to 0 and let it be updated by each call.
Returns:
Index of the key at given time, no matter if it was added or already present.
Remarks:
Key value, interpolation type and tangent mode must be set explicitely afterwards.

int KeyAppend(KTime pAtTime,
KFCurvepSourceCurve,
int pSourceIndex 
)

Append a key at the end of the function curve.

Parameters:
pAtTime Time of appended key, must be superior to the last key time.
pSourceCurve Source curve.
pSourceIndex Index of the source key in the source curve.
Returns:
Index of appended key.

int KeyAppendFast(KTime pTime,
kFCurveDouble pValue 
)

Append a key at the end of the function curve.

Parameters:
pTime Time of appended key, must be superior to the last key time.
pValue Value of appended key.
Returns:
Index of appended key.
Remarks:
Interpolation type of the appended key is set to KFCURVE_INTERPOLATION_CUBIC and tangent mode is set to KFCURVE_TANGEANT_AUTO.

double KeyFind(KTime pTime,
kFCurveIndex * pLast=NULL 
)

Find key index for a given time.

Parameters:
pTime Time of the key looked for.
pLast Function curve index to speed up search. If this function is called in a loop, initialize this value to 0 and let it be updated by each call.
Returns:
Key index. The integer part of the key index gives the index of the closest key with a smaller time. The decimals give the relative position of given time compared to previous and next key times. Returns -1 if function curve has no key.

KFCURVE_INLINE void KeySet(kFCurveIndex pKeyIndex,
KTime pTime,
kFCurveDouble pValue,
kFCurveInterpolation pInterpolation=KFCURVE_INTERPOLATION_CUBIC,
kFCurveTangeantMode pTangentMode=KFCURVE_TANGEANT_AUTO,
kFCurveDouble pData0=0.0,
kFCurveDouble pData1=0.0,
kFCurveTangeantWeightMode pTangentWeightMode=KFCURVE_WEIGHTED_NONE,
kFCurveDouble pWeight0=KFCURVE_DEFAULT_WEIGHT,
kFCurveDouble pWeight1=KFCURVE_DEFAULT_WEIGHT,
kFCurveDouble pVelocity0=KFCURVE_DEFAULT_VELOCITY,
kFCurveDouble pVelocity1=KFCURVE_DEFAULT_VELOCITY 
)

Set a key.

Use SetTCB() to set a key with cubic interpolation and TCB tangent type.

Parameters:
pKeyIndex Key index
pTime Key time.
pValue Key value.
pInterpolation Key interpolation type. Interpolation types are: KFCURVE_INTERPOLATION_CONSTANT, KFCURVE_INTERPOLATION_LINEAR, KFCURVE_INTERPOLATION_CUBIC
pTangentMode Key tangent mode (meaningful for cubic interpolation only). Tangent modes are: KFCURVE_TANGEANT_AUTO, KFCURVE_TANGEANT_USER, KFCURVE_TANGEANT_BREAK
pData0 Right slope.
pData1 Next left slope.
pTangentWeightMode Weight mode if used KFCURVE_WEIGHTED_NONE KFCURVE_WEIGHTED_RIGHT KFCURVE_WEIGHTED_NEXT_LEFT KFCURVE_WEIGHTED_ALL
pWeight0 Right slope weight.
pWeight1 Next left slope weight.
pVelocity0 Right velocity.
pVelocity1 Next left velocity.

KFCURVE_INLINE void KeySetTCB(kFCurveIndex pKeyIndex,
KTime pTime,
kFCurveDouble pValue,
float pData0=0.0f,
float pData1=0.0f,
float pData2=0.0f 
)

Set a key with cubic interpolation, TCB tangent mode.

Parameters:
pKeyIndex Key index
pTime Key time.
pValue Key value.
pData0 Tension.
pData1 Continuity.
pData2 Bias.

KFCURVE_INLINE kFCurveInterpolation KeyGetInterpolation(kFCurveIndex pKeyIndex ) 

Get key interpolation type.

Interpolation types are: KFCURVE_INTERPOLATION_CONSTANT, KFCURVE_INTERPOLATION_LINEAR, KFCURVE_INTERPOLATION_CUBIC

Parameters:
pKeyIndex Key index
Returns:
Key interpolation type

KFCURVE_INLINE void KeySetInterpolation(kFCurveIndex pKeyIndex,
kFCurveInterpolation pInterpolation 
)

Set key interpolation type.

Parameters:
pKeyIndex Key index
pInterpolation Key interpolation type. Interpolation types are: KFCURVE_INTERPOLATION_CONSTANT, KFCURVE_INTERPOLATION_LINEAR, KFCURVE_INTERPOLATION_CUBIC

KFCURVE_INLINE kFCurveConstantMode KeyGetConstantMode(kFCurveIndex pKeyIndex ) 

Get key constant mode.

Warning: This method is meaningful for constant interpolation only. Using this method for non constant interpolated key will return unpredicted value. Constant modes are: KFCURVE_CONSTANT_STANDARD KFCURVE_CONSTANT_NEXT

Parameters:
pKeyIndex Key index
Returns:
Key constant mode.

KFCURVE_INLINE kFCurveTangeantMode KeyGetTangeantMode(kFCurveIndex pKeyIndex,
bool pIncludeOverrides=false 
)

Get key tangent mode.

Warning: This method is meaningful for cubic interpolation only. Using this method for non cubic interpolated key will return unpredicted value. Tangent modes are: KFCURVE_TANGEANT_AUTO, KFCURVE_TANGEANT_AUTO_BREAK KFCURVE_TANGEANT_TCB, KFCURVE_TANGEANT_USER, KFCURVE_TANGEANT_BREAK

Returns:
Key tangent mode.

KFCURVE_INLINE kFCurveTangeantWeightMode KeyGetTangeantWeightMode(kFCurveIndex pKeyIndex ) 

Get key tangent weight mode.

Warning: This method is meaningful for cubic interpolation only. Tangent weight modes are: KFCURVE_WEIGHTED_NONE, KFCURVE_WEIGHTED_RIGHT, KFCURVE_WEIGHTED_NEXT_LEFT, KFCURVE_WEIGHTED_ALL

KFCURVE_INLINE kFCurveTangeantVelocityMode KeyGetTangeantVelocityMode(kFCurveIndex pKeyIndex ) 

Get key tangent velocity mode.

Warning: This method is meaningful for cubic interpolation only. Tangent weight modes are: KFCURVE_VELOCITY_NONE, KFCURVE_VELOCITY_RIGHT, KFCURVE_VELOCITY_NEXT_LEFT, KFCURVE_VELOCITY_ALL

KFCURVE_INLINE void KeySetConstantMode(kFCurveIndex pKeyIndex,
kFCurveConstantMode pMode 
)

Set key constant mode.

Warning: This method is meaningful for constant interpolation only.

Parameters:
pKeyIndex Key index
pMode Key consant mode. Constant modes are: KFCURVE_CONSTANT_STANDARD KFCURVE_CONSTANT_NEXT

KFCURVE_INLINE void KeySetTangeantMode(kFCurveIndex pKeyIndex,
kFCurveTangeantMode pTangent 
)

Set key tangent mode.

Warning: This method is meaningful for cubic interpolation only.

Parameters:
pKeyIndex Key index
pTangent Key tangent mode. Tangent modes are: KFCURVE_TANGEANT_AUTO, KFCURVE_TANGEANT_AUTO_BREAK KFCURVE_TANGEANT_TCB, KFCURVE_TANGEANT_USER, KFCURVE_TANGEANT_BREAK

KFCURVE_INLINE void KeySetTangeantWeightMode(kFCurveIndex pKeyIndex,
kFCurveTangeantWeightMode pTangentWeightMode,
kFCurveTangeantWeightMode pMask=KFCURVE_WEIGHTED_ALL 
)

Set key tengent weight mode as double value (cubic interpolation, non TCB tangent mode).

Warning: This method is meaningful for cubic interpolation only.

Parameters:
pKeyIndex Key index
pTangentWeightMode Weight mode KFCURVE_WEIGHTED_NONE KFCURVE_WEIGHTED_RIGHT KFCURVE_WEIGHTED_NEXT_LEFT KFCURVE_WEIGHTED_ALL
pMask Used to select the affected tangents KFCURVE_WEIGHTED_RIGHT KFCURVE_WEIGHTED_NEXT_LEFT KFCURVE_WEIGHTED_ALL

KFCURVE_INLINE void KeySetTangeantVelocityMode(kFCurveIndex pKeyIndex,
kFCurveTangeantVelocityMode pTangentVelocityMode,
kFCurveTangeantVelocityMode pMask=KFCURVE_VELOCITY_ALL 
)

Set key tengent velocity mode as double value (cubic interpolation, non TCB tangent mode).

Warning: This method is meaningful for cubic interpolation only.

Parameters:
pKeyIndex Key index
pTangentVelocityMode Weight mode KFCURVE_VELOCITY_NONE KFCURVE_VELOCITY_RIGHT KFCURVE_VELOCITY_NEXT_LEFT KFCURVE_VELOCITY_ALL
pMask Used to select the affected tangents KFCURVE_VELOCITY_RIGHT KFCURVE_VELOCITY_NEXT_LEFT KFCURVE_VELOCITY_ALL

KFCURVE_INLINE kFCurveDouble KeyGetDataDouble(kFCurveIndex pKeyIndex,
EKFCurveDataIndex pIndex 
)

Get key data as double value (cubic interpolation, non TCB tangent mode).

Warning: Using this method for other than cubic interpolated key (linear, constant) will return unpredicted values. Warning: Slope data is inconsistent for automatic tangent mode. UseKFCurve::EvaluateLeftDerivative()andKFCurve::EvaluateRightDerivative()to find slope values. Warning: Using this method for TCB tangent mode key will return unpredicted values. Use KFCurve::GetDataFloat() instead.

Parameters:
pKeyIndex Key index
pIndex Data index, either KFCURVEKEY_RIGHT_SLOPE, KFCURVEKEY_NEXT_LEFT_SLOPE. KFCURVEKEY_NEXT_RIGHT_WEIGHT. KFCURVEKEY_NEXT_LEFT_WEIGHT

KFCURVE_INLINE void KeySetDataDouble(kFCurveIndex pKeyIndex,
EKFCurveDataIndex pIndex,
kFCurveDouble pValue 
)

Set data as double value (cubic interpolation, non TCB tangent mode).

Warning: Using this method for other than cubic interpolated key (linear, constant) is irrelevant. Warning: Slope data is inconsistent for automatic tangent mode. Therefore, it is irrelevant to use this method on automatic tangent mode keys. Warning: Using this method for a TCB tangeant mode key will result in unpredicted curve behavior for this key. Use KFCurve::SetDataFloat() instead.

Parameters:
pKeyIndex Key index
pIndex Data index, either KFCURVEKEY_RIGHT_SLOPE, KFCURVEKEY_NEXT_LEFT_SLOPE. KFCURVEKEY_NEXT_RIGHT_WEIGHT. KFCURVEKEY_NEXT_LEFT_WEIGHT
pValue The data value to set (a slope or a weight).

KFCURVE_INLINE float KeyGetDataFloat(kFCurveIndex pKeyIndex,
EKFCurveDataIndex pIndex 
)

Get key data as float value (cubic interpolation, TCB tangent mode).

Warning: Using this method for any key but a cubic interpolated, in TCB tangent mode, will return unpredicted values.

Parameters:
pKeyIndex Key index
pIndex Data index, either KFCURVEKEY_TCB_TENSION, KFCURVEKEY_TCB_CONTINUITY or KFCURVEKEY_TCB_BIAS.

KFCURVE_INLINE void KeySetDataFloat(kFCurveIndex pKeyIndex,
EKFCurveDataIndex pIndex,
float pValue 
)

Set data as float value (cubic interpolation, TCB tangent mode).

Warning: Using this method for any key but a cubic interpolated, in TCB tangent mode, will return unpredicted values.

Parameters:
pKeyIndex Key index
pIndex Data index, either KFCURVEKEY_TCB_TENSION, KFCURVEKEY_TCB_CONTINUITY or KFCURVEKEY_TCB_BIAS.
pValue The data value to set.

KFCURVE_INLINE const float* KeyGetDataPtr(kFCurveIndex pKeyIndex ) 

Get key data as a pointer Warning: not supported in 'double' mode.

KFCURVE_INLINE kFCurveDouble KeyGetValue(kFCurveIndex pKeyIndex ) 

Get key value.

KFCURVE_INLINE void KeySetValue(kFCurveIndex pKeyIndex,
kFCurveDouble pValue 
)

Set key value.

KFCURVE_INLINE void KeyIncValue(kFCurveIndex pKeyIndex,
kFCurveDouble pValue 
)

Increment key value.

Parameters:
pKeyIndex Key index
pValue Value by which key value is incremented.

KFCURVE_INLINE void KeyMultValue(kFCurveIndex pKeyIndex,
kFCurveDouble pValue 
)

Multiply key value.

Parameters:
pKeyIndex Key index
pValue Value by which the key value is multiplied.

KFCURVE_INLINE void KeyMultTangeant(kFCurveIndex pKeyIndex,
kFCurveDouble pValue 
)

Multiply key tangents.

Note: When multiplying a key value, tangents must be multiplied to conserve the same topology.

Parameters:
pKeyIndex Key index
pValue Value by which key tangents are multiplied.

KFCURVE_INLINEKTimeKeyGetTime(kFCurveIndex pKeyIndex ) 

Get key time.

Parameters:
pKeyIndex Key index
Returns:
Key time (time at which this key is occuring).

KFCURVE_INLINE void KeySetTime(kFCurveIndex pKeyIndex,
KTime pTime 
)

Set key time.

Parameters:
pKeyIndex Key index
pTime Key time (time at which this key is occuring).

KFCURVE_INLINE void KeyIncTime(kFCurveIndex pKeyIndex,
KTime pTime 
)

Increment key time.

Parameters:
pKeyIndex Key index
pTime Time value by which the key time is incremented.

KFCURVE_INLINE void KeySetSelected(kFCurveIndex pKeyIndex,
bool pSelected 
)

Set if key is currently selected.

Parameters:
pKeyIndex Key index
pSelected Selection flag.

KFCURVE_INLINE bool KeyGetSelected(kFCurveIndex pKeyIndex ) 

Return if key is currently selected.

Returns:
Selection flag.

KFCURVE_INLINE void KeySetMarkedForManipulation(kFCurveIndex pKeyIndex,
bool pMark 
)

Set if key is currently marked for manipulation.

Parameters:
pKeyIndex Key index
pMark Mark flag.

KFCURVE_INLINE bool KeyGetMarkedForManipulation(kFCurveIndex pKeyIndex ) 

Return if key is currently marked for manipulation.

Returns:
Mark flag.

KFCURVE_INLINE void KeySetTangeantVisibility(kFCurveIndex pKeyIndex,
kFCurveTangeantVisibility pVisibility 
)

Set tangent visibility mode.

Warning: This method is meaningful for cubic interpolation only.

Parameters:
pKeyIndex Key index
pVisibility Tangent visibility mode. Tangent visibility modes are: KFCURVE_TANGEANT_SHOW_NONE KFCURVE_TANGEANT_SHOW_LEFT KFCURVE_TANGEANT_SHOW_RIGHT

KFCURVE_INLINE kFCurveTangeantVisibility KeyGetTangeantVisibility(kFCurveIndex pKeyIndex ) 

Return tangent visibility mode.

Warning: This method is meaningful for cubic interpolation only.

Returns:
Tangent visibility mode. Tangent visibility modes are: KFCURVE_TANGEANT_SHOW_NONE KFCURVE_TANGEANT_SHOW_LEFT KFCURVE_TANGEANT_SHOW_RIGHT

KFCURVE_INLINE void KeySetBreak(kFCurveIndex pKeyIndex,
bool pVal 
)

Set/Unset Break tangeant Only valid for User and Auto keys.

KFCURVE_INLINE bool KeyGetBreak(kFCurveIndex pKeyIndex ) 

Get if tangeant is break Only valid for User and Auto keys.

void KeyTangeantSetInterpolation(bool pSelectedOnly,
kFCurveInterpolation pInterpolation 
)

Set interpolation type on keys, all or selected only.

Parameters:
pSelectedOnly If set totrue, only selected keys are affected. Otherwise, all keys are affected.
pInterpolation Interpolation type.

void KeyTangeantSetMode(bool pSelectedOnly,
kFCurveTangeantMode pTangentMode 
)

Set tangent mode on keys, all or selected only.

Parameters:
pSelectedOnly If set totrue, only selected keys are affected. Otherwise, all keys are affected.
pTangentMode Tangent mode.
Remarks:
Tangent mode is only relevant on keys with a cubic interpolation type.

kFCurveDouble KeyGetLeftDerivative(kFCurveIndex pIndex ) 

Get the left derivative of a key.

Parameters:
pIndex Index of key.
Returns:
Left derivative.
Remarks:
Result is undetermined if function curve has no key or index is out of bounds.

void KeySetLeftDerivative(kFCurveIndex pIndex,
kFCurveDouble pValue 
)

Set the left derivative of a key.

Parameters:
pIndex Index of key.
pValue Left derivative.
Remarks:
Result is undetermined if function curve has no key or index is out of bounds. This function is only relevant if previous key interpolation type is KFCURVE_INTERPOLATION_CUBIC and tangent mode is KFCURVE_TANGEANT_USER, KFCURVE_TANGEANT_BREAK or KFCURVE_TANGEANT_AUTO.

kFCurveDouble KeyGetLeftAuto(kFCurveIndex pIndex,
bool pApplyOvershootProtection=false 
)

Get the left auto parametric of a key.

Parameters:
pIndex Index of key.
pApplyOvershootProtection Clamp is taking into account.
Returns:
left auto parametric.
Remarks:
Result is undetermined if function curve has no key or index is out of bounds.

void KeySetLeftAuto(kFCurveIndex pIndex,
kFCurveDouble pValue 
)

Set the left auto parametric of a key.

Parameters:
pIndex Index of key.
pValue Left auto parametric .
Remarks:
Result is undetermined if function curve has no key or index is out of bounds. This function is only relevant if previous key interpolation type is KFCURVE_INTERPOLATION_CUBIC and tangent mode is KFCURVE_TANGEANT_USER, KFCURVE_TANGEANT_BREAK or KFCURVE_TANGEANT_AUTO.

KFCurveTangeantInfoKeyGetLeftDerivativeInfo(kFCurveIndex pIndex ) 

Get the left derivative info of a key.

Parameters:
pIndex Index of key.
Returns:
Left derivative.
Remarks:
Result is undetermined if function curve has no key or index is out of bounds.

void KeySetLeftDerivativeInfo(kFCurveIndex pIndex,
KFCurveTangeantInfo pValue,
bool pForceDerivative=false 
)

Set the left derivative info of a key.

Parameters:
pIndex Index of key.
pValue Left derivative.
pForceDerivative 
Remarks:
Result is undetermined if function curve has no key or index is out of bounds. This function is only relevant if previous key interpolation type is KFCURVE_INTERPOLATION_CUBIC and tangent mode is KFCURVE_TANGEANT_USER or KFCURVE_TANGEANT_BREAK.

void KeyIncLeftDerivative(kFCurveIndex pIndex,
kFCurveDouble pInc 
)

Increment the left derivative of a key.

Parameters:
pIndex Index of key.
pInc Increment to left derivative.
Remarks:
Result is undetermined if function curve has no key or index is out of bounds. This function is only relevant if previous key interpolation type is KFCURVE_INTERPOLATION_CUBIC and tangent mode is KFCURVE_TANGEANT_USER or KFCURVE_TANGEANT_BREAK.

kFCurveDouble KeyGetRightDerivative(kFCurveIndex pIndex ) 

Get the right derivative of a key.

Parameters:
pIndex Index of key.
Returns:
Right derivative.
Remarks:
Result is undetermined if function curve has no key or index is out of bounds.

void KeySetRightDerivative(kFCurveIndex pIndex,
kFCurveDouble pValue 
)

Set the right derivative of a key.

Parameters:
pIndex Index of key.
pValue Right derivative.
Remarks:
Result is undetermined if function curve has no key or index is out of bounds. This function is only relevant if previous key interpolation type is KFCURVE_INTERPOLATION_CUBIC and tangent mode is KFCURVE_TANGEANT_USER, KFCURVE_TANGEANT_BREAK or KFCURVE_TANGEANT_AUTO.

kFCurveDouble KeyGetRightAuto(kFCurveIndex pIndex,
bool pApplyOvershootProtection=false 
)

Get the right auto parametric of a key.

Parameters:
pIndex Index of key.
pApplyOvershootProtection Clamp is taking into account.
Returns:
Right auto parametric.
Remarks:
Result is undetermined if function curve has no key or index is out of bounds.

void KeySetRightAuto(kFCurveIndex pIndex,
kFCurveDouble pValue 
)

Set the right auto parametric of a key.

Parameters:
pIndex Index of key.
pValue Right auto parametric .
Remarks:
Result is undetermined if function curve has no key or index is out of bounds. This function is only relevant if previous key interpolation type is KFCURVE_INTERPOLATION_CUBIC and tangent mode is KFCURVE_TANGEANT_USER, KFCURVE_TANGEANT_BREAK or KFCURVE_TANGEANT_AUTO.

KFCurveTangeantInfoKeyGetRightDerivativeInfo(kFCurveIndex pIndex ) 

Get the right derivative info of a key.

Parameters:
pIndex Index of key.
Returns:
Right derivative info.
Remarks:
Result is undetermined if function curve has no key or index is out of bounds.

void KeySetRightDerivativeInfo(kFCurveIndex pIndex,
KFCurveTangeantInfo pValue,
bool pForceDerivative=false 
)

Set the right derivative info of a key.

Parameters:
pIndex Index of key.
pValue Right derivative.
pForceDerivative 
Remarks:
Result is undetermined if function curve has no key or index is out of bounds. This function is only relevant if previous key interpolation type is KFCURVE_INTERPOLATION_CUBIC and tangent mode is KFCURVE_TANGEANT_USER or KFCURVE_TANGEANT_BREAK.

void KeyIncRightDerivative(kFCurveIndex pIndex,
kFCurveDouble pInc 
)

Increment the right derivative of a key.

Parameters:
pIndex Index of key.
pInc Increment to right derivative.
Remarks:
Result is undetermined if function curve has no key or index is out of bounds. This function is only relevant if previous key interpolation type is KFCURVE_INTERPOLATION_CUBIC and tangent mode is KFCURVE_TANGEANT_USER or KFCURVE_TANGEANT_BREAK.

kFCurveDouble KeyGetRightBezierTangeant(kFCurveIndex pIndex ) 

This function is disabled and always return 0.

void KeySetLeftBezierTangeant(kFCurveIndex pIndex,
kFCurveDouble pValue 
)

Set the left derivative of a key as a Bezier tangent.

Parameters:
pIndex Index of key.
pValue Left derivative as a Bezier tangent.
Remarks:
Result is undetermined if function curve has no key or index is out of bounds. This function is only relevant if previous key interpolation type is KFCURVE_INTERPOLATION_CUBIC and tangent mode is KFCURVE_TANGEANT_USER or KFCURVE_TANGEANT_BREAK.

kFCurveDouble KeyGetLeftBezierTangeant(kFCurveIndex pIndex ) 

This function is disabled and always returns 0.

void KeySetRightBezierTangeant(kFCurveIndex pIndex,
kFCurveDouble pValue 
)

Set the right derivative of a key as a Bezier tangent.

Parameters:
pIndex Index of key.
pValue Right derivative as a Bezier tangent.
Remarks:
Result is undetermined if function curve has no key or index is out of bounds. This function is only relevant if previous key interpolation type is KFCURVE_INTERPOLATION_CUBIC and tangent mode is KFCURVE_TANGEANT_USER or KFCURVE_TANGEANT_BREAK.

void KeyMultDerivative(kFCurveIndex pIndex,
kFCurveDouble pMultValue 
)

Multiply the Derivative of a key.

Parameters:
pIndex Index of key.
pMultValue Value that multiply Derivative
Remarks:
Result is undetermined if function curve has no key or index is out of bounds. This function is only relevant if key interpolation is KFCURVE_TANGEANT_USER or KFCURVE_TANGEANT_BREAK.

bool KeyIsLeftTangeantWeighted(kFCurveIndex pIndex ) 

Get the left tangent weight mode of a key.

Parameters:
pIndex Index of key.
Returns:
true if the key is weighted
Remarks:
Result is undetermined if function curve has no key or index is out of bounds.

bool KeyIsRightTangeantWeighted(kFCurveIndex pIndex ) 

Get the right tangent weight mode of a key.

Parameters:
pIndex Index of key.
Returns:
true if the key is weighted
Remarks:
Result is undetermined if function curve has no key or index is out of bounds.

void KeySetLeftTangeantWeightedMode(kFCurveIndex pIndex,
bool pWeighted 
)

Set the left tangent weight mode of a key.

Parameters:
pIndex Index of key.
pWeighted Weighted state of the tangent This function is only relevant if previous key interpolation type is KFCURVE_INTERPOLATION_CUBIC and tangent mode is KFCURVE_TANGEANT_USER or KFCURVE_TANGEANT_BREAK.

void KeySetRightTangeantWeightedMode(kFCurveIndex pIndex,
bool pWeighted 
)

Set the right tangent weight mode of a key.

Parameters:
pIndex Index of key.
pWeighted Weighted state of the tangent This function is only relevant if key interpolation type is KFCURVE_INTERPOLATION_CUBIC and tangent mode is KFCURVE_TANGEANT_USER or KFCURVE_TANGEANT_BREAK.

kFCurveDouble KeyGetLeftTangeantWeight(kFCurveIndex pIndex ) 

Get the weight value component of the left tangent of a key.

Parameters:
pIndex Index of key.
Returns:
right tangen weight This function is only relevant if key interpolation type is KFCURVE_INTERPOLATION_CUBIC

kFCurveDouble KeyGetRightTangeantWeight(kFCurveIndex pIndex ) 

Get the weight value component of the right tangent of a key.

Parameters:
pIndex Index of key.
Returns:
right tangen weight This function is only relevant if key interpolation type is KFCURVE_INTERPOLATION_CUBIC

void KeySetLeftTangeantWeight(kFCurveIndex pIndex,
kFCurveDouble pWeight 
)

Set the left tangent weight of a key.

Parameters:
pIndex Index of key.
pWeight Weight This function is only relevant if previous key interpolation type is KFCURVE_INTERPOLATION_CUBIC and tangent mode is KFCURVE_TANGEANT_USER or KFCURVE_TANGEANT_BREAK. The tangent is automatically set in weighted mode.

void KeySetRightTangeantWeight(kFCurveIndex pIndex,
kFCurveDouble pWeight 
)

Set the right tangent weight of a key.

Parameters:
pIndex Index of key.
pWeight Weight This function is only relevant if key interpolation type is KFCURVE_INTERPOLATION_CUBIC and tangent mode is KFCURVE_TANGEANT_USER or KFCURVE_TANGEANT_BREAK. The tangent is automatically set in weighted mode.

bool KeyIsLeftTangeantVelocity(kFCurveIndex pIndex ) 

Get the left tangent velocity mode of a key.

Parameters:
pIndex Index of key.
Returns:
true if the key has velocity
Remarks:
Result is undetermined if function curve has no key or index is out of bounds.

bool KeyIsRightTangeantVelocity(kFCurveIndex pIndex ) 

Get the right tangent velocity mode of a key.

Parameters:
pIndex Index of key.
Returns:
true if the key has velocity
Remarks:
Result is undetermined if function curve has no key or index is out of bounds.

void KeySetLeftTangeantVelocityMode(kFCurveIndex pIndex,
bool pVelocity 
)

Set the left tangent velocity mode of a key.

Parameters:
pIndex Index of key.
pVelocity Velocity state of the tangent This function is only relevant if previous key interpolation type is KFCURVE_INTERPOLATION_CUBIC and tangent mode is KFCURVE_TANGEANT_USER or KFCURVE_TANGEANT_BREAK.

void KeySetRightTangeantVelocityMode(kFCurveIndex pIndex,
bool pVelocity 
)

Set the right tangent velocity mode of a key.

Parameters:
pIndex Index of key.
pVelocity Velocity state of the tangent This function is only relevant if key interpolation type is KFCURVE_INTERPOLATION_CUBIC and tangent mode is KFCURVE_TANGEANT_USER or KFCURVE_TANGEANT_BREAK.

kFCurveDouble KeyGetLeftTangeantVelocity(kFCurveIndex pIndex ) 

Get the velocity value component of the left tangent of a key.

Parameters:
pIndex Index of key.
Returns:
right tangen velocity This function is only relevant if key interpolation type is KFCURVE_INTERPOLATION_CUBIC

kFCurveDouble KeyGetRightTangeantVelocity(kFCurveIndex pIndex ) 

Get the velocity value component of the right tangent of a key.

Parameters:
pIndex Index of key.
Returns:
right tangen velocity This function is only relevant if key interpolation type is KFCURVE_INTERPOLATION_CUBIC

void KeySetLeftTangeantVelocity(kFCurveIndex pIndex,
kFCurveDouble pVelocity 
)

Set the left tangent velocity of a key.

Parameters:
pIndex Index of key.
pVelocity Velocity This function is only relevant if previous key interpolation type is KFCURVE_INTERPOLATION_CUBIC and tangent mode is KFCURVE_TANGEANT_USER or KFCURVE_TANGEANT_BREAK. The tangent is automatically set in velocity mode.

void KeySetRightTangeantVelocity(kFCurveIndex pIndex,
kFCurveDouble pVelocity 
)

Set the right tangent velocity of a key.

Parameters:
pIndex Index of key.
pVelocity Velocity This function is only relevant if key interpolation type is KFCURVE_INTERPOLATION_CUBIC and tangent mode is KFCURVE_TANGEANT_USER or KFCURVE_TANGEANT_BREAK. The tangent is automatically set in velocity mode.

KFCURVE_INLINE void SetPreExtrapolation(kFCurveExtrapolationMode pExtrapolation ) 

Set pre-extrapolation mode.

KFCURVE_INLINE kFCurveExtrapolationMode GetPreExtrapolation( ) 

Get pre-extrapolation mode.

KFCURVE_INLINE void SetPreExtrapolationCount(kULong pCount ) 

Set pre-extrapolation count.

Parameters:
pCount Number of repetitions if pre-extrapolation mode is KFCURVE_EXTRAPOLATION_REPETITION or KFCURVE_EXTRAPOLATION_MIRROR_REPETITION.

KFCURVE_INLINE kULong GetPreExtrapolationCount( ) 

Get pre-extrapolation count.

Returns:
Number of repetitions if pre-extrapolation mode is KFCURVE_EXTRAPOLATION_REPETITION or KFCURVE_EXTRAPOLATION_MIRROR_REPETITION.

KFCURVE_INLINE void SetPostExtrapolation(kFCurveExtrapolationMode pExtrapolation ) 

Set post-extrapolation mode.

KFCURVE_INLINE kFCurveExtrapolationMode GetPostExtrapolation( ) 

Get post-extrapolation mode.

KFCURVE_INLINE void SetPostExtrapolationCount(kULong pCount ) 

Set post-extrapolation count.

Parameters:
pCount Number of repetitions if post-extrapolation mode is KFCURVE_EXTRAPOLATION_REPETITION or KFCURVE_EXTRAPOLATION_MIRROR_REPETITION.

KFCURVE_INLINE kULong GetPostExtrapolationCount( ) 

Get post-extrapolation count.

Returns:
Number of repetitions if post-extrapolation mode is KFCURVE_EXTRAPOLATION_REPETITION or KFCURVE_EXTRAPOLATION_MIRROR_REPETITION.

int KeyGetCountAll( ) 

Get total number of keys taking extrapolation into account.

The total number of keys includes repetitions of the function curve if pre-extrapolation and/or post-extrapolation are of mode KFCURVE_EXTRAPOLATION_REPETITION or KFCURVE_EXTRAPOLATION_MIRROR_REPETITION.

Returns:
Total number of keys taking extrapolation into account.

double KeyFindAll(KTime pTime,
kFCurveIndex * pLast=NULL 
)

Find key index for a given time taking extrapolation into account.

Parameters:
pTime Time of the key looked for.
pLast Function curve index to speed up search. If this function is called in a loop, initialize this value to 0 and let it be updated by each call.
Returns:
Key index between 0 andKFCurve::KeyGetCount()- 1.The integer part of the key index gives the index of the closest key with a smaller time. The decimals give the relative position of given time compared to previous and next key times. Return -1 if function curve has no key.

kFCurveDouble Evaluate(KTime pTime,
kFCurveIndex * pLast=NULL 
)

Evaluate function curve value at a given time.

Parameters:
pTime Time of evaluation. If time falls between two keys, function curve value is interpolated according to previous key interpolation type and tangent mode if relevant.
pLast Function curve index to speed up search. If this function is called in a loop, initialize this value to 0 and let it be updated by each call.
Returns:
Function curve value or default value if function curve has no key.
Remarks:
This function takes extrapolation into account.

kFCurveDouble EvaluateIndex(double pIndex ) 

Evaluate function curve value at a given key index.

Parameters:
pIndex Any value between 0 andKFCurve::KeyGetCount()- 1. If key index is not an integer value, function curve value is interpolated according to previous key interpolation type and tangent mode if relevant.
Returns:
Function curve value or default value if function curve has no key.
Remarks:
This function does not take extrapolation into account.

kFCurveDouble EvaluateLeftDerivative(KTime pTime,
kFCurveIndex * pLast=NULL 
)

Evaluate function left derivative at given time.

Parameters:
pTime Time of evaluation.
pLast Function curve index to speed up search. If this function is called in a loop, initialize this value to 0 and let it be updated by each call.
Returns:
Left derivative at given time.
Remarks:
This function does not take extrapolation into account.

kFCurveDouble EvaluateRightDerivative(KTime pTime,
kFCurveIndex * pLast=NULL 
)

Evaluate function right derivative at given time.

Parameters:
pTime Time of evaluation.
pLast Function curve index to speed up search. If this function is called in a loop, initialize this value to 0 and let it be updated by each call.
Returns:
Right derivative at given time.
Remarks:
This function does not take extrapolation into account.

int FindPeaks(kFCurveIndex pLeftKeyIndex,
KTimepPeakTime1,
KTimepPeakTime2 
)

Find the peaks time between 2 keys (a local minimum and/or maximum).

Parameters:
pLeftKeyIndex Left key index (there must be a right key).
pPeakTime1 First peak time.
pPeakTime2 Second peak time.
Returns:
Number of peaks found.
Remarks:
Result is undetermined if function curve has no key or index is out of bounds.

int FindPeaks(kFCurveIndex pLeftKeyIndex,
kFCurveDouble& pPeak1,
kFCurveDouble& pPeak2 
)

Find the peaks value between 2 keys (a local minimum and/or maximum).

Parameters:
pLeftKeyIndex Left key index (there must be a right key).
pPeak1 First peak value.
pPeak2 Second peak value.
Returns:
Number of peaks found.
Remarks:
Result is undetermined if function curve has no key or index is out of bounds.

int FindPeaks(kFCurveIndex pLeftKeyIndex,
KTimepPeakTime1,
kFCurveDouble& pPeak1,
KTimepPeakTime2,
kFCurveDouble& pPeak2 
)

Find the peaks time and value between 2 keys (a local minimum and/or maximum).

Parameters:
pLeftKeyIndex Left key index (there must be a right key).
pPeakTime1 First peak time.
pPeak1 First peak value.
pPeakTime2 Second peak time.
pPeak2 Second peak value.
Returns:
Number of peaks found.
Remarks:
Result is undetermined if function curve has no key or index is out of bounds.

void KeyGetPeriods(KTimepAveragePeriod,
KTimepMinPeriod,
KTimepMaxPeriod 
)

Get key period statistics.

If pAveragePeriod == pMinPeriod, we have iso-sampled data.

Parameters:
pAveragePeriod Average key period.
pMinPeriod Minimum period found.
pMaxPeriod Maximum period found.

HKFCurveCopy(KTime pStart=KTIME_MINUS_INFINITE,
KTime pStop=KTIME_INFINITE 
)

Create a new function curve and copy keys found between a given time range.

Time range is inclusive.

Parameters:
pStart Start of time range.
pStop End of time range.
Returns:
Created function curve.
Remarks:

void CopyFrom(KFCurvepSource,
bool pWithKeys=true 
)

Copy a function curve content into current function curve.

Parameters:
pSource Source function curve.
pWithKeys Iftrue, clear keys in current function curve and copy keys from source function curve. Iffalse, keys in current function curve are left as is.

void Replace(HKFCurve pSource,
KTime pStart=KTIME_MINUS_INFINITE,
KTime pStop=KTIME_INFINITE,
bool pUseExactGivenSpan=false,
bool pKeyStartEndOnNoKey=true,
KTime pTimeSpanOffset=KTIME_ZERO 
)

Replace keys within a range in current function curve with keys found in a source function curve.

Parameters:
pSource Source function curve.
pStart Start of time range.
pStop End of time range.
pUseExactGivenSpan false = original behavior where time of first and last key was used
pKeyStartEndOnNoKey Inserts a key at the beginning and at the end of the range if there is no key to insert.
pTimeSpanOffset 

void ReplaceForQuaternion(HKFCurve pSource,
KTime pStart,
KTime pStop,
kFCurveDouble pScaleStart,
kFCurveDouble pScaleStop,
bool pUseExactGivenSpan=false,
bool pKeyStartEndOnNoKey=true,
KTime pTimeSpanOffset=KTIME_ZERO 
)

Replace keys within a range in current function curve with keys found in a source function curve.

The copied keys have their value scaled with a factor varying linearly in time within the given time range.

Parameters:
pSource Source function curve.
pStart Start of time range.
pStop End of time range.
pScaleStart Scale factor applied at start of time range.
pScaleStop Scale factor applied at end of time range.
pUseExactGivenSpan false = original behavior where time of first and last key was used
pKeyStartEndOnNoKey Inserts a key at the beginning and at the end of the range if there is no key to insert.
pTimeSpanOffset 

void ReplaceForEulerXYZ(HKFCurve pSource,
KTime pStart,
KTime pStop,
kFCurveDouble pAddFromStart,
kFCurveDouble pAddAfterStop,
bool pValueSubOffsetAfterStart,
bool pValueSubOffsetAfterStop,
bool pUseExactGivenSpan=false,
bool pKeyStartEndOnNoKey=true,
KTime pTimeSpanOffset=KTIME_ZERO 
)

Replace keys within a range in current function curve with keys found in a source function curve.

Parameters:
pSource Source function curve.
pStart Start of time range.
pStop End of time range.
pAddFromStart Offset applied to copied key values within the time range.
pAddAfterStop Offset applied to key values after the time range.
pValueSubOffsetAfterStart Iftrue, copied key values within the time range are substracted from time offset specified by parameterpAddFromStart. Iffalse, copied key values within the time range are added to time offset specified by parameterpAddFromStart.
pValueSubOffsetAfterStop Iftrue, key values after the time range are substracted from time offset specified by parameterpAddAfterStop. Iffalse, key values after the time range are added to time offset specified by parameterpAddAfterStop.
pUseExactGivenSpan false = original behavior where time of first and last key was used
pKeyStartEndOnNoKey Inserts a key at the beginning and at the end of the range if there is no key to insert
pTimeSpanOffset 

void Insert(HKFCurve pSource,
KTime pInsertTime,
kFCurveDouble pFirstKeyLeftDerivative,
bool pFirstKeyIsWeighted=false,
kFCurveDouble pFirstKeyWeight=KFCURVE_DEFAULT_WEIGHT 
)

Insert all keys found in a source function curve in current function curve.

A time offset is added to copied keys so that the first copied key occurs at the given insertion time. Keys from the source function curve are merged into the current function curve. In other words, no existing key in the current function curve is destroyed unless there is an overlap with a copied key.

Parameters:
pSource Source function curve.
pInsertTime Insert time of the first key found in the source function curve.
pFirstKeyLeftDerivative First key left derivative.
pFirstKeyIsWeighted First key left weighted state (true if weighted).
pFirstKeyWeight First key left weight

void Insert(HKFCurve pSource,
KTime pInsertTime,
KFCurveTangeantInfo pFirstKeyLeftDerivative 
)

Insert all keys found in a source function curve in current function curve.

A time offset is added to copied keys so that the first copied key occurs at the given insertion time. Keys from the source function curve are merged into the current function curve. In other words, no existing key in the current function curve is destroyed unless there is an overlap with a copied key.

Parameters:
pSource Source function curve.
pInsertTime Insert time of the first key found in the source function curve.
pFirstKeyLeftDerivative First key left derivative info.

bool Delete(kFCurveIndex pStartIndex,
kFCurveIndex pStopIndex 
)

Delete keys within an index range.

Index range is inclusive. This function is much faster than multiple removes.

Parameters:
pStartIndex Index of first deleted key.
pStopIndex Index of last deleted key.
Returns:
trueif the function curve contains keys,falseotherwise.
Remarks:
Result is undetermined if function curve has keys but an index is out of bounds.

bool Delete(KTime pStart=KTIME_MINUS_INFINITE,
KTime pStop=KTIME_INFINITE 
)

Delete keys within a time range.

Time range is inclusive. This function is much faster than multiple removes.

Parameters:
pStart Start of time range.
pStop End of time range.
Returns:
trueif the function curve contains keys,falseotherwise.

bool IsKeyInterpolationPureCubicAuto(kFCurveIndex pKeyIndex ) 

Get if interpolation is cubic and that the tangents and weightings are untouched.

Parameters:
pKeyIndex Index of the key to test.
Returns:
Returns true if the interpolation is a pure cubic auto.

void ExtractKeysIndex(KArraykInt& pArray,
int pMinIndex,
int pMaxIndex,
double pMinValue=-K_DOUBLE_MAX,
double pMaxValue=K_DOUBLE_MAX 
)

Extract All Keys in the Given Selection Span.

Parameters:
pArray Array where to Stored Found Keys.
pMinIndex Index where to start the Search.
pMaxIndex Index where to stop the Search (the last index is the limit, the Key at this index is not tested).
pMinValue Minimal Value to Consider the Key.
pMaxValue Maximal Value to Consider the Key.