mesh = Mesh.from_obj(compas.get('faces.obj')) mesh.update_default_vertex_attributes({'px': 0.0, 'py': 0.0, 'pz': 0.0}) mesh.update_default_edge_attributes({'q': 1.0}) key_index = mesh.key_index() xyz = mesh.get_vertices_attributes('xyz') edges = [(key_index[u], key_index[v]) for u, v in mesh.edges()] fixed = [ key_index[key] for key in mesh.vertices_where({'vertex_degree': 2}) ] q = mesh.get_edges_attribute('q', 1.0) loads = mesh.get_vertices_attributes(('px', 'py', 'pz'), (0.0, 0.0, 0.0)) xyz, q, f, l, r = numerical.fd_numpy(xyz, edges, fixed, q, loads) for key, attr in mesh.vertices(True): index = key attr['x'] = xyz[index][0] attr['y'] = xyz[index][1] attr['z'] = xyz[index][2] attr['rx'] = r[index][0] attr['ry'] = r[index][1] attr['rz'] = r[index][2] for index, (u, v, attr) in enumerate(mesh.edges(True)): attr['f'] = f[index][0] attr['l'] = l[index][0] # artist = MeshArtist(mesh)
# make a mesh mesh = Mesh.from_obj(FILE) # update default vertex attributes mesh.update_default_vertex_attributes({'px': 0.0, 'py': 0.0, 'pz': 0.0}) mesh.update_default_edge_attributes({'q': 1.0}) # numerical data xyz = mesh.get_vertices_attributes('xyz') edges = list(mesh.edges()) fixed = list(mesh.vertices_where({'vertex_degree': 2})) q = mesh.get_edges_attribute('q', 1.0) loads = mesh.get_vertices_attributes(('px', 'py', 'pz'), (0.0, 0.0, 0.0)) # call to fd_numpy over proxy server xyz, q, f, l, r = proxy.fd_numpy(xyz, edges, fixed, q, loads) # update the mesh vertices for key, attr in mesh.vertices(True): mesh.set_vertex_attributes(key, 'xyz', xyz[key]) mesh.set_vertex_attributes(key, ('rx', 'ry', 'rz'), r[key]) # update the mesh edges for index, (u, v, attr) in enumerate(mesh.edges(True)): attr['f'] = f[index][0] attr['l'] = l[index][0] # visualise the result artist = MeshArtist(mesh, layer="Mesh::FD") artist.clear_layer() artist.draw_vertices()
scale_vector(normal, -0.01)) EDOS.set_vertex_attributes(key, ['px', 'py', 'pz'], scale_vector(normal, +0.01)) # ============================================================================== # Pillowing IDOS # ============================================================================== key_index = IDOS.key_index() vertices = IDOS.get_vertices_attributes('xyz') edges = [[key_index[u], key_index[v]] for u, v in IDOS.edges()] fixed = [key_index[key] for key in IDOS.vertices_where({'is_anchor': True})] q = IDOS.get_edges_attribute('q') loads = IDOS.get_vertices_attributes(['px', 'py', 'pz']) xyz, q, f, l, r = NUMERICAL.fd_numpy(vertices, edges, fixed, q, loads) for key, attr in IDOS.vertices(True): index = key_index[key] attr['x'] = xyz[index][0] attr['y'] = xyz[index][1] attr['z'] = xyz[index][2] # ============================================================================== # Pillowing EDOS # ============================================================================== key_index = EDOS.key_index() vertices = EDOS.get_vertices_attributes('xyz') edges = [[key_index[u], key_index[v]] for u, v in EDOS.edges()] fixed = [key_index[key] for key in EDOS.vertices_where({'is_anchor': True})]