py_igl_viewer.cpp 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. #include <Eigen/Dense>
  2. #include <Eigen/Sparse>
  3. #include "python.h"
  4. #include <igl/viewer/Viewer.h>
  5. #include <igl/viewer/ViewerCore.h>
  6. void python_export_igl_viewer(py::module &m)
  7. {
  8. py::module me = m.def_submodule(
  9. "viewer", "Mesh viewer");
  10. /////////////////////// DATA
  11. py::class_<igl::viewer::ViewerData> viewerdata_class(me, "ViewerData");
  12. viewerdata_class
  13. .def(py::init<>())
  14. .def("set_mesh", &igl::viewer::ViewerData::set_mesh)
  15. .def("set_colors", &igl::viewer::ViewerData::set_colors)
  16. .def("clear", &igl::viewer::ViewerData::clear)
  17. ;
  18. //////////////////////// CORE
  19. py::class_<igl::viewer::ViewerCore> viewercore_class(me, "ViewerCore");
  20. viewercore_class
  21. .def(py::init<>())
  22. //.def("align_camera_center", [](igl::viewer::ViewerCore& core, const Eigen::MatrixXd& V, const Eigen::MatrixXi& F){return core.align_camera_center(V,F);})
  23. .def("init", &igl::viewer::ViewerCore::init)
  24. .def("shut", &igl::viewer::ViewerCore::shut)
  25. //.def("InitSerialization", &igl::viewer::ViewerCore::InitSerialization)
  26. .def("align_camera_center",
  27. (void (igl::viewer::ViewerCore::*) (const Eigen::MatrixXd &, const Eigen::MatrixXi &)) &igl::viewer::ViewerCore::align_camera_center
  28. )
  29. .def("align_camera_center",
  30. (void (igl::viewer::ViewerCore::*) (const Eigen::MatrixXd &)) &igl::viewer::ViewerCore::align_camera_center
  31. )
  32. .def("clear_framebuffers",&igl::viewer::ViewerCore::clear_framebuffers)
  33. .def("draw",&igl::viewer::ViewerCore::draw)
  34. .def("draw_buffer",&igl::viewer::ViewerCore::draw_buffer)
  35. .def_readwrite("textrenderer",&igl::viewer::ViewerCore::textrenderer)
  36. .def_readwrite("shininess",&igl::viewer::ViewerCore::shininess)
  37. .def_property("background_color",
  38. [](const igl::viewer::ViewerCore& core) {return Eigen::MatrixXd(core.background_color);},
  39. [](igl::viewer::ViewerCore& core, const Eigen::MatrixXd& v)
  40. {
  41. assert_is_Vector3d("background_color",v);
  42. core.background_color = Vector3f(v.cast<float>());
  43. })
  44. // // Colors
  45. // Eigen::Vector3f background_color;
  46. // Eigen::Vector3f line_color;
  47. //
  48. // // Lighting
  49. // Eigen::Vector3f light_position;
  50. // float lighting_factor;
  51. //
  52. // // Trackball angle (quaternion)
  53. // enum RotationType
  54. // {
  55. // ROTATION_TYPE_TRACKBALL = 0,
  56. // ROTATION_TYPE_TWO_AXIS_VALUATOR_FIXED_UP = 1,
  57. // NUM_ROTATION_TYPES = 2
  58. // } rotation_type;
  59. // Eigen::Quaternionf trackball_angle;
  60. //
  61. // // Model viewing parameters
  62. // float model_zoom;
  63. // Eigen::Vector3f model_translation;
  64. //
  65. // // Model viewing paramters (uv coordinates)
  66. // float model_zoom_uv;
  67. // Eigen::Vector3f model_translation_uv;
  68. //
  69. // // Camera parameters
  70. // float camera_zoom;
  71. // bool orthographic;
  72. // Eigen::Vector3f camera_eye;
  73. // Eigen::Vector3f camera_up;
  74. // Eigen::Vector3f camera_center;
  75. // float camera_view_angle;
  76. // float camera_dnear;
  77. // float camera_dfar;
  78. //
  79. // // Visualization options
  80. // bool show_overlay;
  81. // bool show_overlay_depth;
  82. // bool show_texture;
  83. // bool show_faces;
  84. // bool show_lines;
  85. // bool show_vertid;
  86. // bool show_faceid;
  87. // bool invert_normals;
  88. // bool depth_test;
  89. //
  90. // // Point size / line width
  91. // float point_size;
  92. // float line_width;
  93. //
  94. // // Animation
  95. // bool is_animating;
  96. // double animation_max_fps;
  97. //
  98. // // Caches the two-norm between the min/max point of the bounding box
  99. // float object_scale;
  100. //
  101. // // Viewport size
  102. // Eigen::Vector4f viewport;
  103. //
  104. // // Save the OpenGL transformation matrices used for the previous rendering pass
  105. // Eigen::Matrix4f view;
  106. // Eigen::Matrix4f model;
  107. // Eigen::Matrix4f proj;
  108. ///
  109. ;
  110. ///////////////////////// VIEWER
  111. py::class_<igl::viewer::Viewer>(me, "Viewer")
  112. .def(py::init<>())
  113. .def_readwrite("data", &igl::viewer::Viewer::data)
  114. .def_readwrite("core", &igl::viewer::Viewer::core)
  115. .def("launch", &igl::viewer::Viewer::launch, py::arg("resizable") = true, py::arg("fullscreen") = false)
  116. // Callbacks
  117. .def_readwrite("callback_init", &igl::viewer::Viewer::callback_init)
  118. .def_readwrite("callback_pre_draw", &igl::viewer::Viewer::callback_pre_draw)
  119. .def_readwrite("callback_post_draw", &igl::viewer::Viewer::callback_post_draw)
  120. .def_readwrite("callback_mouse_down", &igl::viewer::Viewer::callback_mouse_down)
  121. .def_readwrite("callback_mouse_up", &igl::viewer::Viewer::callback_mouse_up)
  122. .def_readwrite("callback_mouse_move", &igl::viewer::Viewer::callback_mouse_move)
  123. .def_readwrite("callback_mouse_scroll", &igl::viewer::Viewer::callback_mouse_scroll)
  124. .def_readwrite("callback_key_pressed", &igl::viewer::Viewer::callback_key_pressed)
  125. .def_readwrite("callback_key_down", &igl::viewer::Viewer::callback_key_down)
  126. .def_readwrite("callback_key_up", &igl::viewer::Viewer::callback_key_up)
  127. ;
  128. }