boundary_facets.cpp 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. #include <test_common.h>
  2. #include <igl/boundary_facets.h>
  3. #include <igl/sort.h>
  4. #include <igl/sortrows.h>
  5. #include <igl/setxor.h>
  6. TEST_CASE("boundary_facets: single_tet", "[igl]")
  7. {
  8. const Eigen::MatrixXi T =
  9. (Eigen::MatrixXi(1,4)<<0,1,2,3).finished();
  10. Eigen::MatrixXi F;
  11. Eigen::MatrixXi J;
  12. Eigen::MatrixXi K;
  13. igl::boundary_facets(T,F);
  14. REQUIRE( F.rows () == 4 );
  15. // sorted! (unoriented)
  16. const Eigen::MatrixXi sorted_Fgt =
  17. (Eigen::MatrixXi(4,3) <<
  18. 0,1,2,
  19. 0,1,3,
  20. 0,2,3,
  21. 1,2,3).finished();
  22. Eigen::MatrixXi sorted_F;
  23. {
  24. Eigen::MatrixXi _1;
  25. igl::sort(F,2,true, sorted_F,_1);
  26. igl::sortrows(Eigen::MatrixXi(sorted_F),true,sorted_F,_1);
  27. }
  28. test_common::assert_eq(sorted_Fgt,sorted_F);
  29. }
  30. TEST_CASE("boundary_facets: single_cube", "[igl]")
  31. {
  32. const Eigen::MatrixXi T =
  33. (Eigen::MatrixXi(6,4)<<
  34. 0,1,7,5,
  35. 0,7,4,5,
  36. 0,1,3,7,
  37. 0,3,2,7,
  38. 0,6,4,7,
  39. 0,2,6,7).finished();
  40. const Eigen::MatrixXi Fgt =
  41. (Eigen::MatrixXi(12,3)<<
  42. 0,5,4,
  43. 0,1,5,
  44. 6,7,2,
  45. 7,3,2,
  46. 4,6,0,
  47. 6,2,0,
  48. 1,7,5,
  49. 1,3,7,
  50. 0,3,1,
  51. 0,2,3,
  52. 5,7,4,
  53. 7,6,4).finished();
  54. Eigen::MatrixXi F;
  55. igl::boundary_facets(T,F);
  56. const auto sortF = [](const Eigen::MatrixXi & F)-> Eigen::MatrixXi
  57. {
  58. Eigen::MatrixXi sorted_F;
  59. Eigen::MatrixXi _1;
  60. igl::sort(F,2,true, sorted_F,_1);
  61. igl::sortrows(Eigen::MatrixXi(sorted_F),true,sorted_F,_1);
  62. return sorted_F;
  63. };
  64. Eigen::MatrixXi sorted_F = sortF(F);
  65. Eigen::MatrixXi sorted_Fgt = sortF(Fgt);
  66. test_common::assert_eq(sorted_Fgt,sorted_F);
  67. }