AlParamAction
Basic interface to derived class of actions for parameter curve actions.
Synopsis
#include <AlParamAction.h>
class AlParamAction : public AlAction
AlParamAction();
virtual ~AlParamAction();
virtual AlObject* copyWrapper() const;
virtual AlObjectType type() const;
AlKeyframe* firstKeyframe() const;
AlKeyframe* lastKeyframe() const;
statusCode addKeyframe( double, double, AlKeyframe *&, boolean = TRUE, AlTangentType = kTangentFlat, AlTangentType = kTangentFlat );
statusCode addKeyframe( double, double, AlKeyframe &, boolean = TRUE, AlTangentType = kTangentFlat, AlTangentType = kTangentFlat );
statusCode addKeyframe( double, double, boolean = TRUE, AlTangentType = kTangentFlat, AlTangentType = kTangentFlat );
int numberOfKeyframes() const;
statusCode applyIteratorToKeyframes( AlIterator*, int& );
statusCode addKeyframeRange( int, double*, double*, boolean = TRUE, AlTangentType* = NULL, AlTangentType* = NULL );
statusCode deleteKeyframeRange( double, double );
Description
An AlParamAction is derived from an AlAction. This particular action has a list of AlKeyframes which are CVs on a Poon-Ross spline. This spline is basically a Hermite-linear spline. That is, it is a Hermite in y (the vertical axis) and a linear in x (the horizontal axis).
In order to create an AlParamAction, you must have at least one valid, created AlKeyframe that will be the first keyframe of the action. After the AlParamAction is created, you can add other keyframes to the AlParamAction. Note that two AlKeyframes cannot have the same location. If you add a keyframe to the action that has the same location as an existing keyframe of the action, the existing keyframe will be deleted. Since an AlKeyframe is created at (0, 0), you cannot create a bunch of AlKeyframes, add them to the AlParamAction, and then modify their locations later, because the AlParamAction will only have one keyframe (the others will have been deleted as each successive keyframe with the same location is added to the AlParamAction). You must set the location of the AlKeyframe before adding it to the AlParamAction.
If you copy an AlParamAction, all the keyframes (and the keyframes’ streams) will also be copied. If you delete an AlParamAction, all its Keyframes will be deleted.
AlParamAction::AlParamAction()
Description
Constructs an AlParamAction wrapper object. Use the create() method to initialize the AlParamAction.
AlParamAction::~AlParamAction()
Description
Deletes an AlParamAction wrapper object.
AlObject* AlParamAction::copyWrapper() const
Description
Returns a duplicate of this wrapper object, pointing to the same object.
AlObjectType AlParamAction::type() const
Description
Returns the class identifier ’kParamActionType’.
AlParamAction* AlParamAction::asParamActionPtr()
Description
This virtual function returns a non-null pointer to itself, indicating that it is safe to cast to an object of this class.
AlKeyframe* AlParamAction::firstKeyframe() const
Description
Returns the first keyframe of this parameter curve action.
AlKeyframe* AlParamAction::lastKeyframe() const
Description
Returns the last keyframe of this parameter curve action.
statusCode AlParamAction::addKeyframe( double location, double value, AlKeyframe &kf, boolean recompute, AlTangentType intan, AlTangentType outtan )
Description
Similar to addKeyframe, but returns the newly created AlKeyframe in ’kf’. This avoids the creation and deletion of wrappers when creating many keys.
An example loop may look like
AlKeyframe key; for( int i =0; i < 100; i++ ) { param->addKeyframe( i, 1, key, ....) }
Arguments
< location - the time value for the keyframe
< value - the value of the keyframe
> Alkeyframe &kf - the resulting keyframe
< intan - the in tangent for the keyframe
< outtan - the out tangent for the keyframe
< recompute - recompute the tangents of neighboring keyframes
Return Codes
sSuccess - key frame added
sInvalidArgument - kf was NULL
sFailure - key frame not added
statusCode AlParamAction::addKeyframe( double location, double value, AlKeyframe *& kf, boolean recompute, AlTangentType intan, AlTangentType outtan )
Description
Similar to addKeyframe, but allocates a wrapper and returns the newly created AlKeyframe. It is up to you to delete these wrappers. Use this overloaded form if you wish to have the wrapper created for you.
Below is an example code fragment
Alkeyframe *key1, *key2, *key3; param->addKeyframe( 0, 1, key1, .... param->addKeyframe( 1, 1, key2, .... param->addKeyframe( 2, 1, key3, .... ... delete key1; delete key2; delete key3;
Arguments
< location - the time value for the keyframe
< value - the value of the keyframe
> Alkeyframe* &kf - the resulting keyframe
< intan - the in tangent for the keyframe
< outtan - the out tangent for the keyframe
< recompute - recompute the tangents of neighboring keyframes
Return Codes
sSuccess - key frame added
sInvalidArgument - kf was NULL
sFailure - key frame not added
statusCode AlParamAction::addKeyframe( double location, double value, boolean recompute, AlTangentType intan, AlTangentType outtan )
Description
Adds a keyframe to the parameter curve’s list of keyframes. If the parameter curve already has another keyframe at the same location as this keyframe, then the existing keyframe at this location will be deleted and replaced with this keyframe. If this object does not yet reference an actual Parameter Curve, a new curve will be created.
Arguments
< location - the time value for the keyframe
< value - the value of the keyframe
< intan - the in tangent for the keyframe
< outtan - the out tangent for the keyframe
< recompute - recompute the tangents of neighboring keyframes
Return Codes
sSuccess - operation completed normally
sFailure - operation failed to complete normally
sInsufficientMemory - there wasn’t enough memory to complete the operation
int AlParamAction::numberOfKeyframes() const
Description
Returns the number of keyframes in this action, or -1 if the call fails.
statusCode AlParamAction::applyIteratorToKeyframes( AlIterator* iter, int &rc )
Description
Applies the given AlIterator to all keyframes in the action. The second argument will be set to the return value of the last application of the iterator’s function. See the AlIterator class for more information.
Arguments
< iter - the iterator to be applied to each keyframe
> rc - return value of the last application of the iterator
Return Codes
sSuccess - the application of the iterator terminated normally
sFailure - the application of the iterator terminated abnormally
sInvalidArgument - the iterator was NULL
sInvalidObject - the action was invalid
statusCode AlParamAction::deleteKeyframeRange( double minValue, double maxValue )
Description
Deletes all keyframes whose "time"s are greater or equal to the "minValue" given, and less than or equal to the "maxValue" given.
Arguments
< minValue - minimum time value to delete keyframes from
< maxValue - maximum time value to delete keyframes up to
Return Codes
sSuccess - operation completed normally
sFailure - operation failed to complete normally
sInvalidObject - the action was invalid
statusCode AlParamAction::addKeyframeRange( int size, double location[], double value[], boolean recompute, AlTangentType intan[], AlTangentType outtan[])
Description
Adds a block of keyframes to the parameter curve's list keyframes. If the parameter curve already has a keyframe at the same location as one of the added keyframes, then the method will fail. If this object does not yet reference an actual Parameter Curve, a new curve will be created.If intan and outan are NULL, kTangentFlat is assumed.
Arguments
< size - size of input arrays
< location - array of keyframe locations (time values)
< value - array of keyframe values
< recompute - recompute tangents of neighboring keyframes
< intan - array of the in-tangents for keyframes
< outtan - array of the out-tangents for keyframes
Return Codes
sSuccess - operation completed normally
sInvalidArgument - one of the arguments was NULL or invalid
sInsufficientMemory - ran out of memory
sFailure - could not create action
sObjectAlreadyPresent - a keyframe already exists in given location