#include
<MPxIkSolverNode.h>
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.
- compute
- getInternalValue
- setInternalValue
- legalConnection
- legalDisconnection
- connectionMade
- connectionBroken
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:
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.
Constructor & Destructor Documentation
MPxIkSolverNode::~MPxIkSolverNode |
( |
|
) |
[virtual] |
MPxIkSolverNode::MPxIkSolverNode |
( |
|
) |
[protected] |
Member Function Documentation
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
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
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:
-
- Returns:
- Status code
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 |
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:
-
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.