HERE = os.path.dirname(__file__) FILE = os.path.join(HERE, '..', 'data', 'tubemesh.json') mesh = Mesh.from_json(FILE) tri = mesh.copy() mesh_quads_to_triangles(tri) # ============================================================================== # Isolines # ============================================================================== M = tri.to_vertices_and_faces() S = mesh.vertices_attribute('z') vertices, edges = igl.trimesh_isolines(M, S, 50) levels = groupby(sorted(edges, key=lambda edge: vertices[edge[0]][2]), key=lambda edge: vertices[edge[0]][2]) # ============================================================================== # Visualisation # ============================================================================== smin = min(S) smax = max(S) lines = [] for value, edges in levels: for i, j in edges: lines.append({
mesh = Mesh.from_json(FILE) mesh_quads_to_triangles(mesh) # ============================================================================== # Isolines # ============================================================================== key_index = mesh.key_index() V = mesh.vertices_attributes('xyz') F = [[key_index[key] for key in mesh.face_vertices(fkey)] for fkey in mesh.faces()] S = mesh.vertices_attribute('z') N = 50 vertices, levels = igl.trimesh_isolines(V, F, S, N) # ============================================================================== # Visualisation # ============================================================================== smin = min(S) smax = max(S) lines = [] for scalar, edges in levels: for i, j in edges: lines.append({ 'start' : vertices[i], 'end' : vertices[j], 'color' : i_to_rgb((scalar - smin) / (smax - smin))