MPxIkSolverNode Class Reference
[OpenMayaAnim - API module for animationProxy classes]

#include <MPxIkSolverNode.h>
Inheritance diagram for MPxIkSolverNode:
Inheritance graph
[legend]
Collaboration diagram for MPxIkSolverNode:
Collaboration graph
[legend]

List of all members.


Detailed Description

Base class for user defined IK solvers.

This is the base class for writing user-defined IK solvers. Users must at least override the following methods in order to write a solver:

Note that the following virtual methods (declared in MPxNode) are irrelevant for the MPxIkSolverNode. If these methods are overridden in a class derived from MPxIkSolverNode, they will be ignored. A creator method is necessary to return an instance of the user solver:
    userSolver::creator() {
        return new userSolver;
    }

In order to create and register the solver, execute the mel command:

    createNode userSolver;

Once the solver is registered it can be assigned to IK handles and its solve methods will be called in the same manner as the solvers within Maya.

Examples:

simpleSolverNode.cpp.


Public Member Functions

virtual  ~MPxIkSolverNode ()
virtual MPxNode::Type  type () const
virtual MStatus  preSolve ()
virtual MStatus  doSolve ()
virtual MStatus  postSolve (MStatus)
virtual MString  solverTypeName () const
bool  rotatePlane (MStatus *ReturnStatus=NULL) const
MStatus  setRotatePlane (bool rotatePlane)
bool  singleChainOnly (MStatus *ReturnStatus=NULL) const
MStatus  setSingleChainOnly (bool singleChainOnly)
bool  positionOnly (MStatus *ReturnStatus=NULL) const
MStatus  setPositionOnly (bool positionOnly)
bool  supportJointLimits (MStatus *ReturnStatus=NULL) const
MStatus  setSupportJointLimits (bool supportJointLimits)
bool  uniqueSolution (MStatus *ReturnStatus=NULL) const
MStatus  setUniqueSolution (bool uniqueSolution)
virtual bool  isSingleChainOnly () const
  This method is obsolete.
virtual bool  isPositionOnly () const
  This method is obsolete.
virtual bool  hasJointLimitSupport () const
  This method is obsolete.
virtual bool  hasUniqueSolution () const
  This method is obsolete.
virtual bool  groupHandlesByTopology () const
  This method is obsolete.
virtual MStatus  setFuncValueTolerance (double tolerance)
virtual MStatus  setMaxIterations (int value)
MIkHandleGroup handleGroup () const
virtual void  setHandleGroup (MIkHandleGroup *)
const MMatrix toWorldSpace () const
const MMatrix toSolverSpace () const
double  funcValueTolerance () const
int  maxIterations () const
virtual void  snapHandle (MObject &handle)

Protected Member Functions

MStatus  getJointAngles (MDoubleArray &) const
  This method is not available in Python.
MStatus  setJointAngles (const MDoubleArray &)
  This method is not available in Python.
void  setToRestAngles ()
  This method is not available in Python.
  MPxIkSolverNode ()

Constructor & Destructor Documentation

MPxIkSolverNode::~MPxIkSolverNode (  )  [virtual]

Destructor.

MPxIkSolverNode::MPxIkSolverNode (  )  [protected]

Constructor.


Member Function Documentation

MPxNode::Type MPxIkSolverNode::type (  )  const [virtual]

This method returns the type of the node. This method should not be overridden by the user. It will return MPxNode::kIkSolverNode.

Returns:
The type of node
Status Codes:

Reimplemented from MPxNode.

MStatus MPxIkSolverNode::preSolve (  )  [virtual]

This method is called before doSolve. Users should override this method if there is any preprocessing that needs to be done before solving..

Returns:
The status code which indicates if the pre-processing was successful

MStatus MPxIkSolverNode::doSolve (  )  [virtual]

This is where the main solving takes place. The user must override this method.

The purpose of this method is to calculate joint angles in a skeleton based upon the position of the end effector of the handle associated with this solver.

Returns:
The status code which indicates if the solver was successful
Examples:

MStatus MPxIkSolverNode::postSolve ( MStatus  stat  )  [virtual]

This method is called after doSolve has finished. The user should override this method if there are any post calculations to be done.

The status argument indicates whether doSolve was successful.

Parameters:
[out]  stat  The status returned from doSolve
Returns:
Status code to indicate whether the post calculations were successful

MString MPxIkSolverNode::solverTypeName (  )  const [virtual]

This method returns the type name of the solver. The user must override this method in order for the solver to be identifiable when it is registered.

Once the solver is registered, the type name can be used to assign the solver to an IK handle.

Returns:
The type name of this solver
Examples:

bool MPxIkSolverNode::rotatePlane ( MStatus ReturnStatus = NULL  )  const

This method indicates whether this solver supports the rotate plane. Solvers that support the rotate plane allow the user to manipulate the IK handle's pole vector with the rotate plane manipulators.

Returns:
Boolean value: true if the solver supports the rotate plane, false otherwise.
Status Codes:

MStatus MPxIkSolverNode::setRotatePlane ( bool  rotatePlane  ) 

This method sets whether or not this solver supports the rotate plane. Solvers that support the rotate plane allow the user to manipulate the IK handle's pole vector with the rotate plane manipulators.

Parameters:
[in]  rotatePlane  whether or not the solver supports the rotate plane
Returns:
Status code
Status Codes:

bool MPxIkSolverNode::singleChainOnly ( MStatus ReturnStatus = NULL  )  const

This method indicates whether this solver is a single chain solver. Single chain solvers are solvers which act on one handle only, i.e. the handle groups have only one handle if they are for single chain solvers.

Returns:
Boolean value: true if the solver is a single chain solver, false otherwise.
Status Codes:

MStatus MPxIkSolverNode::setSingleChainOnly ( bool  singleChainOnly  ) 

This method sets whether or not this solver is a single chain solver. Single chain solvers are solvers which act on one handle only, i.e. the handle groups have only one handle if they are for single chain solvers.

Parameters:
[in]  singleChainOnly  whether or not the solver is a single chain solver
Returns:
Status code
Status Codes:

bool MPxIkSolverNode::positionOnly ( MStatus ReturnStatus = NULL  )  const

Indicates whether the ik solution is dependent on the ikHandle position only or also uses the orientation.

Returns:
Boolean value: true if the solver does not support handle orientation, false otherwise
Status Codes:

MStatus MPxIkSolverNode::setPositionOnly ( bool  positionOnly  ) 

Sets whether or not the solver supports handle orientation.

Parameters:
[in]  positionOnly  whether or not the solver is positionOnly
Returns:
Status code
Status Codes:

bool MPxIkSolverNode::supportJointLimits ( MStatus ReturnStatus = NULL  )  const

This method indicates whether the solver supports limits on joint angles.

Returns:
Boolean value. true if the solver supports limits on joint angles, false otherwise.
Status Codes:

MStatus MPxIkSolverNode::setSupportJointLimits ( bool  supportJointLimits  ) 

This method sets whether or not the solver supports limits on joint angles.

Parameters:
[in]  supportJointLimits  whether or not the solver supports joint limits
Returns:
Status code
Status Codes:

bool MPxIkSolverNode::uniqueSolution ( MStatus ReturnStatus = NULL  )  const

This method indicates whether the solver provides a unique solution.

Returns:
Boolean value: true if the solver provides a unique solution, false otherwise.
Status Codes:

MStatus MPxIkSolverNode::setUniqueSolution ( bool  uniqueSolution  ) 

This method sets whether or not the solver provides a unique solution.

Parameters:
[in]  uniqueSolution  whether or not the solver provides a unique solution
Returns:
Status code
Status Codes:

bool MPxIkSolverNode::isSingleChainOnly (  )  const [virtual]

This method is obsolete.

Deprecated:
This method indicates whether this solver is a single chain solver. Single chain solvers are solvers which act on one handle only, i.e. the handle groups have only one handle if they are for single chain solvers.
Returns:
Boolean value true if this is a single chain solver, false otherwise.

bool MPxIkSolverNode::isPositionOnly (  )  const [virtual]

This method is obsolete.

Deprecated:
Indicates whether the solver supports handle orientation. This method must be overriden to reflect the users solver.
Returns:
Boolean value true if solver does not support handle orientation, false otherwise.

bool MPxIkSolverNode::hasJointLimitSupport (  )  const [virtual]

This method is obsolete.

Deprecated:
This method indicates whether the solver supports limits on joint angles. This method must be overriden to reflect the users solver.
Returns:
Boolean value true if solver supports joint limits, false otherwise.

bool MPxIkSolverNode::hasUniqueSolution (  )  const [virtual]

This method is obsolete.

Deprecated:
This method indicates whether the solver provides a unique solution. This method must be overriden to reflect the users solver.
Returns:
Boolean value true if solver has a unique solution, false otherwise.

bool MPxIkSolverNode::groupHandlesByTopology (  )  const [virtual]

This method is obsolete.

Deprecated:
Indicates whether the IK system should group handles according to skeletal topology. This method must be overriden to reflect the users solver.
Returns:
Boolean value true if solver hgroups handles by topology, false otherwise.

MStatus MPxIkSolverNode::setFuncValueTolerance ( double  tolerance  )  [virtual]

Set the error value for this solver. The user can override this if any other calcluations should be done here.

Parameters:
[in]  tolerance  Error value
Returns:
Status code

MStatus MPxIkSolverNode::setMaxIterations ( int  value  )  [virtual]

Set the maximum iterations for a solution by this solver. The user can override this if any other calcluations should be done here.

Parameters:
[in]  value  value to set
Returns:
Status code

MIkHandleGroup * MPxIkSolverNode::handleGroup (  )  const

Returns the handle group for this solver. The handle group provides access to handles associated with the solver.

Returns:
A pointer to the IK handle group for this solver

void MPxIkSolverNode::setHandleGroup ( MIkHandleGroup group  )  [virtual]

Set the handle group of this solver.

Parameters:
[in]  group  The handle group to be set

const MMatrix * MPxIkSolverNode::toWorldSpace (  )  const

Returns the world space matrix for this solver.

Returns:
The world space matrix

const MMatrix * MPxIkSolverNode::toSolverSpace (  )  const

Returns the local space matrix for this solver.

Returns:
The local space matrix

double MPxIkSolverNode::funcValueTolerance (  )  const

Return the error value for this solver.

Returns:
The error value

int MPxIkSolverNode::maxIterations (  )  const

Return the the maximum nuber of itertations for a solution by this solver.

Returns:
The maximum number of iterations

void MPxIkSolverNode::snapHandle ( MObject handle  )  [virtual]

This function positions the handle at the end effector position. The user can override this method.

Parameters:
[in]  handle  handle to be set

MStatus MPxIkSolverNode::getJointAngles ( MDoubleArray angles  )  const [protected]

This method is not available in Python.

Returns the joint angles. Use MPxIkSolverNode::_getJointAngles in scripts.

Parameters:
[out]  angles  The array of doubles to hold the angles.
Returns:
Status code
Status Codes:

MStatus MPxIkSolverNode::setJointAngles ( const MDoubleArray angles  )  [protected]

This method is not available in Python.

Set joint angles to the given values. Use MPxIkSolverNode::_setJointAngles in scripts.

Parameters:
[in]  angles  The array of angles to set the joints to.
Returns:
Status code
Status Codes:
  • MS::kSucces the joint angles were set
  • MS::kFailure the joint angles were not set

void MPxIkSolverNode::setToRestAngles (  )  [protected]

This method is not available in Python.

Sets all joints to thier prefered orientations. Use MPxIkSolverNode::_setToRestAngles in scripts.


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