Public Types | Public Member Functions | Static Public Member Functions

MItKeyframe Class Reference

Search for all occurrences

Detailed Description

Keyframe Iterator.

Iterate over the keyframes of a particular Anim Curve Node, and query and edit the keyframe to which the iterator points.

Determine the time and value of the keyframe, as well as the x,y values and type of the tangent to the curve entering (in tangent) and leaving (out tangent) the keyframe.

Set the time and value of the keyframe, and the type of the tangents.

Anim Curves are implemented as Dependency Graph (DG) Nodes. Each Node has multiple ordered and indexed keyframes.

Use the Keyframe Iterator to systematically visit, and query and/or edit the keyframes of a Anim Curve Node.

Use the Keyframe Iterator in conjunction with the Anim Curve Function Set (MFnAnimCurve) to edit Anim Curve Nodes.

On creation the iterator is attached to a Anim Curve Node. The iterator may be detached from its current Node and attached to another Anim Curve Node using the reset() method.

Though keyframes within a Node are ordered and indexed, the iterator maintains the index of the current Node internally and does not export it. Use the Anim Curve Function Set to access the index for a keyframe. The index is zero-based. When an iterator is first attached to a Node, either on creation or reset, the index is set to zero. There is an overloaded version of the reset() method which does not cause the iterator to change Nodes, but merely resets the index.

Use the next(), reset() and isDone() methods to perform iterations.

Use the specific query methods to determine the time, value and tangent information for the keyframe under the iterator.

Use specific edit methods to set the time and value , as well as the incoming and outgoing tangent type (MItKeyframe::TangentType) of the keyframe under the iterator.

There is no method for setting the x,y value of either of the tangents.

Setting the time of a keyframe will fail if the new time would require a re-ordering of the keyframes. Use the Anim Curve Functiion Set methods MFnAnimCurve::remove() and MFnAnimCurve::addKeyFrame() to re-order the keyframes.

#include <MItKeyframe.h>

List of all members.

Public Types

enum   TangentType {
  kTangentGlobal = 0, kTangentFixed, kTangentLinear, kTangentFlat,
  kTangentSmooth, kTangentStep, kTangentSlow, kTangentFast,
  kTangentClamped, kTangentPlateau, kTangentStepNext, kTangentAuto
}
 

< Tangent types.

More...

Public Member Functions

  MItKeyframe (MObject &animCurveNode, MStatus *ReturnStatus=NULL)
  Class Constructor.
  ~MItKeyframe ()
  Class Destructor.
MStatus  reset (MObject &animCurveNode)
  Detaches the iterator from the current Anim Curve Node and attaches it to the given Node.
MStatus  reset ()
  Resets the keyframe index to 0 (first keyframe) on the Anim Curve Node to which the iterator is attached.
MStatus  next ()
  Moves to the next keyframe on the Anim Curve Node to which the iterator is attached.
bool  isDone (MStatus *ReturnStatus=NULL)
  Indicates that the iterator has moved beyond the last keyframe on the Anim Curve Node to which the iterator is attached.
MTime  time (MStatus *ReturnStatus=NULL)
  Determines the time of the current keyframe.
MStatus  setTime (MTime time)
  Sets the time of the current keyframe.
double  value (MStatus *ReturnStatus=NULL)
  Determines the value of the current keyframe.
MStatus  setValue (double value)
  Sets the value of the current keyframe.
TangentType  inTangentType (MStatus *ReturnStatus=NULL)
  Determines the type of the tangent to the curve entering the current keyframe.
TangentType  outTangentType (MStatus *ReturnStatus=NULL)
  Determines the type of the tangent to the curve leaving the current keyframe.
MStatus  setInTangentType (TangentType tangentType)
  Sets the type of the tangent to the curve entering the current keyframe.
MStatus  setOutTangentType (TangentType tangentType)
  Sets the type of the tangent to the curve entering the current keyframe.
MStatus  getTangentOut (float &x, float &y)
  Determines the x,y value of the tangent to the curve leaving the current keyframe.
MStatus  getTangentIn (float &x, float &y)
  Determines the x,y value of the tangent to the curve entering the current keyframe.
bool  tangentsLocked (MStatus *ReturnStatus=NULL) const
  Determines whether the tangents are locked at this keyframe.
MStatus  setTangentsLocked (bool locked)
  Lock or unlock the tangents at this keyframe.

Static Public Member Functions

static const char *  className ()
  Returns the name of this class.

Member Enumeration Documentation

< Tangent types.

Enumerator:
kTangentGlobal 

 

kTangentFixed 

Normally, if a key is moved tangent values will be adjusted to maintain their relationships to the surrounding keys (linear, smooth, etc).

If a tangent is set to be fixed then it will not change when keys are moved but will retain its current value.

kTangentLinear 

For an in tangent this sets it to point directly at the previous key.

For an out tangent it points directly to the next key. This is used to create straight lines between keys.

kTangentFlat 

The tangent is horizontal.

kTangentSmooth 

The in and out tangents are colinear and set to provide a smooth transition from the key before to the key after.

kTangentStep 

The key's value is maintained until the next key is reached whereupon it immediately jumps to the new key's value.

kTangentSlow 

Slow tangent.

kTangentFast 

Fast tangent.

kTangentClamped 

Same as smooth except when two keys are very close together in which case the tangents between them are treated as linear.

This corrects for slippage which is sometimes seen when spline tangents are used on keyframes which are close together.

kTangentPlateau 

Similar to smooth except that minima and maxima between keyframes are flattened, if necessary, to prevent them overshooting their keys.

kTangentStepNext 

Upon leaving the keyframe the value immediately jumps to that of the next keyframe and stays there.

kTangentAuto 

The first and last keyframes will have flat tangents.

Between, inner keyframes, the animation curve will not over shoot the keyframe values.


Constructor & Destructor Documentation

MItKeyframe ( MObject animCurveNode,
MStatus ReturnStatus = NULL 
)

Class Constructor.

Creates an iterator and attaches it to the given Anim Curve Node.

Parameters:
[in] animCurveNode Target Node for attachment of iterator
[out] ReturnStatus Status Code (see below)
Status Codes:
  • MS::kSuccess Success
  • MS::kFailure Failure creating iterator - Node does not exist, is not accessible or is not a Anim Curve

Class Destructor.

No additional action.


Member Function Documentation

MStatus reset ( MObject animCurveNode )

Detaches the iterator from the current Anim Curve Node and attaches it to the given Node.

Resets to the first keyframe (index = 0).

Parameters:
[in] animCurveNode New target Node for attachment to iterator
Returns:
Status Code (see below)
Status Codes:
  • MS::kSuccess Success
  • MS::kFailure Failure reseting iterator - Node does not exist, is not accessible or is not a Anim Curve
MStatus reset ( )

Resets the keyframe index to 0 (first keyframe) on the Anim Curve Node to which the iterator is attached.

Returns:
Status Code (see below)
Status Codes:
MStatus next ( )

Moves to the next keyframe on the Anim Curve Node to which the iterator is attached.

Attempting to move beyond the last keyframe has no effect (and returns success).

Returns:
Status Code (see below)
Status Codes:
bool isDone ( MStatus ReturnStatus = NULL )

Indicates that the iterator has moved beyond the last keyframe on the Anim Curve Node to which the iterator is attached.

If isDone() returns true, attempting to access the curve via the iterator's time(), value() etc. methods will return an 'index out of range' error.

Parameters:
[out] ReturnStatus Status Code (see below)
Returns:
  • true Done
  • false Not done
Status Codes:
MTime time ( MStatus ReturnStatus = NULL )

Determines the time of the current keyframe.

Parameters:
[out] ReturnStatus Status Code (see below).
Returns:
Time (in seconds) of the current keyframe
Status Codes:
MStatus setTime ( MTime  time )

Sets the time of the current keyframe.

This will fail if setting the time would require re-ordering of the keyframes.

Tangents may be changed so that the curve remains monotonic with respect to time.

Parameters:
[in] time Time to which the current keyframe time is to be set.
Returns:
Status Code (see below)
Status Codes:
double value ( MStatus ReturnStatus = NULL )

Determines the value of the current keyframe.

Parameters:
[out] ReturnStatus Status Code (see below).
Returns:
Value of the current keyframe
Status Codes:
MStatus setValue ( double  value )

Sets the value of the current keyframe.

Parameters:
[in] value Value to which the current keyframe time is to be set.
Returns:
Status Code (see below)
Status Codes:
  • MS::kSuccess Success
  • MS::kInvalidParameter Iterator holds invalid keyframe index (index >= number of keyframes) - iterator is invalid or index is invalid
  • MS::kFailure Failure editing Node - Node does not exist or is not accessible
MItKeyframe::TangentType inTangentType ( MStatus ReturnStatus = NULL )

Determines the type of the tangent to the curve entering the current keyframe.

Parameters:
[out] ReturnStatus Status Code (see below).
Returns:
Type of the tangent
Status Codes:
  • MS::kSuccess Success
  • MS::kInvalidParameter Iterator holds invalid keyframe index (index >= number of keyframes) - iterator is invalid or index is invalid
  • MS::kFailure Failure querying Node - Node does not exist or is not accessible, or keyframe does not exist or is not aacessible, or index is invalid
MItKeyframe::TangentType outTangentType ( MStatus ReturnStatus = NULL )

Determines the type of the tangent to the curve leaving the current keyframe.

Parameters:
[out] ReturnStatus Status Code (see below).
Returns:
Type of the tangent
Status Codes:
  • MS::kSuccess Success
  • MS::kInvalidParameter Iterator holds invalid keyframe index (index >= number of keyframes) - iterator is invalid or index is invalid
  • MS::kFailure Failure querying Node - Node does not exist or is not accessible, or keyframe does not exist or is not aacessible, or index is invalid
MStatus setInTangentType ( TangentType  tangentType )

Sets the type of the tangent to the curve entering the current keyframe.

Parameters:
[in] tangentType Type to which the tangent is to be set
Returns:
Status Code (see below)
Status Codes:
  • MS::kSuccess Success
  • MS::kInvalidParameter Iterator holds invalid keyframe index (index >= number of keyframes) - iterator is invalid or index is invalid
  • MS::kFailure Failure querying Node - Node does not exist or is not accessible
MStatus setOutTangentType ( TangentType  tangentType )

Sets the type of the tangent to the curve entering the current keyframe.

Parameters:
[in] tangentType Type to which the tangent is to be set
Returns:
Status Code (see below)
Status Codes:
  • MS::kSuccess Success
  • MS::kInvalidParameter Iterator holds invalid keyframe index (index >= number of keyframes) - iterator is invalid or index is invalid
  • MS::kFailure Failure querying Node - Node does not exist or is not accessible
MStatus getTangentOut ( float &  x,
float &  y 
)

Determines the x,y value of the tangent to the curve leaving the current keyframe.

Parameters:
[out] x Delta x of the slope of the tangent
[out] y Delta y of the slope of the tangent
Returns:
Status Code (see below)
Status Codes:
  • MS::kSuccess Success
  • MS::kInvalidParameter Iterator holds invalid keyframe index (index >= number of keyframes) - iterator is invalid or index is invalid
  • MS::kFailure Failure querying Node - Node does not exist or is not accessible, or keyframe does not exist or is not aacessible, or index is invalid
MStatus getTangentIn ( float &  x,
float &  y 
)

Determines the x,y value of the tangent to the curve entering the current keyframe.

Parameters:
[out] x Delta x of the slope of the tangent
[out] y Delta y of the slope of the tangent
Returns:
Status Code (see below)
Status Codes:
  • MS::kSuccess Success
  • MS::kInvalidParameter Iterator holds invalid keyframe index (index >= number of keyframes) - iterator is invalid or index is invalid
  • MS::kFailure Failure querying Node - Node does not exist or is not accessible, or keyframe does not exist or is not aacessible, or index is invalid
bool tangentsLocked ( MStatus ReturnStatus = NULL ) const

Determines whether the tangents are locked at this keyframe.

Parameters:
[out] ReturnStatus Status Code (see below).
Returns:
  • true if the tangents are locked
  • false if the tangents are not locked
Status Codes:
  • MS::kSuccess Success
  • MS::kInvalidParameter Iterator holds invalid keyframe index (index >= number of keyframes) - iterator is invalid or index is invalid
  • MS::kFailure Failure querying Node - Node does not exist or is not accessible, or keyframe does not exist or is not aacessible, or index is invalid
MStatus setTangentsLocked ( bool  locked )

Lock or unlock the tangents at this keyframe.

Parameters:
[in] locked true if the tangents are to be locked, false otherwise
Returns:
Status Code (see below)
Status Codes:
  • MS::kSuccess Success
  • MS::kInvalidParameter Iterator holds invalid keyframe index (index >= number of keyframes) - iterator is invalid or index is invalid
  • MS::kFailure Failure querying Node - Node does not exist or is not accessible
const char * className ( ) [static]

Returns the name of this class.

Returns:
The name of this class.

MItKeyframe MItKeyframe MItKeyframe MItKeyframe MItKeyframe MItKeyframe MItKeyframe MItKeyframe MItKeyframe MItKeyframe
MItKeyframe MItKeyframe MItKeyframe MItKeyframe MItKeyframe MItKeyframe MItKeyframe MItKeyframe MItKeyframe MItKeyframe