示例#1
0
文件: proxy.py 项目: worbit/compas
    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()
示例#3
0
                               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})]