main.cpp 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. #include "tutorial_shared_path.h"
  2. #include <igl/opengl/glfw/Viewer.h>
  3. #include <GLFW/glfw3.h>
  4. #include <string>
  5. #include <iostream>
  6. // Add custom data to a viewer mesh
  7. struct MeshData
  8. {
  9. Eigen::RowVector3d color;
  10. };
  11. int main(int argc, char * argv[])
  12. {
  13. igl::opengl::glfw::Viewer viewer;
  14. const auto names =
  15. {"cube.obj","sphere.obj","xcylinder.obj","ycylinder.obj","zcylinder.obj"};
  16. for(const auto & name : names)
  17. {
  18. viewer.load_mesh_from_file(std::string(TUTORIAL_SHARED_PATH) + "/" + name);
  19. viewer.data().attr<MeshData>().color = 0.5*Eigen::RowVector3d::Random().array() + 0.5;
  20. }
  21. viewer.callback_key_down =
  22. [&](igl::opengl::glfw::Viewer &, unsigned int key, int mod)
  23. {
  24. if(key == GLFW_KEY_BACKSPACE)
  25. {
  26. viewer.erase_mesh(viewer.selected_data_index);
  27. return true;
  28. }
  29. return false;
  30. };
  31. // Refresh selected mesh colors
  32. viewer.callback_pre_draw =
  33. [&](igl::opengl::glfw::Viewer &)
  34. {
  35. static int last_selected = -1;
  36. if (last_selected != viewer.selected_data_index)
  37. {
  38. for (auto &data : viewer.data_list)
  39. {
  40. data.set_colors(data.attr<MeshData>().color);
  41. }
  42. viewer.data_list[viewer.selected_data_index].set_colors(Eigen::RowVector3d(0.9,0.1,0.1));
  43. last_selected = viewer.selected_data_index;
  44. }
  45. return false;
  46. };
  47. viewer.launch();
  48. return EXIT_SUCCESS;
  49. }