Browse Source

[curvature] Added a test before calling fit to avoid exit instruction

For the time being, the code exits if data is not valid.
exit instruction in fit function is not desirable when using principal_curvature in a program.
Ideally, one should raise an exception.
If data is not valid, we return a default Quadric object


Former-commit-id: 78cc9effc3d19a791c0e751bff0894e84aeb4c61
Guillaume Jacquenot 7 years ago
parent
commit
938dc61824
1 changed files with 9 additions and 1 deletions
  1. 9 1
      include/igl/principal_curvature.cpp

+ 9 - 1
include/igl/principal_curvature.cpp

@@ -348,7 +348,15 @@ IGL_INLINE void CurvatureCalculator::fitQuadric(const Eigen::Vector3d& v, const
     double z = vTang.dot(ref[2]);
     double z = vTang.dot(ref[2]);
     points.push_back(Eigen::Vector3d (x,y,z));
     points.push_back(Eigen::Vector3d (x,y,z));
   }
   }
-  *q = Quadric::fit (points);
+  if (points.size() < 5)
+  {
+    std::cerr << "ASSERT FAILED! fit function requires at least 5 points: Only " << points.size() << " were given." << std::endl;
+    *q = Quadric(0,0,0,0,0);
+  }
+  else
+  {
+    *q = Quadric::fit (points);
+  }
 }
 }
 
 
 IGL_INLINE void CurvatureCalculator::finalEigenStuff(int i, const std::vector<Eigen::Vector3d>& ref, Quadric& q)
 IGL_INLINE void CurvatureCalculator::finalEigenStuff(int i, const std::vector<Eigen::Vector3d>& ref, Quadric& q)