def read_MESH_to_numpy(path): V = igl.eigen.MatrixXd() T = igl.eigen.MatrixXi() F = igl.eigen.MatrixXi() igl.readMESH(path, V, T, F) return e2p(V), e2p(T), e2p(F)
elif key == ord('.'): slice_z = min(slice_z + 0.01, 0.99) elif key == ord(','): slice_z = max(slice_z - 0.01, 0.01) else: return False update_visualization(viewer) return True print("Press [space] to toggle showing surface.") print("Press '.'/',' to push back/pull forward slicing plane.") # Load mesh: (V,T) tet-mesh of convex hull, F contains original surface triangles igl.readMESH(TUTORIAL_SHARED_PATH + "bunny.mesh", V, T, F) # Call to point_mesh_squared_distance to determine bounds sqrD = igl.eigen.MatrixXd() I = igl.eigen.MatrixXi() C = igl.eigen.MatrixXd() igl.point_mesh_squared_distance(V, V, F, sqrD, I, C) max_distance = math.sqrt(sqrD.maxCoeff()) # Precompute signed distance AABB tree tree.init(V, F) # Precompute vertex, edge and face normals igl.per_face_normals(V, F, FN) igl.per_vertex_normals(V, F, igl.PER_VERTEX_NORMALS_WEIGHTING_TYPE_ANGLE, FN, VN)
C = igl.eigen.MatrixXd() M = igl.eigen.MatrixXd() Q = igl.eigen.MatrixXd() T = igl.eigen.MatrixXi() F = igl.eigen.MatrixXi() BE = igl.eigen.MatrixXi() P = igl.eigen.MatrixXi() sea_green = igl.eigen.MatrixXd([[70. / 255., 252. / 255., 167. / 255.]]) selected = 0 pose = igl.RotationList() anim_t = 1.0 anim_t_dir = -0.03 igl.readMESH(TUTORIAL_SHARED_PATH + "hand.mesh", V, T, F) U = igl.eigen.MatrixXd(V) igl.readTGF(TUTORIAL_SHARED_PATH + "hand.tgf", C, BE) # Retrieve parents for forward kinematics igl.directed_edge_parents(BE, P) # Read pose as matrix of quaternions per row igl.readDMAT(TUTORIAL_SHARED_PATH + "hand-pose.dmat", Q) igl.column_to_quats(Q, pose) assert (len(pose) == BE.rows()) # List of boundary indices (aka fixed value indices into VV) b = igl.eigen.MatrixXi() # List of boundary conditions of each weight function bc = igl.eigen.MatrixXd()
print_usage(keys) V = igl.eigen.MatrixXd() BC = igl.eigen.MatrixXd() W = igl.eigen.MatrixXd() T = igl.eigen.MatrixXi() F = igl.eigen.MatrixXi() G = igl.eigen.MatrixXi() slice_z = 0.5 overlay = 0 # Load mesh: (V,T) tet-mesh of convex hull, F contains facets of input # surface mesh _after_ self-intersection resolution igl.readMESH(TUTORIAL_SHARED_PATH + "big-sigcat.mesh", V, T, F) # Compute barycenters of all tets igl.barycenter(V, T, BC) # Compute generalized winding number at all barycenters print("Computing winding number over all %i tets..." % T.rows()) igl.winding_number(V, F, BC, W) # Extract interior tets Wt = sum(W > 0.5) CT = igl.eigen.MatrixXi(Wt, 4) k = 0 for t in range(T.rows()): if W[t] > 0.5: CT.setRow(k, T.row(t))
elif key == ord('.'): slice_z = min(slice_z + 0.01, 0.99) elif key == ord(','): slice_z = max(slice_z - 0.01, 0.01) else: return False update_visualization(viewer) return True print("Press [space] to toggle showing surface.") print("Press '.'/',' to push back/pull forward slicing plane.") # Load mesh: (V,T) tet-mesh of convex hull, F contains original surface triangles igl.readMESH(TUTORIAL_SHARED_PATH + "bunny.mesh", V, T, F) # Call to point_mesh_squared_distance to determine bounds sqrD = igl.eigen.MatrixXd() I = igl.eigen.MatrixXi() C = igl.eigen.MatrixXd() igl.point_mesh_squared_distance(V, V, F, sqrD, I, C) max_distance = math.sqrt(sqrD.maxCoeff()) # Precompute signed distance AABB tree tree.init(V, F) # Precompute vertex, edge and face normals igl.per_face_normals(V, F, FN) igl.per_vertex_normals(V, F, igl.PER_VERTEX_NORMALS_WEIGHTING_TYPE_ANGLE, FN, VN) igl.per_edge_normals(V, F, igl.PER_EDGE_NORMALS_WEIGHTING_TYPE_UNIFORM, FN, EN, E, EMAP)