123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- # Add the igl library to the modules search path
- import sys, os
- sys.path.insert(0, os.getcwd() + "/../")
- import pyigl as igl
- V = igl.eigen.MatrixXd()
- U = igl.eigen.MatrixXd()
- F = igl.eigen.MatrixXi()
- c = 0
- bbd = 1.0
- twod = False
- if not igl.read_triangle_mesh("../../tutorial/shared/beetle.off",V,F):
- print("failed to load mesh")
- twod = V.col(2).minCoeff() == V.col(2).maxCoeff()
- bbd = (V.colwiseMaxCoeff() - V.colwiseMinCoeff()).norm()
- L = igl.eigen.SparseMatrixd()
- M = igl.eigen.SparseMatrixd()
- igl.cotmatrix(V,F,L)
- L = -L
- igl.massmatrix(V,F,igl.MASSMATRIX_TYPE_DEFAULT,M)
- k = 5
- D = igl.eigen.MatrixXd()
- if not igl.eigs(L,M,k+1,igl.EIGS_TYPE_SM,U,D):
- print("Eigs failed.")
- U = (U-U.minCoeff())/(U.maxCoeff()-U.minCoeff());
- viewer = igl.viewer.Viewer()
- def key_down(viewer,key,mod):
- global U, c
- if key == ord(' '):
- U = U.rightCols(k)
- # Rescale eigen vectors for visualization
- Z = bbd*0.5*U.col(c)
- C = igl.eigen.MatrixXd()
- igl.parula(U.col(c),False,C)
- c = (c+1)%U.cols()
- if twod:
- V.setcol(2,Z)
- viewer.data.set_mesh(V,F)
- viewer.data.compute_normals()
- viewer.data.set_colors(C)
- return True
- viewer.callback_key_down = key_down
- viewer.callback_key_down(viewer,ord(' '),0);
- viewer.core.show_lines = False
- viewer.launch()
|