def __init__(self, structure, name='compas_fea App', width=1500, height=1000, data={}): data = {} data['vertices'] = {i: structure.node_xyz(i) for i in structure.nodes} data['edges'] = [] data['faces'] = {} data['fixed'] = [] try: for key in structure.steps[structure.steps_order[0]].displacements: displacement = structure.displacements[key] nodes = structure.sets[displacement.nodes]['selection'] data['fixed'].extend(nodes) except: pass for ekey, element in structure.elements.items(): nodes = element.nodes if len(nodes) == 2: sp, ep = nodes if element.__name__ == 'TrussElement': col = [255, 150, 150] elif element.__name__ == 'BeamElement': col = [150, 150, 255] elif element.__name__ == 'SpringElement': col = [200, 255, 0] data['edges'].append({'u': sp, 'v': ep, 'color': col}) elif (len(nodes) == 3) or (len(nodes) == 4): data['faces'][ekey] = {'vertices': nodes, 'color': [150, 250, 150]} VtkViewer.__init__(self, name=name, width=width, height=height, data=data)
def view_form(form): """ View thrust network with compas VtkViewer. Parameters ---------- form : obj FormDiagram to view thrust network. Returns ------- None """ viewer = VtkViewer(datastructure=form) viewer.setup() viewer.start()
def plotvoxels(values, U, vdx, indexing=None): """ Plot values as voxel data. Parameters ---------- values : array Normalised data at nodes. U : array Nodal co-ordinates. vdx : float Representative volume size for a voxel. Returns ------- None """ U = np.array(U) x = U[:, 0] y = U[:, 1] z = U[:, 2] xmin, xmax = min(x), max(x) ymin, ymax = min(y), max(y) zmin, zmax = min(z), max(z) X = np.linspace(xmin, xmax, (xmax - xmin) / vdx) Y = np.linspace(ymin, ymax, (ymax - ymin) / vdx) Z = np.linspace(zmin, zmax, (zmax - zmin) / vdx) Xm, Ym, Zm = np.meshgrid(X, Y, Z) # Zm, Ym, Xm = meshgrid(X, Y, Z, indexing='ij') f = abs(np.asarray(values)) Am = np.squeeze(griddata(U, f, (Xm, Ym, Zm), method='linear', fill_value=0)) Am[np.isnan(Am)] = 0 voxels = VtkViewer(data={'voxels': Am}) voxels.setup() voxels.start() return Am
n = 50 a = linspace(-1, 1, n) xm, ym, zm = meshgrid(a, a, a) # Test points x = xm.ravel() y = ym.ravel() z = zm.ravel() r = x**2 + y**2 + z**2 lg = r < 0.05 xs = x[lg][:, newaxis] ys = y[lg][:, newaxis] zs = z[lg][:, newaxis] points = hstack([xs, ys, zs]) print(points.shape) # Distances distances = closest_distance_field_numba(xm, ym, zm, points) # View data = {'voxels': distances} viewer = VtkViewer(data=data) viewer.setup() viewer.start()
def callback(X, self): self.update_vertices_coordinates( {i: X[i, :] for i in range(X.shape[0])}) def func(self): drx_numpy(structure=structure, tol=0.05, update=True, refresh=5, callback=callback, self=self) print('Press key S to start') viewer = VtkViewer(data=data) viewer.vertex_size = 1 viewer.edge_width = 10 viewer.keycallbacks['s'] = func viewer.setup() viewer.start() # ========================================================================== # Example 2 (grid) # ========================================================================== # import compas # from compas.datastructures import Network # from compas.plotters import NetworkPlotter
edges.append([p2, p4]) network = Network.from_vertices_and_edges(vertices=vertices, edges=edges) sides = [i for i in network.vertices() if network.vertex_degree(i) <= 2] network.update_default_vertex_attributes({'P': [0, 0, 1000 / network.number_of_vertices()]}) network.update_default_edge_attributes({'E': 100, 'A': 1, 'ct': 't'}) network.set_vertices_attributes(keys=sides, names='B', values=[[0, 0, 0]]) drx_numba(network=network, tol=0.01, summary=1, update=1) data = { 'vertices': {i: network.vertex_coordinates(i) for i in network.vertices()}, 'edges': [{'u': u, 'v': v} for u, v in network.edges()] } viewer = VtkViewer(data=data) viewer.vertex_size = 0 viewer.setup() viewer.start() # ========================================================================== # Example 2 (keyboard) # ========================================================================== # from compas.datastructures import Network # from compas.viewers import VtkViewer # m = 50 # p = [(i / m - 0.5) * 5 for i in range(m + 1)]