//--------------------------------------------------- // Retrieve the bind pose for a controller/joint std::pair // MMatrix DagHelper::getBindPoseInverse ( const MObject& controller, const MObject& influence ) { MStatus status; if ( controller.apiType() == MFn::kSkinClusterFilter ) { MFnSkinCluster controllerFn ( controller ); // Find the correct index for the pre-bind matrix uint index = controllerFn.indexForInfluenceObject ( MDagPath::getAPathTo ( influence ), &status ); if ( status != MStatus::kSuccess ) return MMatrix::identity; MPlug preBindMatrixPlug = controllerFn.findPlug ( "bindPreMatrix", &status ); preBindMatrixPlug = preBindMatrixPlug.elementByLogicalIndex ( index, &status ); if ( status != MStatus::kSuccess ) return MMatrix::identity; // Get the plug's matrix MMatrix ret; if ( !DagHelper::getPlugValue ( preBindMatrixPlug, ret ) ) return MMatrix::identity; return ret; } else if ( controller.apiType() == MFn::kJointCluster ) { MMatrix ret; DagHelper::getPlugValue ( influence, "bindPose", ret ); return ret.inverse(); } else return MMatrix::identity; }