Browse Source

added event handling and 103 py tutorial

Former-commit-id: fccdc093a8745337fb8eac24761ab55f6df16182
Daniele Panozzo 9 years ago
parent
commit
3d31b33ce7
3 changed files with 33 additions and 20 deletions
  1. 12 16
      python/103_Events.py
  2. 20 4
      python/py_igl_viewer.cpp
  3. 1 0
      python/python.h

+ 12 - 16
python/103_Events.py

@@ -6,23 +6,22 @@ F1 = igl.eigen.MatrixXi()
 V2 = igl.eigen.MatrixXd()
 F2 = igl.eigen.MatrixXi()
 
-def key_down(viewer, key, modifier):
-    print("Key: ",key)
+def key_pressed(viewer, key, modifier):
+    print("Key: ", chr(key))
 
-    if key == 1:
-        # Clear should be called before drawing the mesh
+    if key == ord('1'):
+        # # Clear should be called before drawing the mesh
         viewer.data.clear();
-        # Draw_mesh creates or updates the vertices and faces of the displayed mesh.
-        # If a mesh is already displayed, draw_mesh returns an error if the given V and
-        # F have size different than the current ones
+        # # Draw_mesh creates or updates the vertices and faces of the displayed mesh.
+        # # If a mesh is already displayed, draw_mesh returns an error if the given V and
+        # # F have size different than the current ones
         viewer.data.set_mesh(V1, F1);
         viewer.core.align_camera_center(V1,F1);
-    elif key == 2:
+    elif key == ord('2'):
         viewer.data.clear();
         viewer.data.set_mesh(V2, F2);
         viewer.core.align_camera_center(V2,F2);
-
-  return False;
+    return False
 
 
 #  Load two meshes
@@ -36,9 +35,6 @@ viewer = igl.viewer.Viewer()
 
 # Register a keyboard callback that allows to switch between
 # the two loaded meshes
-
-viewer.callback_key_down = key_down;
-viewer.data.set_mesh(V1, F1);
-viewer.launch();
-
-}
+viewer.callback_key_pressed = key_pressed
+viewer.data.set_mesh(V1, F1)
+viewer.launch()

+ 20 - 4
python/py_igl_viewer.cpp

@@ -3,9 +3,11 @@
 
 #include "python.h"
 #include <igl/viewer/Viewer.h>
+#include <igl/viewer/ViewerCore.h>
 
 void python_export_igl_viewer(py::module &m)
 {
+
   py::module me = m.def_submodule(
     "viewer", "Mesh viewer");
 
@@ -13,21 +15,35 @@ void python_export_igl_viewer(py::module &m)
     viewerdata_class
     .def(py::init<>())
     .def("set_mesh", &igl::viewer::ViewerData::set_mesh)
+    .def("clear", &igl::viewer::ViewerData::clear)
     ;
 
     py::class_<igl::viewer::ViewerCore> viewercore_class(me, "ViewerCore");
     viewercore_class
     .def(py::init<>())
-    .def("align_camera_center", [](igl::viewer::ViewerCore& core, const Eigen::MatrixXd& V, const Eigen::MatrixXi& F){return core.align_camera_center(V,F);})
-    //.def("align_camera_center", &igl::viewer::ViewerCore::align_camera_center)
+    //.def("align_camera_center", [](igl::viewer::ViewerCore& core, const Eigen::MatrixXd& V, const Eigen::MatrixXi& F){return core.align_camera_center(V,F);})
+    .def("align_camera_center",
+       (void (igl::viewer::ViewerCore::*) (const Eigen::MatrixXd &, const Eigen::MatrixXi &)) &igl::viewer::ViewerCore::align_camera_center
+    )
     .def("init", &igl::viewer::ViewerCore::init)
     ;
 
-    py::class_<igl::viewer::Viewer> viewer_class(me, "Viewer");
-    viewer_class
+    py::class_<igl::viewer::Viewer>(me, "Viewer")
     .def(py::init<>())
     .def_readwrite("data", &igl::viewer::Viewer::data)
     .def_readwrite("core", &igl::viewer::Viewer::core)
     .def("launch", &igl::viewer::Viewer::launch, py::arg("resizable") = true, py::arg("fullscreen") = false)
+
+    // Callbacks
+    .def_readwrite("callback_init", &igl::viewer::Viewer::callback_init)
+    .def_readwrite("callback_pre_draw", &igl::viewer::Viewer::callback_pre_draw)
+    .def_readwrite("callback_post_draw", &igl::viewer::Viewer::callback_post_draw)
+    .def_readwrite("callback_mouse_down", &igl::viewer::Viewer::callback_mouse_down)
+    .def_readwrite("callback_mouse_up", &igl::viewer::Viewer::callback_mouse_up)
+    .def_readwrite("callback_mouse_move", &igl::viewer::Viewer::callback_mouse_move)
+    .def_readwrite("callback_mouse_scroll", &igl::viewer::Viewer::callback_mouse_scroll)
+    .def_readwrite("callback_key_pressed", &igl::viewer::Viewer::callback_key_pressed)
+    .def_readwrite("callback_key_down", &igl::viewer::Viewer::callback_key_down)
+    .def_readwrite("callback_key_up", &igl::viewer::Viewer::callback_key_up)
     ;
 }

+ 1 - 0
python/python.h

@@ -5,6 +5,7 @@
 #include <pybind/complex.h>
 #include <pybind/numpy.h>
 #include <pybind/stl.h>
+#include <pybind/functional.h>
 
 #include "py_doc.h"