AlAction
 
 
 

Basic interface to Alias action.

Synopsis

#include <AlAction.h>
class AlAction : public AlObject
virtual	~AlAction();
virtual statusCode	deleteObject();
virtual AlObjectType	type() const;
virtual const char*	name() const;
virtual statusCode	setName(const char *);
const char*	comment() const;
AlActionExtrapType	extrapTypePRE() const;
AlActionExtrapType	extrapTypePOST() const;
statusCode	setComment(const char *);
statusCode	setExtrapTypePRE(AlActionExtrapType);
statusCode	setExtrapTypePOST(AlActionExtrapType);
AlAction*	copy() const;
statusCode	copyD();
double	eval( double, AlTripleComponent = kX_COMPONENT ) const;
int	numChannelReferences() const;
AlChannel*	channelReference(const int) const;

Description

AlAction is the base class for an Alias action. An action is an entity that will map time to a value. In Alias, there are two types of actions: parameter curve actions, represented by the derived class AlParamAction, and motion path actions, represented by the derived class AlMotionAction.

You can create new AlActions by creating an AlParamAction or an AlMotionAction. Existing actions can be accessed either through the global list of actions (AlUniverse::firstAction(), AlUniverse::nextAction()) or through the list of actions that a channel uses to animate a field of an item (AlChannel::appliedAction()). If you delete an action, it may cause other classes to be deleted (for example, AlKeyframe, and AlChannel if the action was the base action of a channel).

AlAction::~AlAction()

Description

Deletes an AlAction wrapper object.

statusCode AlAction::deleteObject()

Description

Deletes an action. The action is removed from any channel that uses it as a time warp. If the action is a base action of a channel, the channel is also deleted.

Return Codes

sSuccess - the data for the action was successfully deleted

sInvalidObject - the action was not valid the data may have been deleted already)

AlObjectType AlAction::type() const

Description

Returns the class identifier ’kActionType’.

const char* AlAction::name() const

Description

Returns the name of the action.

statusCode AlAction::setName(const char *newName)

Description

Changes the name of the action. If the given name is not a unique name in the universe, then a unique name is generated based on the given name and this name is given to the action. In this case, a status code of sNameChangedToUniqueOne is returned.

Arguments

< newName - new name for action

Return Codes

sSuccess - name was changed to newName

sInvalidArgument - the given string is NULL

sInvalidObject - the action is not valid

sNameChangedToUniqueOne - name was changed to be unique

const char* AlAction::comment() const

Description

Returns the comment on the action.

statusCode AlAction::setComment(const char *newComment)

Description

Makes a copy of ’newComment’ and replaces the existing comment on the action with this new comment.

Arguments

< newComment - the new comment to assign to the action

Return Codes

sSuccess - action’s comment was changed to newComment

sInvalidArgument - newComment was NULL

sInvalidObject - this action is not valid

AlActionExtrapType AlAction::extrapTypePRE() const

Description

Gets the out-of-range, or extrapolation to infinite type of the action before its defined range. If the type could not be retrieved, kEXTRAP_INVALID is returned.

statusCode AlAction::setExtrapTypePRE(AlActionExtrapType extrapType)

Description

Sets the out-of-range, or extrapolation to infinite type of the action before its defined range to the given extrapolation type.

Arguments

< extrapType - extrapolation type to set for action before defined range

Return Codes

sSuccess - the extrapolation type was successfully determined

sInvalidObject - the action was not valid

sInvalidArgument - the given extrapolation type was not valid

AlActionExtrapType AlAction::extrapTypePOST() const

Description

Returns the out-of-range, or extrapolation to infinite type of the action after its defined range. If the type can not be retrieved, kEXTRAP_INVALID is returned.

statusCode AlAction::setExtrapTypePOST(AlActionExtrapType extrapType)

Description

Sets the out-of-range, or extrapolation to infinite type of the action after its defined range to the given extrapolation type.

Arguments

< extrapType - extrapolation type to set for action after defined range

Return Codes

sSuccess - the extrapolation type was successfully determined

sInvalidObject - the action was not valid

sInvalidArgument - the given extrapolation type was not valid

AlAction* AlAction::copy() const

Description

Makes a copy of this action and returns the copy. If the copy fails, NULL is returned. Note that this method copies the action NOT the wrapper object.

statusCode AlAction::copyD()

Description

Makes a copy of the action (not the wrapper) and modifies the wrapper to point to the new action. This method is faster than AlAction::copy() above.

Return Codes

sSuccess - the action was successfully copied

sInvalidObject - the action was not valid

sFailure - the action was not valid or the copy failed

double AlAction::eval( double time, AlTripleComponent compo ) const

Description

Evaluates this action at the given time, and returns the value of the action at that time. If the action is an AlMotionAction, then you must specify which component of the resulting (x,y,z) value to retrieve using the optional second argument. If the action is not valid, 0.0 is returned.

Evaluation of an AlParamAction is as follows

An animation parameter curve is a "Poon-Ross" spline (developed by Angus Poon and Dave Ross). 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). If we call this spline C(t) = (x(t), y(t)), then we see that it is fairly straightforward to compute for the case when x = T since x(t) = t. So we would get C(t) for x = T is (T, y(T)). To compute a point on a curve segment C(t) (which is bounded by the CVs (t1, y1), (t2, y2) and has tangents m1 and m2 at the start and end of the segment) at t = T, we first make the mapping

T’ = (T - t1) / (t2 - t1) 

so that t is in the range [0, 1]. We then get the y value off of the curve segment using the standard computation

C(T) = [T’^3 T’^2 T’ 1] * H *     | y1 | | y2 |                                    | m1 | | m2 | 

where H is the hermite basis matrix.

Arguments

< time - the time at which to evaluate the action

< compo - which component to get, for motion actions

double AlChannel::sample( void ) const

Description

Samples the channel without actually evaluating it. The value of the current parameter is read without any updates being done. The channel is sampled at the current time. This method is faster than eval(), and is useful in cases where eval() has already been called, either explicitly or through a viewFrame operation.

If this method succeeds, it returns the value of the channel at the current frame. If it fails, 0.0 is returned.

int AlAction::numChannelReferences() const

Description

Returns the number of channels that use this action. If 0 is returned, this action is considered non-referenced. Note that if one channel uses this action 2 times, this is counted as 2 references. Also note that if the action is not valid -1 is returned.

AlChannel* AlAction::channelReference(const int n) const

Description

Returns the ’n’th AlChannel that references this AlAction. If ’n’ is less than 1, or greater than the number of channels that reference this action (as returned by AlAction::numChannelReferences()), then NULL is returned. The list of channels is not in any particular order.

Arguments

< n - the index between 1 and numChannelReferences() of the channel reference to return.