2
0

trim_with_solid.cpp 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. #include <test_common.h>
  2. #include <igl/copyleft/cgal/trim_with_solid.h>
  3. #include <igl/matlab_format.h>
  4. #include <iostream>
  5. TEST_CASE("trim_with_solid: triangle-vs-tet", "[igl/copyleft/cgal]")
  6. {
  7. // Single Tet
  8. Eigen::MatrixXd VB(4,3);
  9. VB<<
  10. 0,0,0,
  11. 1,0,0,
  12. 0,1,0,
  13. 0,0,1;
  14. Eigen::MatrixXi FB(4,3);
  15. FB<<
  16. 0,1,3,
  17. 0,2,1,
  18. 0,3,2,
  19. 1,2,3;
  20. Eigen::MatrixXd VA(3,3);
  21. VA<<
  22. 0.2,0.2,0.2,
  23. 0.8,0.2,0.2,
  24. 0.2,0.8,0.2;
  25. Eigen::MatrixXi FA(1,3);
  26. FA<<0,1,2;
  27. using namespace igl::copyleft::cgal;
  28. Eigen::MatrixXd V;
  29. Eigen::MatrixXi F;
  30. Eigen::Array<bool,Eigen::Dynamic,1> D;
  31. Eigen::VectorXi J;
  32. const auto test = [&]()
  33. {
  34. REQUIRE(V.rows() == 5);
  35. REQUIRE(F.rows() == 3);
  36. REQUIRE(D.size() == F.rows());
  37. REQUIRE(J.size() == F.rows());
  38. REQUIRE(D.count() == 2);
  39. REQUIRE((J.array() == 0).count() == 3);
  40. };
  41. igl::copyleft::cgal::trim_with_solid(VA,FA,VB,FB,CHECK_EACH_FACE,V,F,D,J);
  42. test();
  43. igl::copyleft::cgal::trim_with_solid(VA,FA,VB,FB,CHECK_EACH_PATCH,V,F,D,J);
  44. test();
  45. igl::copyleft::cgal::trim_with_solid(VA,FA,VB,FB,RESOLVE_BOTH_AND_RESTORE_THEN_CHECK_EACH_PATCH,V,F,D,J);
  46. test();
  47. }
  48. TEST_CASE("trim_with_solid: two-vs-cube", "[igl/copyleft/cgal]")
  49. {
  50. Eigen::MatrixXd VA(6,3);
  51. VA<<
  52. 3.5301513671875,77.03765869140625,1.3964500427246094,
  53. 3.5709075927734375,77.055023193359375,1.396728515625,
  54. 4.4851531982421875,78.03460693359375,1.6064491271972656,
  55. 3.6009368896484375,77.064865112304688,1.50128173828125,
  56. 3.613006591796875,77.075912475585938,1.5090217590332031,
  57. 4.2685699462890625,77.5335693359375,1.6356697082519531;
  58. Eigen::MatrixXi FA(2,3);
  59. FA<<
  60. 1,2,3,
  61. 0,4,5;
  62. Eigen::MatrixXd VB(8,3);
  63. VB<<
  64. -1.8674041748046903,-5.6647888183593835,-0.071252098083496196,
  65. -1.8674041748046903,118.96056518554688,-0.071252098083496196,
  66. 39.21548767089844,-5.6647888183593835,-0.071252098083496196,
  67. 39.21548767089844,118.96056518554688,-0.071252098083496196,
  68. 39.21548767089844,-5.6647888183593835,1.496294059753418,
  69. 39.21548767089844,118.96056518554688,1.496294059753418,
  70. -1.8674041748046903,-5.6647888183593835,1.496294059753418,
  71. -1.8674041748046903,118.96056518554688,1.496294059753418;
  72. Eigen::MatrixXi FB(12,3);
  73. FB<<
  74. 1,2,0,
  75. 1,3,2,
  76. 3,4,2,
  77. 3,5,4,
  78. 0,4,6,
  79. 0,2,4,
  80. 7,3,1,
  81. 7,5,3,
  82. 7,0,6,
  83. 7,1,0,
  84. 5,6,4,
  85. 5,7,6;
  86. using namespace igl::copyleft::cgal;
  87. Eigen::MatrixXd V;
  88. Eigen::MatrixXi F;
  89. Eigen::Array<bool,Eigen::Dynamic,1> D;
  90. Eigen::VectorXi J;
  91. const auto test = [&]()
  92. {
  93. REQUIRE(V.rows() >= VA.rows());
  94. REQUIRE(FA.rows() == FA.rows());
  95. REQUIRE(D.size() == F.rows());
  96. REQUIRE(J.size() == F.rows());
  97. // some in some out
  98. REQUIRE( (D.array() == false).count() != 0);
  99. REQUIRE( (D.array() == true).count() != 0);
  100. };
  101. igl::copyleft::cgal::trim_with_solid(VA,FA,VB,FB,CHECK_EACH_FACE,V,F,D,J);
  102. test();
  103. igl::copyleft::cgal::trim_with_solid(VA,FA,VB,FB,CHECK_EACH_PATCH,V,F,D,J);
  104. test();
  105. igl::copyleft::cgal::trim_with_solid(VA,FA,VB,FB,RESOLVE_BOTH_AND_RESTORE_THEN_CHECK_EACH_PATCH,V,F,D,J);
  106. test();
  107. }