MItKeyframe Class Reference
[OpenMayaAnim - API module for animation]

#include <MItKeyframe.h>

List of all members.


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.

Public Types

enum  TangentType {
  kTangentGlobal = 0, kTangentFixed, kTangentLinear, kTangentFlat,
  kTangentSmooth, kTangentStep, kTangentSlow, kTangentFast,
  kTangentClamped, kTangentPlateau, kTangentStepNext
}
 < Tangent types. More...

Public Member Functions

 MItKeyframe (MObject &animCurveNode, MStatus *ReturnStatus=NULL)
 ~MItKeyframe ()
MStatus reset (MObject &animCurveNode)
MStatus reset ()
MStatus next ()
bool isDone (MStatus *ReturnStatus=NULL)
MTime time (MStatus *ReturnStatus=NULL)
MStatus setTime (MTime time)
double value (MStatus *ReturnStatus=NULL)
MStatus setValue (double value)
TangentType inTangentType (MStatus *ReturnStatus=NULL)
TangentType outTangentType (MStatus *ReturnStatus=NULL)
MStatus setInTangentType (TangentType tangentType)
MStatus setOutTangentType (TangentType tangentType)
MStatus getTangentOut (float &x, float &y)
MStatus getTangentIn (float &x, float &y)
bool tangentsLocked (MStatus *ReturnStatus=NULL) const
MStatus setTangentsLocked (bool locked)


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.


Constructor & Destructor Documentation

MItKeyframe::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

MItKeyframe::~MItKeyframe (  ) 

Class Destructor

No additional action.


Member Function Documentation

MStatus MItKeyframe::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 MItKeyframe::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 MItKeyframe::next (  ) 

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

Returns:
Status Code (see below)
Status Codes:

bool MItKeyframe::isDone ( MStatus ReturnStatus = NULL  ) 

Indicates that the iterator is at the last keyframe on the Anim Curve Node to which the iterator is attached (index = number of keyframes - 1).

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

MTime MItKeyframe::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 MItKeyframe::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 MItKeyframe::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 MItKeyframe::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 MItKeyframe::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 MItKeyframe::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 MItKeyframe::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 MItKeyframe::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 MItKeyframe::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 MItKeyframe::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 MItKeyframe::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 MItKeyframe::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


Autodesk® Maya® 2009 © 1997-2008 Autodesk, Inc. All rights reserved. Generated with doxygen 1.5.6