main.cpp 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. #include "contours.h"
  2. #include <igl/opengl/glfw/Viewer.h>
  3. int main(int argc, char * argv[])
  4. {
  5. Eigen::MatrixXd V;
  6. Eigen::MatrixXi E;
  7. Eigen::MatrixXd VV;
  8. Eigen::MatrixXi FF;
  9. Eigen::MatrixXd NN;
  10. Eigen::MatrixXd mcV;
  11. Eigen::MatrixXi mcF;
  12. Eigen::MatrixXd mcN;
  13. contours(V,E,VV,FF,NN,mcV,mcF,mcN);
  14. igl::opengl::glfw::Viewer vr;
  15. bool show_edges = true;
  16. bool use_dc = true;
  17. const auto update = [&]()
  18. {
  19. const bool was_face_based = vr.data().face_based ;
  20. vr.data().clear();
  21. if(use_dc)
  22. {
  23. vr.data().set_mesh(VV,FF);
  24. vr.data().show_lines = false;
  25. vr.data().set_normals(NN);
  26. if(show_edges)
  27. {
  28. vr.data().clear_edges();
  29. vr.data().set_edges(V,E,Eigen::RowVector3d(0,0,0));
  30. }
  31. }else
  32. {
  33. vr.data().set_mesh(mcV,mcF);
  34. vr.data().set_normals(mcN);
  35. vr.data().show_lines = show_edges;
  36. }
  37. vr.data().face_based = was_face_based;
  38. };
  39. update();
  40. vr.data().face_based = true;
  41. vr.callback_key_pressed = [&](decltype(vr) &,unsigned int key, int mod)
  42. {
  43. switch(key)
  44. {
  45. case ' ': use_dc=!use_dc; update();return true;
  46. case 'L': case 'l': show_edges=!show_edges; update();return true;
  47. }
  48. return false;
  49. };
  50. std::cout<<R"(
  51. [space] Toggle between dual contouring and marching cubes
  52. )";
  53. vr.launch();
  54. }