Преглед изворни кода

fixing py tutorials
fixing runtime errors introduced by updating to pybind 2.2


Former-commit-id: ac4ffe243440cbce71f550a942fd498f18a51891

Daniele Panozzo пре 7 година
родитељ
комит
53ee86a4ab

+ 4 - 0
python/modules/py_typedefs.h

@@ -7,6 +7,10 @@
 // obtain one at http://mozilla.org/MPL/2.0/.
 #include <pybind11/pybind11.h>
 #include <pybind11/stl_bind.h>
+#include <pybind11/stl.h>
+#include <pybind11/complex.h>
+#include <pybind11/functional.h>
+#include <pybind11/chrono.h>
 
 typedef std::vector<Eigen::Quaterniond,Eigen::aligned_allocator<Eigen::Quaterniond> > RotationList;
 PYBIND11_MAKE_OPAQUE(RotationList)

+ 4 - 4
python/tutorial/104_Colors.py

@@ -13,7 +13,7 @@ import pyigl as igl
 
 from shared import TUTORIAL_SHARED_PATH, check_dependencies
 
-dependencies = ["viewer"]
+dependencies = ["glfw"]
 check_dependencies(dependencies)
 
 
@@ -25,8 +25,8 @@ C = igl.eigen.MatrixXd()
 igl.readOFF(TUTORIAL_SHARED_PATH + "screwdriver.off", V, F)
 
 # Plot the mesh
-viewer = igl.viewer.Viewer()
-viewer.data.set_mesh(V, F)
+viewer = igl.glfw.Viewer()
+viewer.data().set_mesh(V, F)
 
 # Use the z coordinate as a scalar field over the surface
 Z = V.col(2)
@@ -35,7 +35,7 @@ Z = V.col(2)
 igl.jet(Z, True, C)
 
 # Add per-vertex colors
-viewer.data.set_colors(C)
+viewer.data().set_colors(C)
 
 # Launch the viewer
 viewer.launch()

+ 23 - 23
python/tutorial/105_Overlays.py

@@ -13,7 +13,7 @@ import pyigl as igl
 
 from shared import TUTORIAL_SHARED_PATH, check_dependencies
 
-dependencies = ["viewer"]
+dependencies = ["glfw"]
 check_dependencies(dependencies)
 
 
@@ -41,43 +41,43 @@ V_box = igl.eigen.MatrixXd(
     ]
 )
 
-E_box = igl.eigen.MatrixXi(
-    [
-        [0, 1],
-        [1, 2],
-        [2, 3],
-        [3, 0],
-        [4, 5],
-        [5, 6],
-        [6, 7],
-        [7, 4],
-        [0, 4],
-        [1, 5],
-        [2, 6],
-        [7, 3]
-    ]
-)
+E_box = igl.eigen.MatrixXd(
+        [
+            [0, 1],
+            [1, 2],
+            [2, 3],
+            [3, 0],
+            [4, 5],
+            [5, 6],
+            [6, 7],
+            [7, 4],
+            [0, 4],
+            [1, 5],
+            [2, 6],
+            [7, 3]
+        ]
+).castint()
 
 # Plot the mesh
-viewer = igl.viewer.Viewer()
-viewer.data.set_mesh(V, F)
+viewer = igl.glfw.Viewer()
+viewer.data().set_mesh(V, F)
 
 # Plot the corners of the bounding box as points
-viewer.data.add_points(V_box, igl.eigen.MatrixXd([[1, 0, 0]]))
+viewer.data().add_points(V_box, igl.eigen.MatrixXd([[1, 0, 0]]))
 
 # Plot the edges of the bounding box
 for i in range(0, E_box.rows()):
-    viewer.data.add_edges(
+    viewer.data().add_edges(
         V_box.row(E_box[i, 0]),
         V_box.row(E_box[i, 1]),
         igl.eigen.MatrixXd([[1, 0, 0]]))
 
 # Plot labels with the coordinates of bounding box vertices
 l1 = 'x: ' + str(m[0, 0]) + ' y: ' + str(m[0, 1]) + ' z: ' + str(m[0, 2])
-viewer.data.add_label(m.transpose(), l1)
+viewer.data().add_label(m.transpose(), l1)
 
 l2 = 'x: ' + str(M[0, 0]) + ' y: ' + str(M[0, 1]) + ' z: ' + str(M[0, 2])
-viewer.data.add_label(M.transpose(), l2)
+viewer.data().add_label(M.transpose(), l2)
 
 # Launch the viewer
 viewer.launch()

+ 8 - 8
python/tutorial/201_Normals.py

@@ -13,7 +13,7 @@ import pyigl as igl
 
 from shared import TUTORIAL_SHARED_PATH, check_dependencies
 
-dependencies = ["viewer"]
+dependencies = ["glfw"]
 check_dependencies(dependencies)
 
 
@@ -28,13 +28,13 @@ N_corners = igl.eigen.MatrixXd()
 # This function is called every time a keyboard button is pressed
 def key_pressed(viewer, key, modifier):
     if key == ord('1'):
-        viewer.data.set_normals(N_faces)
+        viewer.data().set_normals(N_faces)
         return True
     elif key == ord('2'):
-        viewer.data.set_normals(N_vertices)
+        viewer.data().set_normals(N_vertices)
         return True
     elif key == ord('3'):
-        viewer.data.set_normals(N_corners)
+        viewer.data().set_normals(N_corners)
         return True
     return False
 
@@ -55,11 +55,11 @@ N_corners = igl.eigen.MatrixXd()
 igl.per_corner_normals(V, F, 20, N_corners)
 
 # Plot the mesh
-viewer = igl.viewer.Viewer()
+viewer = igl.glfw.Viewer()
 viewer.callback_key_pressed = key_pressed
-viewer.core.show_lines = False
-viewer.data.set_mesh(V, F)
-viewer.data.set_normals(N_faces)
+viewer.data().show_lines = False
+viewer.data().set_mesh(V, F)
+viewer.data().set_normals(N_faces)
 print("Press '1' for per-face normals.")
 print("Press '2' for per-vertex normals.")
 print("Press '3' for per-corner normals.")

+ 4 - 4
python/tutorial/202_GaussianCurvature.py

@@ -13,7 +13,7 @@ import pyigl as igl
 
 from shared import TUTORIAL_SHARED_PATH, check_dependencies
 
-dependencies = ["viewer"]
+dependencies = ["glfw"]
 check_dependencies(dependencies)
 
 
@@ -31,7 +31,7 @@ C = igl.eigen.MatrixXd()
 igl.jet(K, True, C)
 
 # Plot the mesh with pseudocolors
-viewer = igl.viewer.Viewer()
-viewer.data.set_mesh(V, F)
-viewer.data.set_colors(C)
+viewer = igl.glfw.Viewer()
+viewer.data().set_mesh(V, F)
+viewer.data().set_colors(C)
 viewer.launch()

+ 7 - 7
python/tutorial/203_CurvatureDirections.py

@@ -13,7 +13,7 @@ import pyigl as igl
 
 from shared import TUTORIAL_SHARED_PATH, check_dependencies
 
-dependencies = ["viewer"]
+dependencies = ["glfw"]
 check_dependencies(dependencies)
 
 
@@ -50,14 +50,14 @@ igl.principal_curvature(V, F, PD1, PD2, PV1, PV2)
 # Mean curvature
 H = 0.5 * (PV1 + PV2)
 
-viewer = igl.viewer.Viewer()
-viewer.data.set_mesh(V, F)
+viewer = igl.glfw.Viewer()
+viewer.data().set_mesh(V, F)
 
 # Compute pseudocolor
 C = igl.eigen.MatrixXd()
 igl.parula(H, True, C)
 
-viewer.data.set_colors(C)
+viewer.data().set_colors(C)
 
 # Average edge length for sizing
 avg = igl.avg_edge_length(V, F)
@@ -66,12 +66,12 @@ avg = igl.avg_edge_length(V, F)
 red = igl.eigen.MatrixXd([[0.8, 0.2, 0.2]])
 blue = igl.eigen.MatrixXd([[0.2, 0.2, 0.8]])
 
-viewer.data.add_edges(V + PD1 * avg, V - PD1 * avg, blue)
+viewer.data().add_edges(V + PD1 * avg, V - PD1 * avg, blue)
 
 # Draw a red segment parallel to the maximal curvature direction
-viewer.data.add_edges(V + PD2 * avg, V - PD2 * avg, red)
+viewer.data().add_edges(V + PD2 * avg, V - PD2 * avg, red)
 
 # Hide wireframe
-viewer.core.show_lines = False
+viewer.data().show_lines = False
 
 viewer.launch()

+ 6 - 6
python/tutorial/204_Gradient.py

@@ -13,7 +13,7 @@ import pyigl as igl
 
 from shared import TUTORIAL_SHARED_PATH, check_dependencies
 
-dependencies = ["viewer"]
+dependencies = ["glfw"]
 check_dependencies(dependencies)
 
 
@@ -38,8 +38,8 @@ GU = (G * U).MapMatrix(F.rows(), 3)
 # Compute gradient magnitude
 GU_mag = GU.rowwiseNorm()
 
-viewer = igl.viewer.Viewer()
-viewer.data.set_mesh(V, F)
+viewer = igl.glfw.Viewer()
+viewer.data().set_mesh(V, F)
 
 # Compute pseudocolor for original function
 C = igl.eigen.MatrixXd()
@@ -49,7 +49,7 @@ igl.jet(U, True, C)
 # Or for gradient magnitude
 # igl.jet(GU_mag,True,C)
 
-viewer.data.set_colors(C)
+viewer.data().set_colors(C)
 
 # Average edge length divided by average gradient (for scaling)
 max_size = igl.avg_edge_length(V, F) / GU_mag.mean()
@@ -59,9 +59,9 @@ BC = igl.eigen.MatrixXd()
 igl.barycenter(V, F, BC)
 
 black = igl.eigen.MatrixXd([[0.0, 0.0, 0.0]])
-viewer.data.add_edges(BC, BC + max_size * GU, black)
+viewer.data().add_edges(BC, BC + max_size * GU, black)
 
 # Hide wireframe
-viewer.core.show_lines = False
+viewer.data().show_lines = False
 
 viewer.launch()

+ 6 - 6
python/tutorial/205_Laplacian.py

@@ -14,7 +14,7 @@ import pyigl as igl
 
 from shared import TUTORIAL_SHARED_PATH, check_dependencies
 
-dependencies = ["viewer"]
+dependencies = ["glfw"]
 check_dependencies(dependencies)
 
 
@@ -23,7 +23,7 @@ U = igl.eigen.MatrixXd()
 F = igl.eigen.MatrixXi()
 
 L = igl.eigen.SparseMatrixd()
-viewer = igl.viewer.Viewer()
+viewer = igl.glfw.Viewer()
 
 # Load a mesh in OFF format
 igl.readOFF(TUTORIAL_SHARED_PATH + "cow.off", V, F)
@@ -97,8 +97,8 @@ def key_pressed(viewer, key, modifier):
         return False
 
     # Send new positions, update normals, recenter
-    viewer.data.set_vertices(U)
-    viewer.data.compute_normals()
+    viewer.data().set_vertices(U)
+    viewer.data().compute_normals()
     viewer.core.align_camera_center(U, F)
     return True
 
@@ -110,8 +110,8 @@ C = N.rowwiseNormalized() * 0.5 + 0.5
 
 # Initialize smoothing with base mesh
 U = V
-viewer.data.set_mesh(U, F)
-viewer.data.set_colors(C)
+viewer.data().set_mesh(U, F)
+viewer.data().set_colors(C)
 viewer.callback_key_pressed = key_pressed
 
 print("Press [space] to smooth.")

+ 4 - 4
python/tutorial/301_Slice.py

@@ -13,7 +13,7 @@ import pyigl as igl
 
 from shared import TUTORIAL_SHARED_PATH, check_dependencies
 
-dependencies = ["viewer"]
+dependencies = ["glfw"]
 check_dependencies(dependencies)
 
 V = igl.eigen.MatrixXd()
@@ -44,7 +44,7 @@ R = igl.eigen.MatrixXd([[1.0, 0.3, 0.3]]).replicate(K.rows(), 1)
 igl.slice_into(R, K, 1, C)
 
 # Plot the mesh with pseudocolors
-viewer = igl.viewer.Viewer()
-viewer.data.set_mesh(V, F)
-viewer.data.set_colors(C)
+viewer = igl.glfw.Viewer()
+viewer.data().set_mesh(V, F)
+viewer.data().set_colors(C)
 viewer.launch()

+ 4 - 4
python/tutorial/302_Sort.py

@@ -13,7 +13,7 @@ import pyigl as igl
 
 from shared import TUTORIAL_SHARED_PATH, check_dependencies
 
-dependencies = ["viewer"]
+dependencies = ["glfw"]
 check_dependencies(dependencies)
 
 
@@ -45,7 +45,7 @@ C = igl.eigen.MatrixXd()
 igl.jet(J.castdouble(), True, C)
 
 # Plot the mesh with pseudocolors
-viewer = igl.viewer.Viewer()
-viewer.data.set_mesh(V, F)
-viewer.data.set_colors(C)
+viewer = igl.glfw.Viewer()
+viewer.data().set_mesh(V, F)
+viewer.data().set_colors(C)
 viewer.launch()

+ 5 - 5
python/tutorial/303_LaplaceEquation.py

@@ -13,7 +13,7 @@ import pyigl as igl
 
 from shared import TUTORIAL_SHARED_PATH, check_dependencies
 
-dependencies = ["viewer"]
+dependencies = ["glfw"]
 check_dependencies(dependencies)
 
 V = igl.eigen.MatrixXd()
@@ -82,8 +82,8 @@ C = igl.eigen.MatrixXd()
 igl.jet(Z, True, C)
 
 # Plot the mesh with pseudocolors
-viewer = igl.viewer.Viewer()
-viewer.data.set_mesh(V, F)
-viewer.core.show_lines = False
-viewer.data.set_colors(C)
+viewer = igl.glfw.Viewer()
+viewer.data().set_mesh(V, F)
+viewer.data().show_lines = False
+viewer.data().set_colors(C)
 viewer.launch()

+ 8 - 8
python/tutorial/304_LinearEqualityConstraints.py

@@ -13,7 +13,7 @@ import pyigl as igl
 
 from shared import TUTORIAL_SHARED_PATH, check_dependencies
 
-dependencies = ["viewer"]
+dependencies = ["glfw"]
 check_dependencies(dependencies)
 
 
@@ -24,7 +24,7 @@ igl.readOFF(TUTORIAL_SHARED_PATH + "cheburashka.off", V, F)
 
 # Two fixed points
 # Left hand, left foot
-b = igl.eigen.MatrixXi([[4331], [5957]])
+b = igl.eigen.MatrixXd([[4331], [5957]]).castint()
 bc = igl.eigen.MatrixXd([[1], [-1]])
 
 # Construct Laplacian and mass matrix
@@ -82,10 +82,10 @@ igl.jet(Z, min_z, max_z, C)
 igl.jet(Z_const, min_z, max_z, C_const)
 
 # Plot the mesh with pseudocolors
-viewer = igl.viewer.Viewer()
-viewer.data.set_mesh(V, F)
-viewer.core.show_lines = False
-viewer.data.set_colors(C)
+viewer = igl.glfw.Viewer()
+viewer.data().set_mesh(V, F)
+viewer.data().show_lines = False
+viewer.data().set_colors(C)
 
 
 def key_down(viewer, key, mode):
@@ -93,9 +93,9 @@ def key_down(viewer, key, mode):
         global toggle, C, C_const
 
         if toggle:
-            viewer.data.set_colors(C)
+            viewer.data().set_colors(C)
         else:
-            viewer.data.set_colors(C_const)
+            viewer.data().set_colors(C_const)
 
         toggle = not toggle
         return True

+ 6 - 6
python/tutorial/305_QuadraticProgramming.py

@@ -13,7 +13,7 @@ import pyigl as igl
 
 from shared import TUTORIAL_SHARED_PATH, check_dependencies
 
-dependencies = ["viewer"]
+dependencies = ["glfw"]
 check_dependencies(dependencies)
 
 
@@ -40,7 +40,7 @@ def solve(viewer):
 
     C = igl.eigen.MatrixXd()
     igl.jet(Z, 0, 1, C)
-    viewer.data.set_colors(C)
+    viewer.data().set_colors(C)
 
 
 def key_down(viewer, key, mod):
@@ -65,13 +65,13 @@ F = igl.eigen.MatrixXi()
 igl.readOFF(TUTORIAL_SHARED_PATH + "cheburashka.off", V, F)
 
 # Plot the mesh
-viewer = igl.viewer.Viewer()
-viewer.data.set_mesh(V, F)
-viewer.core.show_lines = False
+viewer = igl.glfw.Viewer()
+viewer.data().set_mesh(V, F)
+viewer.data().show_lines = False
 viewer.callback_key_down = key_down
 
 # One fixed point on belly
-b = igl.eigen.MatrixXi([[2556]])
+b = igl.eigen.MatrixXd([[2556]]).castint()
 bc = igl.eigen.MatrixXd([[1]])
 
 # Construct Laplacian and mass matrix

+ 6 - 6
python/tutorial/306_EigenDecomposition.py

@@ -13,7 +13,7 @@ import pyigl as igl
 
 from shared import TUTORIAL_SHARED_PATH, check_dependencies
 
-dependencies = ["viewer"]
+dependencies = ["glfw"]
 check_dependencies(dependencies)
 
 
@@ -45,7 +45,7 @@ if not igl.eigs(L, M, k + 1, igl.EIGS_TYPE_SM, U, D):
 
 U = (U - U.minCoeff()) / (U.maxCoeff() - U.minCoeff())
 
-viewer = igl.viewer.Viewer()
+viewer = igl.glfw.Viewer()
 
 
 def key_down(viewer, key, mod):
@@ -63,14 +63,14 @@ def key_down(viewer, key, mod):
         if twod:
             V.setcol(2, Z)
 
-        viewer.data.set_mesh(V, F)
-        viewer.data.compute_normals()
-        viewer.data.set_colors(C)
+        viewer.data().set_mesh(V, F)
+        viewer.data().compute_normals()
+        viewer.data().set_colors(C)
         return True
     return False
 
 
 viewer.callback_key_down = key_down
 viewer.callback_key_down(viewer, ord(' '), 0)
-viewer.core.show_lines = False
+viewer.data().show_lines = False
 viewer.launch()

+ 8 - 8
python/tutorial/401_BiharmonicDeformation.py

@@ -13,7 +13,7 @@ import pyigl as igl
 
 from shared import TUTORIAL_SHARED_PATH, check_dependencies
 
-dependencies = ["viewer"]
+dependencies = ["glfw"]
 check_dependencies(dependencies)
 
 bc_frac = 1.0
@@ -47,8 +47,8 @@ def pre_draw(viewer):
     else:
         igl.harmonic(V, F, b, U_bc_anim, 2, U)
 
-    viewer.data.set_vertices(U)
-    viewer.data.compute_normals()
+    viewer.data().set_vertices(U)
+    viewer.data().compute_normals()
     return False
 
 
@@ -73,7 +73,7 @@ igl.readDMAT(TUTORIAL_SHARED_PATH + "decimated-max-selection.dmat", S)
 
 S = S.castint()
 
-b = igl.eigen.MatrixXi([[t[0] for t in [(i, S[i]) for i in range(0, V.rows())] if t[1] >= 0]]).transpose()
+b = igl.eigen.MatrixXd([[t[0] for t in [(i, S[i]) for i in range(0, V.rows())] if t[1] >= 0]]).transpose().castint()
 
 # Boundary conditions directly on deformed positions
 U_bc.resize(b.rows(), V.cols())
@@ -104,10 +104,10 @@ for f in range(0, F.rows()):
         C.setRow(f, gold)
 
 # Plot the mesh with pseudocolors
-viewer = igl.viewer.Viewer()
-viewer.data.set_mesh(U, F)
-viewer.core.show_lines = False
-viewer.data.set_colors(C)
+viewer = igl.glfw.Viewer()
+viewer.data().set_mesh(U, F)
+viewer.data().show_lines = False
+viewer.data().set_colors(C)
 # viewer.core.trackball_angle = igl.eigen.Quaterniond(sqrt(2.0),0,sqrt(2.0),0)
 # viewer.core.trackball_angle.normalize()
 

+ 8 - 8
python/tutorial/402_PolyharmonicDeformation.py

@@ -13,7 +13,7 @@ import pyigl as igl
 
 from shared import TUTORIAL_SHARED_PATH, check_dependencies
 
-dependencies = ["viewer"]
+dependencies = ["glfw"]
 check_dependencies(dependencies)
 
 
@@ -41,8 +41,8 @@ def pre_draw(viewer):
         resolve = False
 
     U.setCol(2, z_max * Z)
-    viewer.data.set_vertices(U)
-    viewer.data.compute_normals()
+    viewer.data().set_vertices(U)
+    viewer.data().compute_normals()
 
     if viewer.core.is_animating:
         z_max += z_dir
@@ -77,7 +77,7 @@ is_outer = [Vrn[i] - 1.00 > -1e-15 for i in range(0, V.rows())]
 is_inner = [Vrn[i] - 0.15 < 1e-15 for i in range(0, V.rows())]
 in_b = [is_outer[i] or is_inner[i] for i in range(0, len(is_outer))]
 
-b = igl.eigen.MatrixXi([[i for i in range(0, V.rows()) if (in_b[i])]]).transpose()
+b = igl.eigen.MatrixXd([[i for i in range(0, V.rows()) if (in_b[i])]]).transpose().castint()
 
 bc.resize(b.size(), 1)
 
@@ -96,10 +96,10 @@ for f in range(0, F.rows()):
         C.setRow(f, gold)
 
 # Plot the mesh with pseudocolors
-viewer = igl.viewer.Viewer()
-viewer.data.set_mesh(U, F)
-viewer.core.show_lines = False
-viewer.data.set_colors(C)
+viewer = igl.glfw.Viewer()
+viewer.data().set_mesh(U, F)
+viewer.data().show_lines = False
+viewer.data().set_colors(C)
 viewer.core.trackball_angle = igl.eigen.Quaterniond(0.81,-0.58,-0.03,-0.03)
 viewer.core.trackball_angle.normalize()
 viewer.callback_pre_draw = pre_draw

+ 11 - 11
python/tutorial/403_BoundedBiharmonicWeights.py

@@ -13,7 +13,7 @@ import pyigl as igl
 
 from shared import TUTORIAL_SHARED_PATH, check_dependencies, print_usage
 
-dependencies = ["viewer"]
+dependencies = ["glfw"]
 check_dependencies(dependencies)
 
 
@@ -47,9 +47,9 @@ def pre_draw(viewer):
         BET = igl.eigen.MatrixXi()
         igl.deform_skeleton(C, BE, T, CT, BET)
 
-        viewer.data.set_vertices(U)
-        viewer.data.set_edges(CT, BET, sea_green)
-        viewer.data.compute_normals()
+        viewer.data().set_vertices(U)
+        viewer.data().set_edges(CT, BET, sea_green)
+        viewer.data().compute_normals()
         anim_t += anim_t_dir
         anim_t_dir *= -1.0 if (0.0 >= anim_t or anim_t >= 1.0) else 1.0
 
@@ -76,7 +76,7 @@ def set_color(viewer):
     global selected, W
     C = igl.eigen.MatrixXd()
     igl.jet(W.col(selected), True, C)
-    viewer.data.set_colors(C)
+    viewer.data().set_colors(C)
 
 
 if __name__ == "__main__":
@@ -137,13 +137,13 @@ if __name__ == "__main__":
     igl.lbs_matrix(V, W, M)
 
     # Plot the mesh with pseudocolors
-    viewer = igl.viewer.Viewer()
-    viewer.data.set_mesh(U, F)
+    viewer = igl.glfw.Viewer()
+    viewer.data().set_mesh(U, F)
     set_color(viewer)
-    viewer.data.set_edges(C, BE, sea_green)
-    viewer.core.show_lines = False
-    viewer.core.show_overlay_depth = False
-    viewer.core.line_width = 1
+    viewer.data().set_edges(C, BE, sea_green)
+    viewer.data().show_lines = False
+    viewer.data().show_overlay_depth = False
+    viewer.data().line_width = 1
     viewer.core.trackball_angle.normalize()
     viewer.callback_pre_draw = pre_draw
     viewer.callback_key_down = key_down

+ 10 - 10
python/tutorial/404_DualQuaternionSkinning.py

@@ -16,7 +16,7 @@ import pyigl as igl
 
 from shared import TUTORIAL_SHARED_PATH, check_dependencies, print_usage
 
-dependencies = ["viewer"]
+dependencies = ["glfw"]
 check_dependencies(dependencies)
 
 
@@ -57,9 +57,9 @@ def pre_draw(viewer):
         BET = igl.eigen.MatrixXi()
         igl.deform_skeleton(C, BE, T, CT, BET)
 
-        viewer.data.set_vertices(U)
-        viewer.data.set_edges(CT, BET, sea_green)
-        viewer.data.compute_normals()
+        viewer.data().set_vertices(U)
+        viewer.data().set_edges(CT, BET, sea_green)
+        viewer.data().compute_normals()
         if viewer.core.is_animating:
             anim_t += anim_t_dir
         else:
@@ -132,12 +132,12 @@ if __name__ == "__main__":
     igl.lbs_matrix(V, W, M)
 
     # Plot the mesh with pseudocolors
-    viewer = igl.viewer.Viewer()
-    viewer.data.set_mesh(U, F)
-    viewer.data.set_edges(C, BE, sea_green)
-    viewer.core.show_lines = False
-    viewer.core.show_overlay_depth = False
-    viewer.core.line_width = 1
+    viewer = igl.glfw.Viewer()
+    viewer.data().set_mesh(U, F)
+    viewer.data().set_edges(C, BE, sea_green)
+    viewer.data().show_lines = False
+    viewer.data().show_overlay_depth = False
+    viewer.data().line_width = 1
     viewer.core.trackball_angle.normalize()
     viewer.callback_pre_draw = pre_draw
     viewer.callback_key_down = key_down

+ 7 - 7
python/tutorial/405_AsRigidAsPossible.py

@@ -14,7 +14,7 @@ import pyigl as igl
 
 from shared import TUTORIAL_SHARED_PATH, check_dependencies
 
-dependencies = ["viewer"]
+dependencies = ["glfw"]
 check_dependencies(dependencies)
 
 
@@ -55,8 +55,8 @@ def pre_draw(viewer):
             bc[i, 0] += r * sin(0.35 * anim_t * 2. * pi)
 
     igl.arap_solve(bc, arap_data, U)
-    viewer.data.set_vertices(U)
-    viewer.data.compute_normals()
+    viewer.data().set_vertices(U)
+    viewer.data().compute_normals()
 
     if viewer.core.is_animating:
         anim_t += anim_t_dir
@@ -77,7 +77,7 @@ igl.readDMAT(TUTORIAL_SHARED_PATH + "decimated-knight-selection.dmat", S)
 
 # Vertices in selection
 
-b = igl.eigen.MatrixXi([[t[0] for t in [(i, S[i]) for i in range(0, V.rows())] if t[1] >= 0]]).transpose()
+b = igl.eigen.MatrixXd([[t[0] for t in [(i, S[i]) for i in range(0, V.rows())] if t[1] >= 0]]).transpose().castint()
 
 # Centroid
 mid = 0.5 * (V.colwiseMaxCoeff() + V.colwiseMinCoeff())
@@ -98,9 +98,9 @@ for f in range(0, F.rows()):
         C.setRow(f, gold)
 
 # Plot the mesh with pseudocolors
-viewer = igl.viewer.Viewer()
-viewer.data.set_mesh(U, F)
-viewer.data.set_colors(C)
+viewer = igl.glfw.Viewer()
+viewer.data().set_mesh(U, F)
+viewer.data().set_colors(C)
 viewer.callback_pre_draw = pre_draw
 viewer.callback_key_down = key_down
 viewer.core.is_animating = True

+ 9 - 9
python/tutorial/501_HarmonicParam.py

@@ -13,7 +13,7 @@ import pyigl as igl
 
 from shared import TUTORIAL_SHARED_PATH, check_dependencies
 
-dependencies = ["viewer"]
+dependencies = ["glfw"]
 check_dependencies(dependencies)
 
 
@@ -25,13 +25,13 @@ V_uv = igl.eigen.MatrixXd()
 def key_down(viewer, key, modifier):
     if key == ord('1'):
         # Plot the 3D mesh
-        viewer.data.set_mesh(V, F)
+        viewer.data().set_mesh(V, F)
         viewer.core.align_camera_center(V, F)
     elif key == ord('2'):
         # Plot the mesh in 2D using the UV coordinates as vertex coordinates
-        viewer.data.set_mesh(V_uv, F)
+        viewer.data().set_mesh(V_uv, F)
         viewer.core.align_camera_center(V_uv, F)
-    viewer.data.compute_normals()
+    viewer.data().compute_normals()
     return False
 
 
@@ -53,16 +53,16 @@ igl.harmonic(V, F, bnd, bnd_uv, 1, V_uv)
 V_uv *= 5
 
 # Plot the mesh
-viewer = igl.viewer.Viewer()
-viewer.data.set_mesh(V, F)
-viewer.data.set_uv(V_uv)
+viewer = igl.glfw.Viewer()
+viewer.data().set_mesh(V, F)
+viewer.data().set_uv(V_uv)
 viewer.callback_key_down = key_down
 
 # Disable wireframe
-viewer.core.show_lines = False
+viewer.data().show_lines = False
 
 # Draw checkerboard texture
-viewer.core.show_texture = True
+viewer.data().show_texture = True
 
 # Launch the viewer
 viewer.launch()

+ 1 - 1
python/tutorial/502_LSCMParam.py

@@ -13,7 +13,7 @@ import pyigl as igl
 
 from shared import TUTORIAL_SHARED_PATH, check_dependencies
 
-dependencies = ["viewer"]
+dependencies = ["glfw"]
 check_dependencies(dependencies)
 
 

+ 1 - 1
python/tutorial/503_ARAPParam.py

@@ -13,7 +13,7 @@ import pyigl as igl
 
 from shared import TUTORIAL_SHARED_PATH, check_dependencies
 
-dependencies = ["viewer"]
+dependencies = ["glfw"]
 check_dependencies(dependencies)
 
 

+ 1 - 1
python/tutorial/509_Planarization.py

@@ -13,7 +13,7 @@ import pyigl as igl
 
 from shared import TUTORIAL_SHARED_PATH, check_dependencies
 
-dependencies = ["viewer"]
+dependencies = ["glfw"]
 check_dependencies(dependencies)
 
 

+ 1 - 1
python/tutorial/702_WindingNumber.py

@@ -13,7 +13,7 @@ import pyigl as igl
 
 from shared import TUTORIAL_SHARED_PATH, check_dependencies, print_usage
 
-dependencies = ["viewer"]
+dependencies = ["glfw"]
 check_dependencies(dependencies)
 
 

+ 1 - 1
python/tutorial/704_SignedDistance.py

@@ -14,7 +14,7 @@ import pyigl as igl
 
 from shared import TUTORIAL_SHARED_PATH, check_dependencies
 
-dependencies = ["viewer"]
+dependencies = ["glfw"]
 check_dependencies(dependencies)
 
 

+ 1 - 1
python/tutorial/708_Picking.py

@@ -14,7 +14,7 @@ import pyigl as igl
 
 from shared import TUTORIAL_SHARED_PATH, check_dependencies, print_usage
 
-dependencies = ["viewer"]
+dependencies = ["glfw"]
 check_dependencies(dependencies)
 
 

+ 1 - 1
python/tutorial/709_VectorFieldVisualizer.py

@@ -13,7 +13,7 @@ sys.path.insert(0, os.getcwd() + "/../")
 import pyigl as igl
 from shared import TUTORIAL_SHARED_PATH, check_dependencies
 
-dependencies = ["viewer"]
+dependencies = ["glfw"]
 check_dependencies(dependencies)
 
 # Input mesh