# 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()