Переглянути джерело

finished pass over all tutorials

Former-commit-id: 0bef47c705886b1508cc7f3d63036f11f086a150
Daniele Panozzo 7 роки тому
батько
коміт
78ea6f9efe

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

@@ -25,13 +25,13 @@ V_uv = igl.eigen.MatrixXd()
 def key_down(viewer, key, modifier):
 def key_down(viewer, key, modifier):
     if key == ord('1'):
     if key == ord('1'):
         # Plot the 3D mesh
         # Plot the 3D mesh
-        viewer.data.set_mesh(V, F)
+        viewer.data().set_mesh(V, F)
         viewer.core.align_camera_center(V, F)
         viewer.core.align_camera_center(V, F)
     elif key == ord('2'):
     elif key == ord('2'):
         # Plot the mesh in 2D using the UV coordinates as vertex coordinates
         # 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.core.align_camera_center(V_uv, F)
-    viewer.data.compute_normals()
+    viewer.data().compute_normals()
     return False
     return False
 
 
 
 
@@ -54,16 +54,16 @@ igl.lscm(V, F, b, bc, V_uv)
 V_uv *= 5
 V_uv *= 5
 
 
 # Plot the mesh
 # 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
 viewer.callback_key_down = key_down
 
 
 # Disable wireframe
 # Disable wireframe
-viewer.core.show_lines = False
+viewer.data().show_lines = False
 
 
 # Draw checkerboard texture
 # Draw checkerboard texture
-viewer.core.show_texture = True
+viewer.data().show_texture = True
 
 
 # Launch the viewer
 # Launch the viewer
 viewer.launch()
 viewer.launch()

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

@@ -35,13 +35,13 @@ def key_down(viewer, key, modifier):
         V_uv = initial_guess
         V_uv = initial_guess
 
 
     if show_uv:
     if show_uv:
-        viewer.data.set_mesh(V_uv, F)
+        viewer.data().set_mesh(V_uv, F)
         viewer.core.align_camera_center(V_uv, F)
         viewer.core.align_camera_center(V_uv, F)
     else:
     else:
-        viewer.data.set_mesh(V, F)
+        viewer.data().set_mesh(V, F)
         viewer.core.align_camera_center(V, F)
         viewer.core.align_camera_center(V, F)
 
 
-    viewer.data.compute_normals()
+    viewer.data().compute_normals()
     return False
     return False
 
 
 
 
@@ -77,16 +77,16 @@ igl.arap_solve(bc, arap_data, V_uv)
 V_uv *= 20
 V_uv *= 20
 
 
 # Plot the mesh
 # 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
 viewer.callback_key_down = key_down
 
 
 # Disable wireframe
 # Disable wireframe
-viewer.core.show_lines = False
+viewer.data().show_lines = False
 
 
 # Draw checkerboard texture
 # Draw checkerboard texture
-viewer.core.show_texture = True
+viewer.data().show_texture = True
 
 
 # Launch the viewer
 # Launch the viewer
 viewer.launch()
 viewer.launch()

+ 11 - 11
python/tutorial/504_NRosyDesign.py

@@ -14,7 +14,7 @@ import pyigl as igl
 
 
 from shared import TUTORIAL_SHARED_PATH, check_dependencies
 from shared import TUTORIAL_SHARED_PATH, check_dependencies
 
 
-dependencies = ["comiso", "viewer"]
+dependencies = ["comiso", "glfw"]
 check_dependencies(dependencies)
 check_dependencies(dependencies)
 
 
 
 
@@ -59,8 +59,8 @@ def representative_to_nrosy(V, F, R, N, Y):
 # The constrained faces (b) are colored in red.
 # The constrained faces (b) are colored in red.
 def plot_mesh_nrosy(viewer, V, F, N, PD1, S, b):
 def plot_mesh_nrosy(viewer, V, F, N, PD1, S, b):
     # Clear the mesh
     # Clear the mesh
-    viewer.data.clear()
-    viewer.data.set_mesh(V, F)
+    viewer.data().clear()
+    viewer.data().set_mesh(V, F)
 
 
     # Expand the representative vectors in the full vector set and plot them as lines
     # Expand the representative vectors in the full vector set and plot them as lines
     avg = igl.avg_edge_length(V, F)
     avg = igl.avg_edge_length(V, F)
@@ -75,20 +75,20 @@ def plot_mesh_nrosy(viewer, V, F, N, PD1, S, b):
         for j in range(0, N):
         for j in range(0, N):
             Be.setRow(i * N + j, B.row(i))
             Be.setRow(i * N + j, B.row(i))
 
 
-    viewer.data.add_edges(Be, Be + Y * (avg / 2), igl.eigen.MatrixXd([[0, 0, 1]]))
+    viewer.data().add_edges(Be, Be + Y * (avg / 2), igl.eigen.MatrixXd([[0, 0, 1]]))
 
 
     # Plot the singularities as colored dots (red for negative, blue for positive)
     # Plot the singularities as colored dots (red for negative, blue for positive)
     for i in range(0, S.size()):
     for i in range(0, S.size()):
         if S[i] < -0.001:
         if S[i] < -0.001:
-            viewer.data.add_points(V.row(i), igl.eigen.MatrixXd([[1, 0, 0]]))
+            viewer.data().add_points(V.row(i), igl.eigen.MatrixXd([[1, 0, 0]]))
         elif S[i] > 0.001:
         elif S[i] > 0.001:
-            viewer.data.add_points(V.row(i), igl.eigen.MatrixXd([[0, 1, 0]]));
+            viewer.data().add_points(V.row(i), igl.eigen.MatrixXd([[0, 1, 0]]));
 
 
     # Highlight in red the constrained faces
     # Highlight in red the constrained faces
     C = igl.eigen.MatrixXd.Constant(F.rows(), 3, 1)
     C = igl.eigen.MatrixXd.Constant(F.rows(), 3, 1)
     for i in range(0, b.size()):
     for i in range(0, b.size()):
         C.setRow(b[i], igl.eigen.MatrixXd([[1, 0, 0]]))
         C.setRow(b[i], igl.eigen.MatrixXd([[1, 0, 0]]))
-    viewer.data.set_colors(C)
+    viewer.data().set_colors(C)
 
 
 
 
 # It allows to change the degree of the field when a number is pressed
 # It allows to change the degree of the field when a number is pressed
@@ -110,20 +110,20 @@ def key_down(viewer, key, modifier):
 igl.readOFF(TUTORIAL_SHARED_PATH + "bumpy.off", V, F)
 igl.readOFF(TUTORIAL_SHARED_PATH + "bumpy.off", V, F)
 
 
 # Threshold faces with high anisotropy
 # Threshold faces with high anisotropy
-b = igl.eigen.MatrixXi([[0]])
+b = igl.eigen.MatrixXd([[0]]).castint()
 bc = igl.eigen.MatrixXd([[1, 1, 1]])
 bc = igl.eigen.MatrixXd([[1, 1, 1]])
 
 
-viewer = igl.viewer.Viewer()
+viewer = igl.glfw.Viewer()
 
 
 # Interpolate the field and plot
 # Interpolate the field and plot
 key_down(viewer, ord('4'), 0)
 key_down(viewer, ord('4'), 0)
 
 
 # Plot the mesh
 # Plot the mesh
-viewer.data.set_mesh(V, F)
+viewer.data().set_mesh(V, F)
 viewer.callback_key_down = key_down
 viewer.callback_key_down = key_down
 
 
 # Disable wireframe
 # Disable wireframe
-viewer.core.show_lines = False
+viewer.data().show_lines = False
 
 
 # Launch the viewer
 # Launch the viewer
 viewer.launch()
 viewer.launch()

+ 37 - 37
python/tutorial/505_MIQ.py

@@ -14,7 +14,7 @@ import pyigl as igl
 
 
 from shared import TUTORIAL_SHARED_PATH, check_dependencies
 from shared import TUTORIAL_SHARED_PATH, check_dependencies
 
 
-dependencies = ["comiso", "viewer"]
+dependencies = ["comiso", "glfw"]
 check_dependencies(dependencies)
 check_dependencies(dependencies)
 
 
 
 
@@ -97,37 +97,37 @@ def key_down(viewer, key, modifier):
     if key < ord('1') or key > ord('8'):
     if key < ord('1') or key > ord('8'):
         return False
         return False
 
 
-    viewer.data.clear()
-    viewer.core.show_lines = False
-    viewer.core.show_texture = False
+    viewer.data().clear()
+    viewer.data().show_lines = False
+    viewer.data().show_texture = False
 
 
     if key == ord('1'):
     if key == ord('1'):
         # Cross field
         # Cross field
-        viewer.data.set_mesh(V, F)
-        viewer.data.add_edges(B - global_scale * X1 if extend_arrows else B, B + global_scale * X1,
+        viewer.data().set_mesh(V, F)
+        viewer.data().add_edges(B - global_scale * X1 if extend_arrows else B, B + global_scale * X1,
                               igl.eigen.MatrixXd([[1, 0, 0]]))
                               igl.eigen.MatrixXd([[1, 0, 0]]))
-        viewer.data.add_edges(B - global_scale * X2 if extend_arrows else B, B + global_scale * X2,
+        viewer.data().add_edges(B - global_scale * X2 if extend_arrows else B, B + global_scale * X2,
                               igl.eigen.MatrixXd([[0, 0, 1]]))
                               igl.eigen.MatrixXd([[0, 0, 1]]))
 
 
     if key == ord('2'):
     if key == ord('2'):
         # Bisector field
         # Bisector field
-        viewer.data.set_mesh(V, F)
-        viewer.data.add_edges(B - global_scale * BIS1 if extend_arrows else B, B + global_scale * BIS1,
+        viewer.data().set_mesh(V, F)
+        viewer.data().add_edges(B - global_scale * BIS1 if extend_arrows else B, B + global_scale * BIS1,
                               igl.eigen.MatrixXd([[1, 0, 0]]))
                               igl.eigen.MatrixXd([[1, 0, 0]]))
-        viewer.data.add_edges(B - global_scale * BIS2 if extend_arrows else B, B + global_scale * BIS2,
+        viewer.data().add_edges(B - global_scale * BIS2 if extend_arrows else B, B + global_scale * BIS2,
                               igl.eigen.MatrixXd([[0, 0, 1]]))
                               igl.eigen.MatrixXd([[0, 0, 1]]))
 
 
     if key == ord('3'):
     if key == ord('3'):
         # Bisector field combed
         # Bisector field combed
-        viewer.data.set_mesh(V, F)
-        viewer.data.add_edges(B - global_scale * BIS1_combed if extend_arrows else B, B + global_scale * BIS1_combed,
+        viewer.data().set_mesh(V, F)
+        viewer.data().add_edges(B - global_scale * BIS1_combed if extend_arrows else B, B + global_scale * BIS1_combed,
                               igl.eigen.MatrixXd([[1, 0, 0]]))
                               igl.eigen.MatrixXd([[1, 0, 0]]))
-        viewer.data.add_edges(B - global_scale * BIS2_combed if extend_arrows else B, B + global_scale * BIS2_combed,
+        viewer.data().add_edges(B - global_scale * BIS2_combed if extend_arrows else B, B + global_scale * BIS2_combed,
                               igl.eigen.MatrixXd([[0, 0, 1]]))
                               igl.eigen.MatrixXd([[0, 0, 1]]))
 
 
     if key == ord('4'):
     if key == ord('4'):
         # Singularities and cuts
         # Singularities and cuts
-        viewer.data.set_mesh(V, F)
+        viewer.data().set_mesh(V, F)
 
 
         # Plot cuts
         # Plot cuts
         l_count = Seams.sum()
         l_count = Seams.sum()
@@ -141,22 +141,22 @@ def key_down(viewer, key, modifier):
                     P2.setRow(l_count - 1, V.row(F[i, (j + 1) % 3]))
                     P2.setRow(l_count - 1, V.row(F[i, (j + 1) % 3]))
                     l_count -= 1
                     l_count -= 1
 
 
-        viewer.data.add_edges(P1, P2, igl.eigen.MatrixXd([[1, 0, 0]]))
+        viewer.data().add_edges(P1, P2, igl.eigen.MatrixXd([[1, 0, 0]]))
 
 
         # Plot the singularities as colored dots (red for negative, blue for positive)
         # Plot the singularities as colored dots (red for negative, blue for positive)
         for i in range(0, singularityIndex.size()):
         for i in range(0, singularityIndex.size()):
             if 2 > singularityIndex[i] > 0:
             if 2 > singularityIndex[i] > 0:
-                viewer.data.add_points(V.row(i), igl.eigen.MatrixXd([[1, 0, 0]]))
+                viewer.data().add_points(V.row(i), igl.eigen.MatrixXd([[1, 0, 0]]))
             elif singularityIndex[i] > 2:
             elif singularityIndex[i] > 2:
-                viewer.data.add_points(V.row(i), igl.eigen.MatrixXd([[1, 0, 0]]))
+                viewer.data().add_points(V.row(i), igl.eigen.MatrixXd([[1, 0, 0]]))
 
 
     if key == ord('5'):
     if key == ord('5'):
         # Singularities and cuts, original field
         # Singularities and cuts, original field
         # Singularities and cuts
         # Singularities and cuts
-        viewer.data.set_mesh(V, F)
-        viewer.data.add_edges(B - global_scale * X1_combed if extend_arrows else B, B + global_scale * X1_combed,
+        viewer.data().set_mesh(V, F)
+        viewer.data().add_edges(B - global_scale * X1_combed if extend_arrows else B, B + global_scale * X1_combed,
                               igl.eigen.MatrixXd([[1, 0, 0]]))
                               igl.eigen.MatrixXd([[1, 0, 0]]))
-        viewer.data.add_edges(B - global_scale * X2_combed if extend_arrows else B, B + global_scale * X2_combed,
+        viewer.data().add_edges(B - global_scale * X2_combed if extend_arrows else B, B + global_scale * X2_combed,
                               igl.eigen.MatrixXd([[0, 0, 1]]))
                               igl.eigen.MatrixXd([[0, 0, 1]]))
 
 
         # Plot cuts
         # Plot cuts
@@ -172,38 +172,38 @@ def key_down(viewer, key, modifier):
                     P2.setRow(l_count - 1, V.row(F[i, (j + 1) % 3]))
                     P2.setRow(l_count - 1, V.row(F[i, (j + 1) % 3]))
                     l_count -= 1
                     l_count -= 1
 
 
-        viewer.data.add_edges(P1, P2, igl.eigen.MatrixXd([[1, 0, 0]]))
+        viewer.data().add_edges(P1, P2, igl.eigen.MatrixXd([[1, 0, 0]]))
 
 
         # Plot the singularities as colored dots (red for negative, blue for positive)
         # Plot the singularities as colored dots (red for negative, blue for positive)
         for i in range(0, singularityIndex.size()):
         for i in range(0, singularityIndex.size()):
             if 2 > singularityIndex[i] > 0:
             if 2 > singularityIndex[i] > 0:
-                viewer.data.add_points(V.row(i), igl.eigen.MatrixXd([[1, 0, 0]]))
+                viewer.data().add_points(V.row(i), igl.eigen.MatrixXd([[1, 0, 0]]))
             elif singularityIndex[i] > 2:
             elif singularityIndex[i] > 2:
-                viewer.data.add_points(V.row(i), igl.eigen.MatrixXd([[0, 1, 0]]))
+                viewer.data().add_points(V.row(i), igl.eigen.MatrixXd([[0, 1, 0]]))
 
 
     if key == ord('6'):
     if key == ord('6'):
         # Global parametrization UV
         # Global parametrization UV
-        viewer.data.set_mesh(UV, FUV)
-        viewer.data.set_uv(UV)
-        viewer.core.show_lines = True
+        viewer.data().set_mesh(UV, FUV)
+        viewer.data().set_uv(UV)
+        viewer.data().show_lines = True
 
 
     if key == ord('7'):
     if key == ord('7'):
         # Global parametrization in 3D
         # Global parametrization in 3D
-        viewer.data.set_mesh(V, F)
-        viewer.data.set_uv(UV, FUV)
-        viewer.core.show_texture = True
+        viewer.data().set_mesh(V, F)
+        viewer.data().set_uv(UV, FUV)
+        viewer.data().show_texture = True
 
 
     if key == ord('8'):
     if key == ord('8'):
         # Global parametrization in 3D with seams
         # Global parametrization in 3D with seams
-        viewer.data.set_mesh(V, F)
-        viewer.data.set_uv(UV_seams, FUV_seams)
-        viewer.core.show_texture = True
+        viewer.data().set_mesh(V, F)
+        viewer.data().set_uv(UV_seams, FUV_seams)
+        viewer.data().show_texture = True
 
 
-    viewer.data.set_colors(igl.eigen.MatrixXd([[1, 1, 1]]))
+    viewer.data().set_colors(igl.eigen.MatrixXd([[1, 1, 1]]))
 
 
-    viewer.data.set_texture(texture_R, texture_B, texture_G)
+    viewer.data().set_texture(texture_R, texture_B, texture_G)
 
 
-    viewer.core.align_camera_center(viewer.data.V, viewer.data.F)
+    viewer.core.align_camera_center(viewer.data().V, viewer.data().F)
 
 
     return False
     return False
 
 
@@ -218,7 +218,7 @@ igl.barycenter(V, F, B)
 global_scale = .5 * igl.avg_edge_length(V, F)
 global_scale = .5 * igl.avg_edge_length(V, F)
 
 
 # Contrain one face
 # Contrain one face
-b = igl.eigen.MatrixXi([[0]])
+b = igl.eigen.MatrixXd([[0]]).castint()
 bc = igl.eigen.MatrixXd([[1, 0, 0]])
 bc = igl.eigen.MatrixXd([[1, 0, 0]])
 
 
 # Create a smooth 4-RoSy field
 # Create a smooth 4-RoSy field
@@ -267,7 +267,7 @@ igl.comiso.miq(V, F, X1_combed, X2_combed, MMatch, isSingularity, Seams, UV_seam
                stiffness, direct_round, iterations, 5, False)
                stiffness, direct_round, iterations, 5, False)
 
 
 # Plot the mesh
 # Plot the mesh
-viewer = igl.viewer.Viewer()
+viewer = igl.glfw.Viewer()
 
 
 # Replace the standard texture with an integer shift invariant texture
 # Replace the standard texture with an integer shift invariant texture
 (texture_R, texture_G, texture_B) = line_texture()
 (texture_R, texture_G, texture_B) = line_texture()

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

@@ -17,7 +17,7 @@ dependencies = ["glfw"]
 check_dependencies(dependencies)
 check_dependencies(dependencies)
 
 
 
 
-viewer = igl.viewer.Viewer()
+viewer = igl.glfw.Viewer()
 
 
 # Quad mesh generated from conjugate field
 # Quad mesh generated from conjugate field
 VQC = igl.eigen.MatrixXd()
 VQC = igl.eigen.MatrixXd()
@@ -40,7 +40,7 @@ PQC3plan = igl.eigen.MatrixXd()
 def key_down(viewer, key, modifier):
 def key_down(viewer, key, modifier):
     if key == ord('1'):
     if key == ord('1'):
         # Draw the triangulated quad mesh
         # Draw the triangulated quad mesh
-        viewer.data.set_mesh(VQC, FQCtri)
+        viewer.data().set_mesh(VQC, FQCtri)
 
 
         # Assign a color to each quad that corresponds to its planarity
         # Assign a color to each quad that corresponds to its planarity
         planarity = igl.eigen.MatrixXd()
         planarity = igl.eigen.MatrixXd()
@@ -50,17 +50,17 @@ def key_down(viewer, key, modifier):
         C = igl.eigen.MatrixXd(FQCtri.rows(), 3)
         C = igl.eigen.MatrixXd(FQCtri.rows(), 3)
         C.setTopRows(Ct.rows(), Ct)
         C.setTopRows(Ct.rows(), Ct)
         C.setBottomRows(Ct.rows(), Ct)
         C.setBottomRows(Ct.rows(), Ct)
-        viewer.data.set_colors(C)
+        viewer.data().set_colors(C)
 
 
         # Plot a line for each edge of the quad mesh
         # Plot a line for each edge of the quad mesh
-        viewer.data.add_edges(PQC0, PQC1, igl.eigen.MatrixXd([[0, 0, 0]]))
-        viewer.data.add_edges(PQC1, PQC2, igl.eigen.MatrixXd([[0, 0, 0]]))
-        viewer.data.add_edges(PQC2, PQC3, igl.eigen.MatrixXd([[0, 0, 0]]))
-        viewer.data.add_edges(PQC3, PQC0, igl.eigen.MatrixXd([[0, 0, 0]]))
+        viewer.data().add_edges(PQC0, PQC1, igl.eigen.MatrixXd([[0, 0, 0]]))
+        viewer.data().add_edges(PQC1, PQC2, igl.eigen.MatrixXd([[0, 0, 0]]))
+        viewer.data().add_edges(PQC2, PQC3, igl.eigen.MatrixXd([[0, 0, 0]]))
+        viewer.data().add_edges(PQC3, PQC0, igl.eigen.MatrixXd([[0, 0, 0]]))
 
 
     elif key == ord('2'):
     elif key == ord('2'):
         # Draw the planar quad mesh
         # Draw the planar quad mesh
-        viewer.data.set_mesh(VQCplan, FQCtri)
+        viewer.data().set_mesh(VQCplan, FQCtri)
 
 
         # Assign a color to each quad that corresponds to its planarity
         # Assign a color to each quad that corresponds to its planarity
         planarity = igl.eigen.MatrixXd()
         planarity = igl.eigen.MatrixXd()
@@ -70,13 +70,13 @@ def key_down(viewer, key, modifier):
         C = igl.eigen.MatrixXd(FQCtri.rows(), 3)
         C = igl.eigen.MatrixXd(FQCtri.rows(), 3)
         C.setTopRows(Ct.rows(), Ct)
         C.setTopRows(Ct.rows(), Ct)
         C.setBottomRows(Ct.rows(), Ct)
         C.setBottomRows(Ct.rows(), Ct)
-        viewer.data.set_colors(C)
+        viewer.data().set_colors(C)
 
 
         # Plot a line for each edge of the quad mesh
         # Plot a line for each edge of the quad mesh
-        viewer.data.add_edges(PQC0plan, PQC1plan, igl.eigen.MatrixXd([[0, 0, 0]]))
-        viewer.data.add_edges(PQC1plan, PQC2plan, igl.eigen.MatrixXd([[0, 0, 0]]))
-        viewer.data.add_edges(PQC2plan, PQC3plan, igl.eigen.MatrixXd([[0, 0, 0]]))
-        viewer.data.add_edges(PQC3plan, PQC0plan, igl.eigen.MatrixXd([[0, 0, 0]]))
+        viewer.data().add_edges(PQC0plan, PQC1plan, igl.eigen.MatrixXd([[0, 0, 0]]))
+        viewer.data().add_edges(PQC1plan, PQC2plan, igl.eigen.MatrixXd([[0, 0, 0]]))
+        viewer.data().add_edges(PQC2plan, PQC3plan, igl.eigen.MatrixXd([[0, 0, 0]]))
+        viewer.data().add_edges(PQC3plan, PQC0plan, igl.eigen.MatrixXd([[0, 0, 0]]))
 
 
     else:
     else:
         return False
         return False
@@ -119,7 +119,7 @@ igl.slice(VQCplan, FQC.col(3), 1, PQC3plan)
 
 
 # Launch the viewer
 # Launch the viewer
 key_down(viewer, ord('2'), 0)
 key_down(viewer, ord('2'), 0)
-viewer.core.invert_normals = True
-viewer.core.show_lines = False
+viewer.data().invert_normals = True
+viewer.data().show_lines = False
 viewer.callback_key_down = key_down
 viewer.callback_key_down = key_down
 viewer.launch()
 viewer.launch()

+ 4 - 4
python/tutorial/604_Triangle.py

@@ -13,13 +13,13 @@ import pyigl as igl
 
 
 from shared import check_dependencies
 from shared import check_dependencies
 
 
-dependencies = ["triangle", "viewer"]
+dependencies = ["triangle", "glfw"]
 check_dependencies(dependencies)
 check_dependencies(dependencies)
 
 
 
 
 # Input polygon
 # Input polygon
 V = igl.eigen.MatrixXd([[-1, -1], [1, -1], [1, 1], [-1, 1], [-2, -2], [2, -2], [2, 2], [-2, 2]])
 V = igl.eigen.MatrixXd([[-1, -1], [1, -1], [1, 1], [-1, 1], [-2, -2], [2, -2], [2, 2], [-2, 2]])
-E = igl.eigen.MatrixXi([[0, 1], [1, 2], [2, 3], [3, 0], [4, 5], [5, 6], [6,7], [7,4]])
+E = igl.eigen.MatrixXd([[0, 1], [1, 2], [2, 3], [3, 0], [4, 5], [5, 6], [6,7], [7,4]]).castint()
 H = igl.eigen.MatrixXd([[0, 0]])
 H = igl.eigen.MatrixXd([[0, 0]])
 
 
 # Triangulated Interior
 # Triangulated Interior
@@ -29,6 +29,6 @@ F2 = igl.eigen.MatrixXi()
 igl.triangle.triangulate(V, E, H, "a0.005q", V2, F2)
 igl.triangle.triangulate(V, E, H, "a0.005q", V2, F2)
 
 
 # Plot the mesh
 # Plot the mesh
-viewer = igl.viewer.Viewer()
-viewer.data.set_mesh(V2, F2)
+viewer = igl.glfw.Viewer()
+viewer.data().set_mesh(V2, F2)
 viewer.launch()
 viewer.launch()

+ 10 - 10
python/tutorial/605_Tetgen.py

@@ -13,7 +13,7 @@ import pyigl as igl
 
 
 from shared import TUTORIAL_SHARED_PATH, check_dependencies
 from shared import TUTORIAL_SHARED_PATH, check_dependencies
 
 
-dependencies = ["tetgen", "viewer"]
+dependencies = ["tetgen", "glfw"]
 check_dependencies(dependencies)
 check_dependencies(dependencies)
 
 
 
 
@@ -27,7 +27,7 @@ TV = igl.eigen.MatrixXd()
 TT = igl.eigen.MatrixXi()
 TT = igl.eigen.MatrixXi()
 TF = igl.eigen.MatrixXi()
 TF = igl.eigen.MatrixXi()
 
 
-viewer = igl.viewer.Viewer()
+viewer = igl.glfw.Viewer()
 
 
 
 
 def key_down(viewer, key, modifier):
 def key_down(viewer, key, modifier):
@@ -43,7 +43,7 @@ def key_down(viewer, key, modifier):
                 s.append(i)
                 s.append(i)
 
 
         V_temp = igl.eigen.MatrixXd(len(s) * 4, 3)
         V_temp = igl.eigen.MatrixXd(len(s) * 4, 3)
-        F_temp = igl.eigen.MatrixXi(len(s) * 4, 3)
+        F_temp = igl.eigen.MatrixXd(len(s) * 4, 3).castint()
 
 
         for i in range(len(s)):
         for i in range(len(s)):
             V_temp.setRow(i * 4 + 0, TV.row(TT[s[i], 0]))
             V_temp.setRow(i * 4 + 0, TV.row(TT[s[i], 0]))
@@ -51,14 +51,14 @@ def key_down(viewer, key, modifier):
             V_temp.setRow(i * 4 + 2, TV.row(TT[s[i], 2]))
             V_temp.setRow(i * 4 + 2, TV.row(TT[s[i], 2]))
             V_temp.setRow(i * 4 + 3, TV.row(TT[s[i], 3]))
             V_temp.setRow(i * 4 + 3, TV.row(TT[s[i], 3]))
 
 
-            F_temp.setRow(i * 4 + 0, igl.eigen.MatrixXi([[(i*4)+0, (i*4)+1, (i*4)+3]]))
-            F_temp.setRow(i * 4 + 1, igl.eigen.MatrixXi([[(i*4)+0, (i*4)+2, (i*4)+1]]))
-            F_temp.setRow(i * 4 + 2, igl.eigen.MatrixXi([[(i*4)+3, (i*4)+2, (i*4)+0]]))
-            F_temp.setRow(i * 4 + 3, igl.eigen.MatrixXi([[(i*4)+1, (i*4)+2, (i*4)+3]]))
+            F_temp.setRow(i * 4 + 0, igl.eigen.MatrixXd([[(i*4)+0, (i*4)+1, (i*4)+3]]).castint())
+            F_temp.setRow(i * 4 + 1, igl.eigen.MatrixXd([[(i*4)+0, (i*4)+2, (i*4)+1]]).castint())
+            F_temp.setRow(i * 4 + 2, igl.eigen.MatrixXd([[(i*4)+3, (i*4)+2, (i*4)+0]]).castint())
+            F_temp.setRow(i * 4 + 3, igl.eigen.MatrixXd([[(i*4)+1, (i*4)+2, (i*4)+3]]).castint())
 
 
-        viewer.data.clear()
-        viewer.data.set_mesh(V_temp, F_temp)
-        viewer.data.set_face_based(True)
+        viewer.data().clear()
+        viewer.data().set_mesh(V_temp, F_temp)
+        viewer.data().set_face_based(True)
 
 
     else:
     else:
         return False
         return False

+ 6 - 6
python/tutorial/606_AmbientOcclusion.py

@@ -13,7 +13,7 @@ import pyigl as igl
 
 
 from shared import TUTORIAL_SHARED_PATH, check_dependencies
 from shared import TUTORIAL_SHARED_PATH, check_dependencies
 
 
-dependencies = ["embree", "viewer"]
+dependencies = ["embree", "glfw"]
 check_dependencies(dependencies)
 check_dependencies(dependencies)
 
 
 
 
@@ -24,7 +24,7 @@ AO = igl.eigen.MatrixXd()
 N = igl.eigen.MatrixXd()
 N = igl.eigen.MatrixXd()
 
 
 
 
-viewer = igl.viewer.Viewer()
+viewer = igl.glfw.Viewer()
 
 
 
 
 def key_down(viewer, key, modifier):
 def key_down(viewer, key, modifier):
@@ -33,13 +33,13 @@ def key_down(viewer, key, modifier):
 
 
     if key == ord('1'):
     if key == ord('1'):
         # Show the mesh without the ambient occlusion factor
         # Show the mesh without the ambient occlusion factor
-        viewer.data.set_colors(color)
+        viewer.data().set_colors(color)
     elif key == ord('2'):
     elif key == ord('2'):
         # Show the mesh with the ambient occlusion factor
         # Show the mesh with the ambient occlusion factor
         C = color.replicate(V.rows(), 1)
         C = color.replicate(V.rows(), 1)
         for i in range(C.rows()):
         for i in range(C.rows()):
             C.setRow(i, C.row(i) * AO[i, 0])
             C.setRow(i, C.row(i) * AO[i, 0])
-        viewer.data.set_colors(C)
+        viewer.data().set_colors(C)
     elif key == ord('.'):
     elif key == ord('.'):
         viewer.core.lighting_factor += 0.1
         viewer.core.lighting_factor += 0.1
     elif key == ord(','):
     elif key == ord(','):
@@ -64,9 +64,9 @@ igl.embree.ambient_occlusion(V, F, V, N, 500, AO)
 AO = 1.0 - AO
 AO = 1.0 - AO
 
 
 # Plot the generated mesh
 # Plot the generated mesh
-viewer.data.set_mesh(V, F)
+viewer.data().set_mesh(V, F)
 key_down(viewer, ord('2'), 0)
 key_down(viewer, ord('2'), 0)
 viewer.callback_key_down = key_down
 viewer.callback_key_down = key_down
-viewer.core.show_lines = False
+viewer.data().show_lines = False
 viewer.core.lighting_factor = 0.0
 viewer.core.lighting_factor = 0.0
 viewer.launch()
 viewer.launch()

+ 10 - 10
python/tutorial/607_ScreenCapture.py

@@ -13,7 +13,7 @@ import pyigl as igl
 
 
 from shared import TUTORIAL_SHARED_PATH, check_dependencies
 from shared import TUTORIAL_SHARED_PATH, check_dependencies
 
 
-dependencies = ["png", "viewer"]
+dependencies = ["png", "glfw"]
 check_dependencies(dependencies)
 check_dependencies(dependencies)
 
 
 temp_png = os.path.join(os.getcwd(),"out.png")
 temp_png = os.path.join(os.getcwd(),"out.png")
@@ -27,7 +27,7 @@ def key_down(viewer, key, modifier):
         A = igl.eigen.MatrixXuc(1280, 800)
         A = igl.eigen.MatrixXuc(1280, 800)
 
 
         # Draw the scene in the buffers
         # Draw the scene in the buffers
-        viewer.core.draw_buffer(viewer.data, viewer.opengl, False, R, G, B, A)
+        viewer.core.draw_buffer(viewer.data(), False, R, G, B, A)
 
 
         # Save it to a PNG
         # Save it to a PNG
         igl.png.writePNG(R, G, B, A, temp_png)
         igl.png.writePNG(R, G, B, A, temp_png)
@@ -47,18 +47,18 @@ def key_down(viewer, key, modifier):
                                 [0.5, 0.5, 0],
                                 [0.5, 0.5, 0],
                                 [-0.5, 0.5, 0]])
                                 [-0.5, 0.5, 0]])
 
 
-        F = igl.eigen.MatrixXi([[0, 1, 2], [2, 3, 0]])
+        F = igl.eigen.MatrixXd([[0, 1, 2], [2, 3, 0]]).castint()
 
 
         UV = igl.eigen.MatrixXd([[0, 0], [1, 0], [1, 1], [0, 1]])
         UV = igl.eigen.MatrixXd([[0, 0], [1, 0], [1, 1], [0, 1]])
 
 
-        viewer.data.clear()
-        viewer.data.set_mesh(V, F)
-        viewer.data.set_uv(UV)
+        viewer.data().clear()
+        viewer.data().set_mesh(V, F)
+        viewer.data().set_uv(UV)
         viewer.core.align_camera_center(V)
         viewer.core.align_camera_center(V)
-        viewer.core.show_texture = True
+        viewer.data().show_texture = True
 
 
         # Use the image as a texture
         # Use the image as a texture
-        viewer.data.set_texture(R, G, B)
+        viewer.data().set_texture(R, G, B)
 
 
     else:
     else:
         return False
         return False
@@ -73,13 +73,13 @@ if __name__ == "__main__":
     # Load meshes in OFF format
     # Load meshes in OFF format
     igl.readOFF(TUTORIAL_SHARED_PATH + "bunny.off", V, F)
     igl.readOFF(TUTORIAL_SHARED_PATH + "bunny.off", V, F)
 
 
-    viewer = igl.viewer.Viewer()
+    viewer = igl.glfw.Viewer()
 
 
     print(
     print(
         "Usage: Press 1 to render the scene and save it in a png. \nPress 2 to load the saved png and use it as a texture.")
         "Usage: Press 1 to render the scene and save it in a png. \nPress 2 to load the saved png and use it as a texture.")
 
 
     viewer.callback_key_down = key_down
     viewer.callback_key_down = key_down
-    viewer.data.set_mesh(V, F)
+    viewer.data().set_mesh(V, F)
     viewer.launch()
     viewer.launch()
 
 
     os.remove(temp_png)
     os.remove(temp_png)

+ 6 - 6
python/tutorial/609_Boolean.py

@@ -13,7 +13,7 @@ import pyigl as igl
 
 
 from shared import TUTORIAL_SHARED_PATH, check_dependencies
 from shared import TUTORIAL_SHARED_PATH, check_dependencies
 
 
-dependencies = ["cgal", "viewer"]
+dependencies = ["cgal", "glfw"]
 check_dependencies(dependencies)
 check_dependencies(dependencies)
 
 
 boolean_type_names = {igl.MESH_BOOLEAN_TYPE_UNION: "Union", igl.MESH_BOOLEAN_TYPE_INTERSECT: "Intersect", igl.MESH_BOOLEAN_TYPE_MINUS: "Minus", igl.MESH_BOOLEAN_TYPE_XOR: "XOR", igl.MESH_BOOLEAN_TYPE_RESOLVE: "Resolve"}
 boolean_type_names = {igl.MESH_BOOLEAN_TYPE_UNION: "Union", igl.MESH_BOOLEAN_TYPE_INTERSECT: "Intersect", igl.MESH_BOOLEAN_TYPE_MINUS: "Minus", igl.MESH_BOOLEAN_TYPE_XOR: "XOR", igl.MESH_BOOLEAN_TYPE_RESOLVE: "Resolve"}
@@ -34,9 +34,9 @@ def update(viewer):
         else:
         else:
             C.setRow(f, Green)
             C.setRow(f, Green)
 
 
-    viewer.data.clear()
-    viewer.data.set_mesh(VC, FC)
-    viewer.data.set_colors(C)
+    viewer.data().clear()
+    viewer.data().set_mesh(VC, FC)
+    viewer.data().set_colors(C)
     print("Done.")
     print("Done.")
 
 
 
 
@@ -78,13 +78,13 @@ if __name__ == "__main__":
 
 
     boolean_type = igl.MESH_BOOLEAN_TYPE_UNION
     boolean_type = igl.MESH_BOOLEAN_TYPE_UNION
 
 
-    viewer = igl.viewer.Viewer()
+    viewer = igl.glfw.Viewer()
     update(viewer)
     update(viewer)
 
 
     print(
     print(
         "Usage: Press '.' to switch to next boolean operation type. \nPress ',' to switch to previous boolean operation type. \nPress ']' to push near cutting plane away from camera. \nPress '[' to pull near cutting plane closer to camera. \nHint: investigate _inside_ the model to see orientation changes. \n")
         "Usage: Press '.' to switch to next boolean operation type. \nPress ',' to switch to previous boolean operation type. \nPress ']' to push near cutting plane away from camera. \nPress '[' to pull near cutting plane closer to camera. \nHint: investigate _inside_ the model to see orientation changes. \n")
 
 
-    viewer.core.show_lines = True
+    viewer.data().show_lines = True
     viewer.callback_key_down = key_down
     viewer.callback_key_down = key_down
     viewer.core.camera_dnear = 3.9
     viewer.core.camera_dnear = 3.9
     viewer.launch()
     viewer.launch()