Browse Source

boundary_facets_optimization (#2104)

jmespadero 2 years ago
parent
commit
af06a10939
1 changed files with 13 additions and 10 deletions
  1. 13 10
      include/igl/boundary_facets.cpp

+ 13 - 10
include/igl/boundary_facets.cpp

@@ -39,14 +39,14 @@ IGL_INLINE void igl::boundary_facets(
     K.resize(0,1);
     return;
   }
-  // Get a list of all facets
+  // Get a list of all facets/edges
   DerivedF allF(T.rows()*simplex_size,simplex_size-1);
-  // Gather faces (e.g., loop over tets)
-  for(int i = 0; i< (int)T.rows();i++)
+  switch(simplex_size)
   {
-    switch(simplex_size)
-    {
-      case 4:
+    case 4:
+      // Gather faces (e.g., loop over tets)
+      for(int i = 0; i< (int)T.rows();i++)
+      {
         // get face in correct order
         allF(i*simplex_size+0,0) = T(i,1);
         allF(i*simplex_size+0,1) = T(i,3);
@@ -63,16 +63,19 @@ IGL_INLINE void igl::boundary_facets(
         allF(i*simplex_size+3,0) = T(i,0);
         allF(i*simplex_size+3,1) = T(i,1);
         allF(i*simplex_size+3,2) = T(i,2);
-        break;
-      case 3:
+      }
+      break;
+    case 3:
+      // Gather edges (loop over triangles)
+      for(int i = 0; i< (int)T.rows();i++)
+      {
         allF(i*simplex_size+0,0) = T(i,1);
         allF(i*simplex_size+0,1) = T(i,2);
         allF(i*simplex_size+1,0) = T(i,2);
         allF(i*simplex_size+1,1) = T(i,0);
         allF(i*simplex_size+2,0) = T(i,0);
         allF(i*simplex_size+2,1) = T(i,1);
-        break;
-    }
+      }
   }
   DerivedF sortedF;
   igl::sort(allF,2,true,sortedF);