outer_facet.cpp 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. #include <test_common.h>
  2. #include <igl/copyleft/cgal/outer_facet.h>
  3. TEST_CASE("OuterFacet: Simple", "[igl/copyleft/cgal]")
  4. {
  5. Eigen::MatrixXd V;
  6. Eigen::MatrixXi F;
  7. igl::read_triangle_mesh(test_common::data_path("cube.obj"), V, F);
  8. const size_t num_faces = F.rows();
  9. Eigen::VectorXi I(num_faces);
  10. I.setLinSpaced(num_faces, 0, num_faces-1);
  11. Eigen::Index fid = num_faces + 1;
  12. bool flipped;
  13. igl::copyleft::cgal::outer_facet(V, F, I, fid, flipped);
  14. REQUIRE (num_faces > fid);
  15. REQUIRE (!flipped);
  16. }
  17. TEST_CASE("OuterFacet: DuplicatedOppositeFaces", "[igl/copyleft/cgal]")
  18. {
  19. Eigen::MatrixXd V;
  20. Eigen::MatrixXi F1;
  21. igl::read_triangle_mesh(test_common::data_path("cube.obj"), V, F1);
  22. Eigen::MatrixXi F2 = F1;
  23. F2.col(0).swap(F2.col(1));
  24. Eigen::MatrixXi F(F1.rows()*2, F1.cols());
  25. F << F1, F2;
  26. Eigen::VectorXi I(F.rows());
  27. I.setLinSpaced(F.rows(), 0, F.rows()-1);
  28. Eigen::Index fid = F.rows() + 1;
  29. bool flipped;
  30. igl::copyleft::cgal::outer_facet(V, F, I, fid, flipped);
  31. REQUIRE (F.rows() > fid);
  32. REQUIRE (!flipped);
  33. }
  34. TEST_CASE("OuterFacet: FullyDegnerated", "[igl/copyleft/cgal]")
  35. {
  36. Eigen::MatrixXd V;
  37. Eigen::MatrixXi F;
  38. igl::read_triangle_mesh(test_common::data_path("degenerated.obj"), V, F);
  39. Eigen::VectorXi I(F.rows());
  40. I.setLinSpaced(F.rows(), 0, F.rows()-1);
  41. Eigen::Index fid = F.rows() + 1;
  42. bool flipped;
  43. igl::copyleft::cgal::outer_facet(V, F, I, fid, flipped);
  44. REQUIRE (F.rows() > fid);
  45. REQUIRE (!flipped);
  46. }
  47. TEST_CASE("OuterFacet: InvertedNormal", "[igl/copyleft/cgal]")
  48. {
  49. Eigen::MatrixXd V;
  50. Eigen::MatrixXi F;
  51. igl::read_triangle_mesh(test_common::data_path("cube.obj"), V, F);
  52. F.col(0).swap(F.col(1));
  53. Eigen::VectorXi I(F.rows());
  54. I.setLinSpaced(F.rows(), 0, F.rows()-1);
  55. Eigen::Index fid = F.rows() + 1;
  56. bool flipped;
  57. igl::copyleft::cgal::outer_facet(V, F, I, fid, flipped);
  58. REQUIRE (F.rows() > fid);
  59. REQUIRE (flipped);
  60. }
  61. TEST_CASE("OuterFacet: SliverTet", "[igl/copyleft/cgal]")
  62. {
  63. Eigen::MatrixXd V;
  64. Eigen::MatrixXi F;
  65. igl::read_triangle_mesh(test_common::data_path("sliver_tet.ply"), V, F);
  66. Eigen::VectorXi I(F.rows());
  67. I.setLinSpaced(F.rows(), 0, F.rows()-1);
  68. Eigen::Index fid = F.rows() + 1;
  69. bool flipped;
  70. igl::copyleft::cgal::outer_facet(V, F, I, fid, flipped);
  71. REQUIRE (F.rows() > fid);
  72. REQUIRE (!flipped);
  73. }