Browse Source

Added joint animation conversion

Gyedo Jeon 17 years ago
parent
commit
ff30a1eb7e
1 changed files with 256 additions and 35 deletions
  1. 256 35
      pandatool/src/mayaegg/mayaEggLoader.cxx

+ 256 - 35
pandatool/src/mayaegg/mayaEggLoader.cxx

@@ -65,6 +65,7 @@
 #include <maya/MTransformationMatrix.h>
 #include <maya/MTransformationMatrix.h>
 #include <maya/MFnIkJoint.h>
 #include <maya/MFnIkJoint.h>
 #include <maya/MFnSkinCluster.h>
 #include <maya/MFnSkinCluster.h>
+#include <maya/MFnAnimCurve.h>
 #include "post_maya_include.h"
 #include "post_maya_include.h"
 
 
 #include "mayaEggLoader.h"
 #include "mayaEggLoader.h"
@@ -73,7 +74,7 @@ class MayaEggMesh;
 class MayaEggJoint;
 class MayaEggJoint;
 class MayaEggTex;
 class MayaEggTex;
 
 
-class MayaAnimData;
+class MayaAnim;
 
 
 NotifyCategoryDeclNoExport(mayaloader);
 NotifyCategoryDeclNoExport(mayaloader);
 NotifyCategoryDef(mayaloader, "");
 NotifyCategoryDef(mayaloader, "");
@@ -92,10 +93,11 @@ public:
   MayaEggTex   *GetTex(const string &name, const string &fn);
   MayaEggTex   *GetTex(const string &name, const string &fn);
   void          CreateSkinCluster(MayaEggMesh *M);
   void          CreateSkinCluster(MayaEggMesh *M);
 
 
-  MayaAnimData *GetAnimData(EggSAnimData *pool, EggXfmSAnim * parent);
+  MayaAnim *GetAnim(EggXfmSAnim *pool);
+  MObject MayaEggLoader::GetDependencyNode(string givenName);
 
 
   typedef phash_map<EggVertexPool *, MayaEggMesh *, pointer_hash> MeshTable;
   typedef phash_map<EggVertexPool *, MayaEggMesh *, pointer_hash> MeshTable;
-  typedef phash_map<EggSAnimData *, MayaAnimData *, pointer_hash> AnimTable;
+  typedef phash_map<EggXfmSAnim *, MayaAnim *, pointer_hash> AnimTable;
   typedef phash_map<EggGroup *, MayaEggJoint *, pointer_hash> JointTable;
   typedef phash_map<EggGroup *, MayaEggJoint *, pointer_hash> JointTable;
   typedef phash_map<string, MayaEggTex *, string_hash> TexTable;
   typedef phash_map<string, MayaEggTex *, string_hash> TexTable;
 
 
@@ -107,6 +109,7 @@ public:
   int _start_frame;
   int _start_frame;
   int _end_frame;
   int _end_frame;
   int _frame_rate;
   int _frame_rate;
+  MTime::Unit     _timeUnit;
 
 
   void ParseFrameInfo(string comment);
   void ParseFrameInfo(string comment);
 };
 };
@@ -380,6 +383,7 @@ void MayaEggJoint::CreateMayaBone()
     trans = trans * _parent->_joint_abs.inverse();
     trans = trans * _parent->_joint_abs.inverse();
   }
   }
   MTransformationMatrix mtm(trans);
   MTransformationMatrix mtm(trans);
+
   MFnIkJoint ikj;
   MFnIkJoint ikj;
   if (_parent) {
   if (_parent) {
     ikj.create(_parent->_joint);
     ikj.create(_parent->_joint);
@@ -388,6 +392,7 @@ void MayaEggJoint::CreateMayaBone()
     ikj.create();
     ikj.create();
   }
   }
   ikj.set(mtm);
   ikj.set(mtm);
+  
   _joint = ikj.object();
   _joint = ikj.object();
   ikj.getPath(_joint_dag_path);
   ikj.getPath(_joint_dag_path);
 }
 }
@@ -656,36 +661,35 @@ EggGroup *MayaEggMesh::GetControlJoint(void)
 
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 //
 //
-// MayaAnimData: 
+// MayaAnim: 
 //
 //
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 ///////////////////////////////////////////////////////////////////////////////////////////////////
-class MayaAnimData
+class MayaAnim
 {
 {
 public:
 public:
   string  _name;
   string  _name;
   EggTable *_joint;
   EggTable *_joint;
-  EggXfmSAnim *_parent;
-  EggSAnimData * _pool;
+  EggXfmSAnim *_pool;
   void PrintData(void);
   void PrintData(void);
 };
 };
 
 
-MayaAnimData *MayaEggLoader::GetAnimData(EggSAnimData *pool, EggXfmSAnim *parent)
+MayaAnim *MayaEggLoader::GetAnim(EggXfmSAnim *pool)
 {
 {
-  MayaAnimData *result = _anim_tab[pool];
+  MayaAnim *result = _anim_tab[pool];
   if (result == 0) {
   if (result == 0) {
-    result = new MayaAnimData;
+    result = new MayaAnim;
     result->_pool = pool;
     result->_pool = pool;
-    result->_parent = parent;
     result->_name = pool->get_name();
     result->_name = pool->get_name();
     _anim_tab[pool] = result;
     _anim_tab[pool] = result;
-    EggNode *jointNode = (DCAST(EggNode, parent))->get_parent();
+    EggNode *jointNode = (DCAST(EggNode, pool))->get_parent();
     EggTable *joint = DCAST(EggTable, jointNode);
     EggTable *joint = DCAST(EggTable, jointNode);
     result->_joint = joint;
     result->_joint = joint;
+
   }
   }
   return result;
   return result;
 }
 }
 
 
-void MayaAnimData::PrintData(void)
+void MayaAnim::PrintData(void)
 {
 {
   if (mayaloader_cat.is_debug()) {
   if (mayaloader_cat.is_debug()) {
     mayaloader_cat.debug() << "anim on joint : " << _joint->get_name() << endl;
     mayaloader_cat.debug() << "anim on joint : " << _joint->get_name() << endl;
@@ -693,6 +697,7 @@ void MayaAnimData::PrintData(void)
   _pool->write(mayaloader_cat.debug(), 0);
   _pool->write(mayaloader_cat.debug(), 0);
 }
 }
 
 
+
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 //
 //
 // MayaEggLoader functions
 // MayaEggLoader functions
@@ -857,18 +862,20 @@ void MayaEggLoader::TraverseEggNode(EggNode *node, EggGroup *context, string del
       if (mayaloader_cat.is_debug()) {
       if (mayaloader_cat.is_debug()) {
         mayaloader_cat.debug() << delim+delstring << "found an EggComment: " << comment << endl;
         mayaloader_cat.debug() << delim+delstring << "found an EggComment: " << comment << endl;
       }
       }
-      ParseFrameInfo(comment);
+      if (comment.find("chan") != string::npos) {
+        ParseFrameInfo(comment);
+      }
     }
     }
   } else if (node->is_of_type(EggSAnimData::get_class_type())) {
   } else if (node->is_of_type(EggSAnimData::get_class_type())) {
     if (mayaloader_cat.is_debug()) {
     if (mayaloader_cat.is_debug()) {
       mayaloader_cat.debug() << delim+delstring << "found an EggSAnimData: " << node->get_name() << endl;
       mayaloader_cat.debug() << delim+delstring << "found an EggSAnimData: " << node->get_name() << endl;
     }
     }
-    EggSAnimData *anim = DCAST(EggSAnimData, node);
-    MayaAnimData *animData = GetAnimData(anim, DCAST(EggXfmSAnim, node->get_parent()));
+    //EggSAnimData *anim = DCAST(EggSAnimData, node);
+    //MayaAnimData *animData = GetAnimData(anim, DCAST(EggXfmSAnim, node->get_parent()));
     //animData->PrintData();
     //animData->PrintData();
-    if (_end_frame < animData->_pool->get_num_rows()) {
-      _end_frame = animData->_pool->get_num_rows();
-    }
+    //if (_end_frame < animData->_pool->get_num_rows()) {
+    //  _end_frame = animData->_pool->get_num_rows();
+    //}
   } else if (node->is_of_type(EggGroupNode::get_class_type())) {
   } else if (node->is_of_type(EggGroupNode::get_class_type())) {
     EggGroupNode *group = DCAST(EggGroupNode, node);
     EggGroupNode *group = DCAST(EggGroupNode, node);
 
 
@@ -884,9 +891,12 @@ void MayaEggLoader::TraverseEggNode(EggNode *node, EggGroup *context, string del
         mayaloader_cat.debug() << delim+delstring << "found an EggTable: " << node->get_name() << endl;
         mayaloader_cat.debug() << delim+delstring << "found an EggTable: " << node->get_name() << endl;
       }
       }
     } else if (node->is_of_type(EggXfmSAnim::get_class_type())) {
     } else if (node->is_of_type(EggXfmSAnim::get_class_type())) {
+      MayaAnim *anim = GetAnim(DCAST(EggXfmSAnim, node));
+      //anim->PrintData();
       if (mayaloader_cat.is_debug()) {
       if (mayaloader_cat.is_debug()) {
         mayaloader_cat.debug() << delim+delstring << "found an EggXfmSAnim: " << node->get_name() << endl;
         mayaloader_cat.debug() << delim+delstring << "found an EggXfmSAnim: " << node->get_name() << endl;
       }
       }
+
     }
     }
     
     
     EggGroupNode::const_iterator ci;
     EggGroupNode::const_iterator ci;
@@ -925,13 +935,14 @@ bool MayaEggLoader::ConvertEggData(EggData *data, bool merge, bool model, bool a
   //mayaloader_cat.debug() << "root node: " << data->get_type() << endl;
   //mayaloader_cat.debug() << "root node: " << data->get_type() << endl;
   TraverseEggNode(data, NULL, "");
   TraverseEggNode(data, NULL, "");
 
 
+  MStatus status;
   for (ci = _mesh_tab.begin(); ci != _mesh_tab.end(); ++ci) {
   for (ci = _mesh_tab.begin(); ci != _mesh_tab.end(); ++ci) {
     MayaEggMesh *mesh = (*ci).second;
     MayaEggMesh *mesh = (*ci).second;
     if (mesh->_face_count==0) {
     if (mesh->_face_count==0) {
       continue;
       continue;
     }
     }
 
 
-    MStatus status;
+    //    MStatus status;
     MFnMesh mfn;
     MFnMesh mfn;
     MString cset;
     MString cset;
     
     
@@ -979,6 +990,101 @@ bool MayaEggLoader::ConvertEggData(EggData *data, bool merge, bool model, bool a
   for (ti = _tex_tab.begin();   ti != _tex_tab.end();   ++ti) {
   for (ti = _tex_tab.begin();   ti != _tex_tab.end();   ++ti) {
     (*ti).second->AssignNames();
     (*ti).second->AssignNames();
   }
   }
+
+ 
+  if (mayaloader_cat.is_debug()) {
+    mayaloader_cat.debug() << "-fri: " << _frame_rate << " -sf: " << _start_frame 
+                           << " -ef: " << _end_frame << endl;
+  }
+
+  for (ei = _anim_tab.begin(); ei != _anim_tab.end(); ++ei) {
+    MayaAnim *anim = (*ei).second;
+    MObject node = GetDependencyNode(anim->_joint->get_name());
+    MFnDagNode mfnNode(node, &status);
+
+    MMatrix mMat = mfnNode.transformationMatrix(&status);
+
+    MObject attrTX = mfnNode.attribute("translateX", &status);
+    MObject attrTY = mfnNode.attribute("translateY", &status);
+    MObject attrTZ = mfnNode.attribute("translateZ", &status);
+    MObject attrRX = mfnNode.attribute("rotateX", &status);
+    MObject attrRY = mfnNode.attribute("rotateY", &status);
+    MObject attrRZ = mfnNode.attribute("rotateZ", &status);
+    MObject attrSX = mfnNode.attribute("scaleX", &status);
+    MObject attrSY = mfnNode.attribute("scaleY", &status);
+    MObject attrSZ = mfnNode.attribute("scaleZ", &status);
+
+    MFnAnimCurve mfnAnimCurveTX;
+    MFnAnimCurve mfnAnimCurveTY;
+    MFnAnimCurve mfnAnimCurveTZ;
+    MFnAnimCurve mfnAnimCurveRX;
+    MFnAnimCurve mfnAnimCurveRY;
+    MFnAnimCurve mfnAnimCurveRZ;
+    MFnAnimCurve mfnAnimCurveSX;
+    MFnAnimCurve mfnAnimCurveSY;
+    MFnAnimCurve mfnAnimCurveSZ;
+
+    mfnAnimCurveTX.create(node, attrTX, MFnAnimCurve::kAnimCurveTL, NULL, &status);
+    mfnAnimCurveTY.create(node, attrTY, MFnAnimCurve::kAnimCurveTL, NULL, &status);
+    mfnAnimCurveTZ.create(node, attrTZ, MFnAnimCurve::kAnimCurveTL, NULL, &status);
+    mfnAnimCurveRX.create(node, attrRX, MFnAnimCurve::kAnimCurveTA, NULL, &status);
+    mfnAnimCurveRY.create(node, attrRY, MFnAnimCurve::kAnimCurveTA, NULL, &status);
+    mfnAnimCurveRZ.create(node, attrRZ, MFnAnimCurve::kAnimCurveTA, NULL, &status);
+    mfnAnimCurveSX.create(node, attrSX, MFnAnimCurve::kAnimCurveTU, NULL, &status);
+    mfnAnimCurveSY.create(node, attrSY, MFnAnimCurve::kAnimCurveTU, NULL, &status);
+    mfnAnimCurveSZ.create(node, attrSZ, MFnAnimCurve::kAnimCurveTU, NULL, &status);
+
+    MTransformationMatrix matrix( mMat );
+    MVector trans = matrix.translation(MSpace::kTransform, &status);
+      
+    double rot[3];
+    MTransformationMatrix::RotationOrder order = MTransformationMatrix::kXYZ;
+    status = matrix.getRotation(rot, order);
+
+    double scale[3];
+    status = matrix.getScale(scale, MSpace::kTransform);
+    MFnAnimCurve::TangentType tangent = MFnAnimCurve::kTangentClamped;
+    MTime time(_start_frame - 1, _timeUnit);
+
+    mfnAnimCurveTX.addKey(time, trans.x, tangent, tangent, NULL, &status);
+    mfnAnimCurveTY.addKey(time, trans.y, tangent, tangent, NULL, &status);
+    mfnAnimCurveTZ.addKey(time, trans.z, tangent, tangent, NULL, &status);
+    mfnAnimCurveRX.addKey(time, rot[0], tangent, tangent, NULL, &status);
+    mfnAnimCurveRY.addKey(time, rot[1], tangent, tangent, NULL, &status);
+    mfnAnimCurveRZ.addKey(time, rot[2], tangent, tangent, NULL, &status);
+    mfnAnimCurveSX.addKey(time, scale[0], tangent, tangent, NULL, &status);
+    mfnAnimCurveSY.addKey(time, scale[1], tangent, tangent, NULL, &status);
+    mfnAnimCurveSZ.addKey(time, scale[2], tangent, tangent, NULL, &status);
+
+    for (int frame = 0; frame < anim->_pool->get_num_rows(); frame++)
+    {
+      LMatrix4d tMat;
+      anim->_pool->get_value(frame, tMat);
+
+      double matData[4][4] = {{tMat.get_cell(0,0), tMat.get_cell(0,1), tMat.get_cell(0,2), tMat.get_cell(0,3)},
+                  {tMat.get_cell(1,0), tMat.get_cell(1,1), tMat.get_cell(1,2), tMat.get_cell(1,3)},
+                  {tMat.get_cell(2,0), tMat.get_cell(2,1), tMat.get_cell(2,2), tMat.get_cell(2,3)},
+                  {tMat.get_cell(3,0), tMat.get_cell(3,1), tMat.get_cell(3,2), tMat.get_cell(3,3)}};
+      MMatrix mat(matData);
+
+      matrix = MTransformationMatrix(mat);
+      trans = matrix.translation(MSpace::kTransform, &status);
+      status = matrix.getRotation(rot, order);
+      status = matrix.getScale(scale, MSpace::kTransform);
+      time = MTime(frame + _start_frame, _timeUnit);
+
+      mfnAnimCurveTX.addKey(time, trans.x, tangent, tangent, NULL, &status);
+      mfnAnimCurveTY.addKey(time, trans.y, tangent, tangent, NULL, &status);
+      mfnAnimCurveTZ.addKey(time, trans.z, tangent, tangent, NULL, &status);
+      mfnAnimCurveRX.addKey(time, rot[0], tangent, tangent, NULL, &status);
+      mfnAnimCurveRY.addKey(time, rot[1], tangent, tangent, NULL, &status);
+      mfnAnimCurveRZ.addKey(time, rot[2], tangent, tangent, NULL, &status);
+      mfnAnimCurveSX.addKey(time, scale[0], tangent, tangent, NULL, &status);
+      mfnAnimCurveSY.addKey(time, scale[1], tangent, tangent, NULL, &status);
+      mfnAnimCurveSZ.addKey(time, scale[2], tangent, tangent, NULL, &status);
+    }
+  }
+
   for (ci = _mesh_tab.begin();  ci != _mesh_tab.end();  ++ci) {
   for (ci = _mesh_tab.begin();  ci != _mesh_tab.end();  ++ci) {
     delete (*ci).second;
     delete (*ci).second;
   }
   }
@@ -988,15 +1094,10 @@ bool MayaEggLoader::ConvertEggData(EggData *data, bool merge, bool model, bool a
   for (ti = _tex_tab.begin();   ti != _tex_tab.end();   ++ti) {
   for (ti = _tex_tab.begin();   ti != _tex_tab.end();   ++ti) {
     delete (*ti).second;
     delete (*ti).second;
   }
   }
-  
-  if (mayaloader_cat.is_debug()) {
-    mayaloader_cat.debug() << "-fri: " << _frame_rate << " -sf: " << _start_frame 
-                           << " -ef: " << _end_frame << endl;
+  for (ei = _anim_tab.begin();  ei != _anim_tab.end();  ++ei) {
+    delete (*ei).second;
   }
   }
 
 
-  // masad: TODO: perhaps we can now just go through each joint and find
-  // corresponding EggSAnimData and apply proper MayaLink to the keyframe.
-
   //  ResumeSetKeyMode();
   //  ResumeSetKeyMode();
   //  ResumeAnimate();
   //  ResumeAnimate();
   
   
@@ -1008,38 +1109,115 @@ void MayaEggLoader::ParseFrameInfo(string comment)
 {
 {
   int length = 0;
   int length = 0;
   int pos, ls, le;
   int pos, ls, le;
-  _frame_rate = -1;
+  _frame_rate = 24;
   _start_frame = 0;
   _start_frame = 0;
   _end_frame = -1;
   _end_frame = -1;
+  _timeUnit = MTime::kFilm;
+
   pos = comment.find("-fri");
   pos = comment.find("-fri");
   if (pos != string::npos) {
   if (pos != string::npos) {
     ls = comment.find(" ", pos+4);
     ls = comment.find(" ", pos+4);
     le = comment.find(" ", ls+1);
     le = comment.find(" ", ls+1);
-    _frame_rate = atoi(comment.substr(ls,le-ls).data());
+    mayaloader_cat.debug() <<    comment.substr(ls+1, le-ls-1) << endl;
+    _frame_rate = atoi(comment.substr(ls+1,le-ls-1).data());
     //mayaloader_cat.debug() << "le = " << le << "; and ls = " << ls << "; frame_rate = " << _frame_rate << endl;
     //mayaloader_cat.debug() << "le = " << le << "; and ls = " << ls << "; frame_rate = " << _frame_rate << endl;
+
+    switch (_frame_rate) {
+    case 15:
+      _timeUnit = MTime::kGames;
+      break;
+    case 24:
+      _timeUnit = MTime::kFilm;
+      break;
+    case 25:
+      _timeUnit = MTime::kPALFrame;
+      break;
+    case 30:
+      _timeUnit = MTime::kNTSCFrame;
+      break;
+    case 48:
+      _timeUnit = MTime::kShowScan;
+      break;
+    case 50:
+      _timeUnit = MTime::kPALField;
+      break;
+    case 60:
+      _timeUnit = MTime::kNTSCField;
+      break;
+    case 2:
+      _timeUnit = MTime::k2FPS;
+      break;
+    case 3:
+      _timeUnit = MTime::k3FPS;
+      break;
+    case 4:
+      _timeUnit = MTime::k4FPS;
+      break;
+    case 5:
+      _timeUnit = MTime::k5FPS;
+      break;
+    case 6:
+      _timeUnit = MTime::k6FPS;
+      break;
+    case 8:
+      _timeUnit = MTime::k8FPS;
+      break;
+    case 10:
+      _timeUnit = MTime::k10FPS;
+      break;
+    case 12:
+      _timeUnit = MTime::k12FPS;
+      break;
+    case 16:
+      _timeUnit = MTime::k16FPS;
+      break;
+    case 20:
+      _timeUnit = MTime::k20FPS;
+      break;
+    case 40:
+      _timeUnit = MTime::k40FPS;
+      break;
+    case 75:
+      _timeUnit = MTime::k75FPS;
+      break;
+    case 80:
+      _timeUnit = MTime::k80FPS;
+      break;
+    case 100:
+      _timeUnit = MTime::k100FPS;
+      break;
+    default:
+      _timeUnit = MTime::kFilm;
+    }
+
   }
   }
+
   pos = comment.find("-sf");
   pos = comment.find("-sf");
   if (pos != string::npos) {
   if (pos != string::npos) {
-    ls = comment.find(" ", pos+4);
+    ls = comment.find(" ", pos+3);
     le = comment.find(" ", ls+1);
     le = comment.find(" ", ls+1);
+    mayaloader_cat.debug() <<    comment.substr(ls+1, le-ls-1) << endl;
     if (le == string::npos) {
     if (le == string::npos) {
-      _start_frame = atoi(comment.substr(ls,le).data());
+      _start_frame = atoi(comment.substr(ls+1,le).data());
     } else {
     } else {
-      _start_frame = atoi(comment.substr(ls,le-ls).data());
+      _start_frame = atoi(comment.substr(ls+1,le-ls-1).data());
     }
     }
     //mayaloader_cat.debug() << "le = " << le << "; and ls = " << ls << "; start_frame = " << _start_frame << endl;
     //mayaloader_cat.debug() << "le = " << le << "; and ls = " << ls << "; start_frame = " << _start_frame << endl;
   }
   }
   pos = comment.find("-ef");
   pos = comment.find("-ef");
   if (pos != string::npos) {
   if (pos != string::npos) {
-    ls = comment.find(" ", pos+4);
+    ls = comment.find(" ", pos+3);
     le = comment.find(" ", ls+1);
     le = comment.find(" ", ls+1);
+    mayaloader_cat.debug() <<    comment.substr(ls+1, le-ls-1) << endl;
     if (le == string::npos) {
     if (le == string::npos) {
-      _end_frame = atoi(comment.substr(ls,le).data());
+      _end_frame = atoi(comment.substr(ls+1,le).data());
     } else {
     } else {
-      _end_frame = atoi(comment.substr(ls,le-ls).data());
+      _end_frame = atoi(comment.substr(ls+1,le-ls-1).data());
     }
     }
     //mayaloader_cat.debug() << "le = " << le << "; and ls = " << ls << "; end_frame = " << _end_frame << endl;
     //mayaloader_cat.debug() << "le = " << le << "; and ls = " << ls << "; end_frame = " << _end_frame << endl;
   }
   }
+
+
 }
 }
 
 
 bool MayaEggLoader::ConvertEggFile(const char *name, bool merge, bool model, bool anim)
 bool MayaEggLoader::ConvertEggFile(const char *name, bool merge, bool model, bool anim)
@@ -1053,6 +1231,49 @@ bool MayaEggLoader::ConvertEggFile(const char *name, bool merge, bool model, boo
   return ConvertEggData(&data, merge, model, anim);
   return ConvertEggData(&data, merge, model, anim);
 }
 }
 
 
+MObject MayaEggLoader::GetDependencyNode(string givenName)
+{
+  MObject node;
+  int pos;
+  string name;
+
+  pos = givenName.find(":");
+  if (pos != string::npos) {
+    name = givenName.substr(pos+1);
+  } else
+    name = givenName;
+
+  MeshTable::const_iterator ci;
+  JointTable::const_iterator ji;
+  for (ci = _mesh_tab.begin(); ci != _mesh_tab.end(); ++ci) {
+    MayaEggMesh *mesh = (*ci).second;
+    
+    string meshName = mesh->_pool->get_name();
+    int nsize = meshName.size();
+    if ((nsize > 6) && (meshName.rfind(".verts")==(nsize-6))) {
+      meshName.resize(nsize-6);
+    }
+    if (meshName == name)
+    {
+      node = mesh->_transNode;
+      return node;
+    }
+  }
+
+  for (ji = _joint_tab.begin(); ji != _joint_tab.end(); ++ji) {
+    MayaEggJoint *joint = (*ji).second;
+    //mayaloader_cat.debug() << "creating a joint: " << joint->_egg_joint->get_name() << endl;
+    string jointName = joint->_egg_joint->get_name();
+    if (jointName == name)
+    {
+      node = joint->_joint;
+      return node;
+    }
+  }  
+  
+  return node;
+}
+
 ////////////////////////////////////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////////////////////////////////////
 //
 //
 // The two global functions that form the API of this module.
 // The two global functions that form the API of this module.