qslim.cpp 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. #include <test_common.h>
  2. #include <igl/qslim.h>
  3. #include <igl/cylinder.h>
  4. #include <igl/upsample.h>
  5. #include <igl/point_mesh_squared_distance.h>
  6. //#include <igl/hausdorff.h>
  7. #include <igl/writePLY.h>
  8. TEST_CASE("qslim: cylinder", "[igl]")
  9. {
  10. using namespace igl;
  11. const int axis_devisions = 5;
  12. const int height_devisions = 2+10;
  13. Eigen::MatrixXd V;
  14. Eigen::MatrixXi F;
  15. cylinder(axis_devisions,height_devisions,V,F);
  16. Eigen::MatrixXd U;
  17. Eigen::MatrixXi G;
  18. Eigen::VectorXi I,J;
  19. qslim(V,F,2*axis_devisions,U,G,I,J);
  20. REQUIRE (U.rows() == axis_devisions*2);
  21. double l,u;
  22. igl::writePLY("qslim-cylinder-vf.ply",V,F);
  23. igl::writePLY("qslim-cylinder-ug.ply",U,G);
  24. const auto & hausdorff_lower_bound = [](
  25. const Eigen::MatrixXd & V,
  26. const Eigen::MatrixXi & F,
  27. Eigen::MatrixXd & U,
  28. Eigen::MatrixXi & G)->double
  29. {
  30. Eigen::MatrixXd Vk;
  31. Eigen::MatrixXi Fk;
  32. igl::upsample(V,F,Vk,Fk,5);
  33. Eigen::MatrixXd C;
  34. Eigen::VectorXi I;
  35. Eigen::VectorXd D;
  36. igl::point_mesh_squared_distance(Vk,U,G,D,I,C);
  37. return D.array().sqrt().maxCoeff();
  38. };
  39. //igl::hausdorff(V,F,U,G,1e-14,l,u);
  40. REQUIRE (0 == Approx (hausdorff_lower_bound(V,F,U,G)).margin(2e-10));
  41. //igl::hausdorff(U,G,V,F,1e-14,l,u);
  42. REQUIRE (0 == Approx (hausdorff_lower_bound(U,G,V,F)).margin(2e-10));
  43. }