main.cpp 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. #ifndef IGL_VIEWER_WITH_NANOGUI
  2. #include <iostream>
  3. int main()
  4. {
  5. std::cerr<<
  6. "Error: recompile with LIBIGL_VIEWER_WITH_NANOGUI defined."<<std::endl;
  7. return EXIT_FAILURE;
  8. }
  9. #else
  10. #include <igl/readOFF.h>
  11. #include <igl/viewer/Viewer.h>
  12. #include <nanogui/formhelper.h>
  13. #include <nanogui/screen.h>
  14. #include <iostream>
  15. #include "tutorial_shared_path.h"
  16. int main(int argc, char *argv[])
  17. {
  18. Eigen::MatrixXd V;
  19. Eigen::MatrixXi F;
  20. bool boolVariable = true;
  21. float floatVariable = 0.1f;
  22. enum Orientation { Up=0,Down,Left,Right } dir = Up;
  23. // Load a mesh in OFF format
  24. igl::readOFF(TUTORIAL_SHARED_PATH "/bunny.off", V, F);
  25. // Init the viewer
  26. igl::viewer::Viewer viewer;
  27. // Extend viewer menu
  28. viewer.callback_init = [&](igl::viewer::Viewer& viewer)
  29. {
  30. // Add new group
  31. viewer.ngui->addGroup("New Group");
  32. // Expose variable directly ...
  33. viewer.ngui->addVariable("float",floatVariable);
  34. // ... or using a custom callback
  35. viewer.ngui->addVariable<bool>("bool",[&](bool val) {
  36. boolVariable = val; // set
  37. },[&]() {
  38. return boolVariable; // get
  39. });
  40. // Expose an enumaration type
  41. viewer.ngui->addVariable<Orientation>("Direction",dir)->setItems({"Up","Down","Left","Right"});
  42. // Add a button
  43. viewer.ngui->addButton("Print Hello",[](){ std::cout << "Hello\n"; });
  44. // Add an additional menu window
  45. viewer.ngui->addWindow(Eigen::Vector2i(220,10),"New Window");
  46. // Expose the same variable directly ...
  47. viewer.ngui->addVariable("float",floatVariable);
  48. // Generate menu
  49. viewer.screen->performLayout();
  50. return false;
  51. };
  52. // Plot the mesh
  53. viewer.data.set_mesh(V, F);
  54. viewer.launch();
  55. }
  56. #endif