Added rigid binding support
This commit is contained in:
parent
6967dede19
commit
56ac220fa8
|
|
@ -65,6 +65,8 @@
|
|||
#include <maya/MGlobal.h>
|
||||
#include <maya/MAnimUtil.h>
|
||||
#include <maya/MFnSkinCluster.h>
|
||||
#include <maya/MFnWeightGeometryFilter.h>
|
||||
#include <maya/MFnIkJoint.h>
|
||||
#include <maya/MFnSingleIndexedComponent.h>
|
||||
#include <maya/MFnDoubleIndexedComponent.h>
|
||||
#include <maya/MFnBlendShapeDeformer.h>
|
||||
|
|
@ -2324,6 +2326,56 @@ get_vertex_weights(const MDagPath &dag_path, const MFnMesh &mesh,
|
|||
}
|
||||
}
|
||||
}
|
||||
} else if (c_node.hasFn(MFn::kWeightGeometryFilt)) {
|
||||
// We've found the joint cluster handle. (rigid Binding)
|
||||
//
|
||||
MFnWeightGeometryFilter cluster(c_node, &status);
|
||||
if (!status) {
|
||||
status.perror("MFnWeightGeometryFilter constructor");
|
||||
return false;
|
||||
}
|
||||
|
||||
MPlug matrix_plug = cluster.findPlug("matrix");
|
||||
if (!matrix_plug.isNull()) {
|
||||
MPlugArray matrix_pa;
|
||||
matrix_plug.connectedTo(matrix_pa, true, false, &status);
|
||||
if (!status) {
|
||||
status.perror("Can't find connected Joint");
|
||||
} else {
|
||||
MObject jointObj = matrix_pa[0].node();
|
||||
MFnIkJoint jointFn = MFnIkJoint(jointObj, &status);
|
||||
if (!status) {
|
||||
status.perror("Can't find connected JointDag");
|
||||
} else {
|
||||
joints.clear();
|
||||
MDagPath joint_dag_path = MDagPath();
|
||||
status = jointFn.getPath(joint_dag_path);
|
||||
if (!status) {
|
||||
status.perror("MFnIkJoint::dagPath");
|
||||
} else {
|
||||
MayaNodeDesc *joint_node_desc = _tree.build_node(joint_dag_path);
|
||||
EggGroup *joint = _tree.get_egg_group(joint_node_desc);
|
||||
joints.push_back(joint);
|
||||
|
||||
// Now use a component object to retrieve all of the weight
|
||||
// data in one API call.
|
||||
MFnSingleIndexedComponent sic;
|
||||
MObject sic_object = sic.create(MFn::kMeshVertComponent);
|
||||
sic.setCompleteData(mesh.numVertices());
|
||||
|
||||
status = cluster.getWeights(dag_path, sic_object,
|
||||
weights);
|
||||
if (!status) {
|
||||
status.perror("MFnWeightGeometryFilter::getWeights");
|
||||
} else {
|
||||
// We've got the weights and the set of objects. That's all
|
||||
// we need.
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
it.next();
|
||||
|
|
|
|||
Loading…
Reference in New Issue