فهرست منبع

bad mod eigen bug?

Former-commit-id: 4298431c8707bdefdbd6da72c9b00d9f7e1e6b4f
Alec Jacobson 9 سال پیش
والد
کامیت
acb4f76575
1فایلهای تغییر یافته به همراه7 افزوده شده و 4 حذف شده
  1. 7 4
      include/igl/boolean/mesh_boolean.cpp

+ 7 - 4
include/igl/boolean/mesh_boolean.cpp

@@ -201,8 +201,11 @@ IGL_INLINE void igl::boolean::mesh_boolean(
   VectorXi I;
   VectorXi I;
   Matrix<bool,Dynamic,1> flip;
   Matrix<bool,Dynamic,1> flip;
   peel_outer_hull_layers(EV,CF,I,flip);
   peel_outer_hull_layers(EV,CF,I,flip);
-  // 0 is "first" iteration, so it's odd
-  Array<bool,Dynamic,1> odd = igl::mod(I,2).array()==0;
+  //Array<bool,Dynamic,1> even = igl::mod(I,2).array()==0;
+  const auto even = [&](const Index & f)->bool
+  {
+    return (I(f)%2)==0;
+  };
 
 
 #ifdef IGL_MESH_BOOLEAN_DEBUG
 #ifdef IGL_MESH_BOOLEAN_DEBUG
   cout<<"categorize..."<<endl;
   cout<<"categorize..."<<endl;
@@ -219,7 +222,7 @@ IGL_INLINE void igl::boolean::mesh_boolean(
     {
     {
       case MESH_BOOLEAN_TYPE_XOR:
       case MESH_BOOLEAN_TYPE_XOR:
       case MESH_BOOLEAN_TYPE_UNION:
       case MESH_BOOLEAN_TYPE_UNION:
-        if((odd(f)&&!flip(f))||(!odd(f)&&flip(f)))
+        if((even(f)&&!flip(f))||(!even(f)&&flip(f)))
         {
         {
           vG.push_back(f);
           vG.push_back(f);
           Gflip.push_back(false);
           Gflip.push_back(false);
@@ -230,7 +233,7 @@ IGL_INLINE void igl::boolean::mesh_boolean(
         }
         }
         break;
         break;
       case MESH_BOOLEAN_TYPE_INTERSECT:
       case MESH_BOOLEAN_TYPE_INTERSECT:
-        if((!odd(f) && !flip(f)) || (odd(f) && flip(f)))
+        if((!even(f) && !flip(f)) || (even(f) && flip(f)))
         {
         {
           vG.push_back(f);
           vG.push_back(f);
           Gflip.push_back(type == MESH_BOOLEAN_TYPE_MINUS);
           Gflip.push_back(type == MESH_BOOLEAN_TYPE_MINUS);