Browse Source

Fixed a bug in NURBS weights conversion

Gyedo Jeon 17 years ago
parent
commit
31dde9d31d
1 changed files with 8 additions and 20 deletions
  1. 8 20
      pandatool/src/mayaegg/mayaEggLoader.cxx

+ 8 - 20
pandatool/src/mayaegg/mayaEggLoader.cxx

@@ -594,8 +594,6 @@ public:
   EggGroup            *_parent;
   EggGroup            *_parent;
   MDagPath            _shape_dag_path;
   MDagPath            _shape_dag_path;
   int                 _vert_count;  
   int                 _vert_count;  
-  unsigned            _uNumCvs;
-  unsigned            _vNumCvs;
   
   
   MFloatPointArray    _vertexArray;
   MFloatPointArray    _vertexArray;
   MVectorArray        _normalArray;
   MVectorArray        _normalArray;
@@ -885,6 +883,9 @@ public:
   MDoubleArray        _vKnotArray;
   MDoubleArray        _vKnotArray;
   unsigned            _uDegree;
   unsigned            _uDegree;
   unsigned            _vDegree;
   unsigned            _vDegree;
+  unsigned            _uNumCvs;
+  unsigned            _vNumCvs;
+
   MFnNurbsSurface::Form _uForm;
   MFnNurbsSurface::Form _uForm;
   MFnNurbsSurface::Form _vForm;
   MFnNurbsSurface::Form _vForm;
 
 
@@ -1108,22 +1109,9 @@ void MayaEggLoader::CreateSkinCluster(MayaEggGeom *M)
   }
   }
   MFnSkinCluster skinCluster(oldplugs[0].node());
   MFnSkinCluster skinCluster(oldplugs[0].node());
   MIntArray influenceIndices;
   MIntArray influenceIndices;
-  MFnComponent *pComponent;
-  if (shape.typeName() == "mesh") {
-    MFnSingleIndexedComponent *pSingleComponent = new MFnSingleIndexedComponent();
-    pSingleComponent->create(MFn::kMeshVertComponent);
-    pSingleComponent->setCompleteData(M->_vert_count);
-    pComponent = pSingleComponent;
-  } else if (shape.typeName() == "nurbsSurface") {
-    MFnDoubleIndexedComponent *pDoubleComponent = new MFnDoubleIndexedComponent();
-    pDoubleComponent->create(MFn::kSurfaceCVComponent);
-    pDoubleComponent->setCompleteData(M->_uNumCvs, M->_vNumCvs);
-    pComponent = pDoubleComponent;
-  } else {
-    // we only support mesh and nurbsSurface    
-    return;
-  }
-
+  MFnSingleIndexedComponent component;
+  component.create(MFn::kMeshVertComponent); // [gjeon] Interestingly, we can use MFn::kMeshVertComponent for NURBS surface, too
+  component.setCompleteData(M->_vert_count);  
   for (unsigned int i=0; i<joints.size(); i++) {
   for (unsigned int i=0; i<joints.size(); i++) {
     unsigned int index = skinCluster.indexForInfluenceObject(joints[i]->_joint_dag_path, &status);
     unsigned int index = skinCluster.indexForInfluenceObject(joints[i]->_joint_dag_path, &status);
     if (status != MStatus::kSuccess) {
     if (status != MStatus::kSuccess) {
@@ -1145,7 +1133,7 @@ void MayaEggLoader::CreateSkinCluster(MayaEggGeom *M)
       perror("skinCluster index");
       perror("skinCluster index");
       return;
       return;
     }
     }
-    skinCluster.setWeights(M->_shape_dag_path, pComponent->object(), index, 0.0, false, NULL);
+    skinCluster.setWeights(M->_shape_dag_path, component.object(), index, 0.0, false, NULL);
   }
   }
 
 
   MFloatArray values;
   MFloatArray values;
@@ -1161,7 +1149,7 @@ void MayaEggLoader::CreateSkinCluster(MayaEggGeom *M)
       values[vert->_index * joints.size() + joint->_index] = (float)strength;
       values[vert->_index * joints.size() + joint->_index] = (float)strength;
     }
     }
   }
   }
-  skinCluster.setWeights(M->_shape_dag_path, pComponent->object(), influenceIndices, values, false, NULL);
+  skinCluster.setWeights(M->_shape_dag_path, component.object(), influenceIndices, values, false, NULL);
 
 
   for (unsigned int i=0; i<joints.size(); i++) {
   for (unsigned int i=0; i<joints.size(); i++) {
     /*
     /*