Export the skeletons

Not really tested though
This commit is contained in:
FakeShemp
2015-12-15 11:49:59 +01:00
parent 60b3ce89b2
commit 1689370356
4 changed files with 79 additions and 15 deletions
+53 -9
View File
@@ -1,11 +1,55 @@
#include "Skeleton.h"
//std::vector<SkeletonNode>* Skeleton::DoIt()
//{
// MItDependencyNodes jointIt(MFn::kJoint);
//
// for (; !jointIt.isDone(); jointIt.next())
// {
// //MFnDependencyNode
// }
//}
std::vector<SkeletonNode>* Skeleton::DoIt()
{
MItDependencyNodes jointIt(MFn::kJoint);
SkeletonNode SkeletonStorage;
while (!jointIt.isDone()) {
MFnDependencyNode SkeletonFnDN(jointIt.thisNode());
MFnTransform TransformNode(SkeletonFnDN.object());
Joint NewJoint;
if (MFnDependencyNode(TransformNode.parent(0)).name() == "world") {
if (SkeletonStorage.Joints.size() != 0) {
m_AllSkeletons.push_back(SkeletonStorage);
SkeletonStorage.Joints.clear();
SkeletonStorage.Name.clear();
}
SkeletonStorage.Name = TransformNode.name().asChar();
NewJoint.ParentIndex = -1; // This joint is root
}
else {
auto it = std::find(m_Hierarchy.begin(), m_Hierarchy.end(), TransformNode.parent(0));
if (it != m_Hierarchy.end()) {
NewJoint.ParentIndex = it - m_Hierarchy.begin();
}
else {
MGlobal::displayError(MString() + "Could not find joint parent for: " + TransformNode.name());
}
}
m_Hierarchy.push_back(TransformNode.object());
NewJoint.Name = TransformNode.name().asChar();
MMatrix Matrix = TransformNode.transformationMatrix();
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
NewJoint.OffsetMatrix[i][j] = Matrix.matrix[i][j];
}
}
SkeletonStorage.Joints.push_back(NewJoint);
jointIt.next();
}
m_AllSkeletons.push_back(SkeletonStorage);
return &m_AllSkeletons;
}