瀏覽代碼

Former-commit-id: 0b8a0bf7cfeb93b131a3cbcba5977f07d1598ae4

dolga 13 年之前
父節點
當前提交
5c7be51e2e
共有 1 個文件被更改,包括 12 次插入8 次删除
  1. 12 8
      removeDuplicates.h

+ 12 - 8
removeDuplicates.h

@@ -31,8 +31,6 @@ namespace igl
 template <typename T>
 inline void igl::removeDuplicates(const Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic> &V, const Eigen::MatrixXi &F, Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic> &NV, Eigen::MatrixXi &NF, Eigen::VectorXi &I, const double epsilon)
 {
-  assert (F.cols() == 3);
-  
   //// build collapse map
   int n = V.rows();
   
@@ -68,14 +66,20 @@ inline void igl::removeDuplicates(const Eigen::Matrix<T, Eigen::Dynamic, Eigen::
   NV.conservativeResize	(	count , Eigen::NoChange );
 
   count = 0;
-  NF = Eigen::MatrixXi(F.rows(),3);
+  std::vector<int> face;
+  NF = Eigen::MatrixXi(F.rows(),F.cols());
   for (int i =0; i <F.rows(); ++i)
   {
-    int v0 = I[F(i,0)];
-    int v1 = I[F(i,1)];
-    int v2 = I[F(i,2)];
-    if ( (v0 != v1) && (v2 != v1) && (v0 != v2) )
-      NF.row(count++) << v0, v1, v2;
+    face.clear();
+    for (int j = 0; j< F.cols(); ++j)
+      if(std::find(face.begin(), face.end(), I[F(i,j)]) == face.end())
+         face.push_back(I[F(i,j)]);
+    if (face.size() == F.cols())
+    {
+      for (int j = 0; j< F.cols(); ++j)
+        NF(count,j) = face[j];
+      count ++;
+    }
   }
   NF.conservativeResize	(	count , Eigen::NoChange );