Ejemplo n.º 1
0
    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)
Ejemplo n.º 2
0
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()
Ejemplo n.º 3
0
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
Ejemplo n.º 4
0
    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()
Ejemplo n.º 5
0
    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
Ejemplo n.º 6
0
                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)]