Bookshelf Contents Previous Next Glossary Index Search

AlIKHandle

Interface to Inverse Kinematics Handles.

Synopsis

#include <AlIKHandle.h>
class AlIKHandle : public AlObject , public AlAnimatable
AlIKHandle( void );
virtual ~AlIKHandle();
virtual statusCode deleteObject();
virtual AlObject* copyWrapper() const;
virtual AlObjectType type() const;
statusCode createSingle( AlJoint*, AlJoint* );
statusCode createMulti( AlJoint*, AlJoint*,
AlIKHandleGoalType );
statusCode createSpline (AlJoint*, AlJoint*, AlCurveNode*, AlIKHandle*);
statusCode createSpline (AlJoint*, AlJoint*, AlCurveNode*);
boolean on( void ) const;
AlIKHandleSolverType solverType( void ) const;
AlIKHandleGoalType goalType( void ) const;
double weight( void ) const;
AlIKHandleRotationOrder rotationOrder( void ) const;
boolean worldOrientation( void ) const;
statusCode restRotation( double[3] ) const;
AlJoint* root( void ) const;
AlJoint* endEffector( void ) const;
AlDagNode* rootNode( void ) const;
AlDagNode* endEffectorNode( void ) const;
AlIKHandlePositionType positionType( void ) const;
AlIKHandleTwistType twistType( void ) const;
AlCurveNode* curveNode( void ) const;
boolean oneJointHandle( void ) const;
boolean touchRootHandle( void ) const;
AlIKHandlePositionType splineChainPosition( double* ) const;
AlIKHandleTwistType splineChainTwist( double* ) const;
double splineChainRoll( void ) const;
statusCode setOn( boolean );
statusCode setGoalType( AlIKHandleGoalType );
statusCode setWeight( double );
statusCode setRotationOrder( AlIKHandleRotationOrder );
statusCode setWorldOrientation( boolean );
statusCode setRestRotation( const double[3] );
statusCode assumeRestRotation( void );
statusCode setPositionType( AlIKHandlePositionType );
statusCode setTwistType ( AlIKHandleTwistType );
AlIKHandleNode* handleNode( void ) const;

Description

A skeleton is a collection of joint DAG nodes that have no particularly special behavior until IK handles are applied to them. In order to use inverse kinematics in Alias, you must create IK handles that define paths along skeletons to be constrained by IK.

An IK handle is defined by two joints. The end effector is the point on the skeleton that is free to move, and the root is the anchor point on the skeleton. When the end effector is moved, the rotations on all joints leading up to the root are constrained to provide an appropriate IK solution.

The IK handle also specifies the solver that will be used. There are two kinds of IK solvers in Alias:

Summary

AlIKHandle::AlIKHandle()

Description

Constructs an AlIKHandle wrapper object.

AlIKHandle::~AlIKHandle()

Description

Deletes an AlIKHandle wrapper object.

AlObject *AlIKHandle::copyWrapper() const

Description

An object wrapper duplicator for AlIKHandle.

AlObjectType AlIKHandle::type() const

Description

Returns the class identifier kIKHandleType;

statusCode AlIKHandle::deleteObject( void )

Description

Deletes the actual handle corresponding to this AlIKHandle.

statusCode AlIKHandle::createSingle( AlJoint* root, AlJoint* end )

Description

Builds a new single-chain IK handle when given the root and end effector joints. Single-chain IK handles are always position handles.

Note: The chain from the root to the end should be on its rest pose before the single chain IK handle is created.

Arguments

< root - the root joint of the handle

< end - the end effector joint of the handle

Return Codes

sSuccess - successful completion

sInvalidArgument - either the root or the end was not valid

sFailure - the request could not be completed

statusCode AlIKHandle::createMulti(AlJoint* root, AlJoint* end, AlIKHandleGoalType goal )

Description

Builds a new multi-IK handle, given the root and end effector nodes and the goal type of the handle. Returns statusCode, indicating whether the IK handle was successfully constructed.

Arguments

< root - the root joint of the handle

< end - the end effector joint of the handle

< tp - the solver type for the handle: kSingleChain or kMultiSolver

< goal - specifies the kind of goal to give this handle: kPositionGoal, kOrientationGoal, or kBothGoal (position and orientation)

Return Codes

sSuccess - successful completion

sInvalidArgument - one of root or end was not valid

sFailure - the request could not be completed

statusCode AlIKHandle::createSpline(AlJoint* root, AlJoint* end, AlCurveNode* curve, AlIKHandle*& rHandle)

Description

Builds a pair of new spline IK handles: master spline handle and its root spline handle. You must specify the root, end joints and the curve to be matched with. The rHandle must be a NULL AlIKHandle pointer which is to be set with an associated one-joint spline handle for 'this' handle.

A root spline handle EQUALS a one-joint handle. It can only be created when a master spline handle is created. (That is, it cannot be created separately.)

A one-joint spline handle can be set to different position types with AlIKHandlePositionType.

A master spline handle can be set to different twist types with AlIKHandleTwistType.

This function creates spline handles in default position type (kParameter) and twist type (kTwist_Linear). They can be changed later by setPositionType() and setTwistType().

Arguments

<root - the root joint of the handle

<end - the end joint of the handle

<curve - the target of the handle

<rHandle - a reference for an empty AlIKHandle pointer

When return code is sSuccess:

>rHandle - may or may not be set. If set, the rHandle is a pointer to a created root spline handle.

Return Codes

sSuccess - successful completion

sInvalidArgument - one of root or end was not valid

sFailure - the request could not be completed

statusCode AlIKHandle::createSpline( AlJoint* root, AlJoint* end, AlCurveNode* curve)

Description

Builds a master spline handle without root spline handle. Requires the root and end joints, also the curve to be matched with.

This function creates a spline handle in default position type (kParameter) and twist type (kTwist_Linear). They can be changed later by setPositionType() and setTwistType().

Arguments

< root - the root joint of the handle

< end - the end joint of the handle

< curve - the target of the handle

Return Codes

sSuccess - successful completion

sInvalidArgument - one of root or end was not valid

sFailure - the request could not be completed

boolean AlIKHandle::on( void ) const

Description

Returns whether or not this IK handle is currently enabled.

AlIKHandleSolverType AlIKHandle::solverType( void ) const

Description

Returns the IK algorithm being used on this handle, multi-solver or single chain. If the object is not valid, single chain is returned.

AlIKHandleGoalType AlIKHandle::goalType( void ) const

Description

Returns the goal type of this AlIKHandle: kPositionGoal, kOrientationGoal, or kBothGoal.

double AlIKHandle::weight( void ) const

Description

Returns the weight on this IK handle. If the AlIKHandle is invalid, or not a multi-handle, -1 is returned.

AlIKHandleRotationOrder AlIKHandle::rotationOrder( void ) const

Description

Returns the rotation order applied to this IK handle. This method only applies to single-chain IK handles.

boolean AlIKHandle::worldOrientation( void ) const

Description

Returns true if this single-chain IK handle controls its rotate_plane in world space. Returns false if this IK handle is not a single-chain handle or controls its rotate plane in local space.

statusCode AlIKHandle::restRotation( double restRot[3] ) const

Description

Returns the rest rotation of the single-chain IK handle.

Arguments

> restRot - rest rotation of the single-chain IK handle.

Return Codes

sSuccess - the rest rotation was found

sInvalidArgument - the rest rotation is null

sInvalidObject - invalid IK handle

AlJoint* AlIKHandle::root( void ) const

Description

Gets the root AlJoint in the chain referenced by this IK handle.

AlJoint* AlIKHandle::endEffector( void ) const

Description

Gets the end effector AlJoint in the chain referenced by this IK handle.

AlDagNode* AlIKHandle::rootNode( void ) const

Description

Gets the AlDagNode corresponding to the root AlJoint in the chain referenced by this IK handle.

AlDagNode* AlIKHandle::endEffectorNode( void ) const

Description

Gets the AlDagNode corresponding to the end effector AlJoint in the chain referenced by this IK handle.

AlIKHandlePositionType AlIKHandle::positionType( void ) const

Description

Returns the position type of this AlIKHandle. This method only applies to spline handles.

AlIKHandleTwistType AlIKHandle::twistType( void ) const

Description

Returns the twist type of this AlIKHandle. This method only applies to spline handles.

AlCurveNode* AlIKHandle::curveNode( void ) const

Description

Gets the curve node (AlCurveNode) defined by this spline handle. This function only applies to spline handles.

boolean AlIKHandle::oneJointHandle( void ) const

Description

Returns true if this IK handle is a spline handle and is one joint handle.

boolean AlIKHandle::touchRootHandle( void ) const

Description

Returns true if this handle is a spline handle and directly under a one-joint spline handle.

AlIKHandlePositionType AlIKHandle::splineChainPosition(double* pos) const

Description

Returns the spline chain position in curve space.

AlIKHandleTwistType AlIKHandle::splineChainTwist(double *twist) const

Description

Returns the spline handle twist angle and type.

double AlIKHandle::splineChainRoll() const

Description

Returns the roll angle of a spline handle.

statusCode AlIKHandle::setOn( boolean f )

Description

Sets the IK handle on.

statusCode AlIKHandle::setGoalType( AlIKHandleGoalType tp )

Description

Sets the goal type of this IK handle to kPositionGoal, kOrientationGoal or kBothGoal. This method can only be used on multi-handles.

statusCode AlIKHandle::setWeight( double d )

Description

Sets the weight of this AlIKHandle to the passed-in value. Note that this can only be done for AlIKHandles that have a solver type of kMultiSolver.

statusCode AlIKHandle::setRotationOrder( AlIKHandleRotationOrder ro )

Description

Sets the rotation order of this IK handle to the passed-in value. This method only applies to single-chain IK handles.

statusCode AlIKHandle::setWorldOrientation( boolean set )

Description

If set to true, sets this single-chain IK handle to control its rotate-plane in world space. Otherwise, the rotate-plane is controlled in local space. This method only applies to single-chain IK handles.

statusCode AlIKHandle::setRestRotation( const double restRot[3] )

Description

Sets a new rest rotation for the single-chain IK handle.

Arguments

< restRot - rest rotation for this single-chain IK handle.

Return Codes

sSuccess - the rest rotation was set

sInvalidArgument - the value of the rest rotation was null

sInvalidObject - the single-chain IK handle is not valid

statusCode AlIKHandle::assumeRestRotation( void )

Description

Returns the single-chain IK handle to its rest pose.

Return Codes

sSuccess - the handle was returned to its rest pose

sInvalidObject - the single-chain IK handle is not valid

statusCode AlIKHandle::setPositionType( AlIKHandlePositionType type )

Description

Sets this spline handle's position type. This method only applies to root spline handles (one-joint handles).

statusCode AlIKHandle::setTwistType( AlIKHandleTwistType type )

Description

Sets this spline handle's twist type. This method only applies to master spline handles.

AlIKHandleNode* AlIKHandle::handleNode( void ) const

Description

Returns the IK handle node associated with this IK handle. Returns NULL if there is no attached IK handle node.



Bookshelf Contents Previous Next Glossary Index Search

[email protected]
Copyright © 1998, Alias|Wavefront, a division of Silicon Graphics Limited. All rights reserved.