Beispiel #1
0
def VerticalEquilibrium_fromZMax_fromData(formdata,
                                          zmax,
                                          kmax=100,
                                          density=1.0):  # *args, **kwargs
    form = FormDiagram.from_data(deepcopy(formdata))
    scale = vertical_from_zmax(form, zmax, kmax, density=density)
    return form.to_data(), scale
Beispiel #2
0
def from_vertices_and_faces(vs, fs):
    mesh = Mesh.from_vertices_and_faces(vs, fs)
    form = FormDiagram.from_mesh(mesh)
    corners = list(form.vertices_where({'vertex_degree': 2}))

    form.vertices_attribute('is_anchor', True, keys=corners)
    form.edges_attribute('q', 10.0, keys=form.edges_on_boundary())
    relax_boundary_openings(form, corners)

    form.update_boundaries()
    force = ForceDiagram.from_formdiagram(form)

    horizontal_nodal(form, force, alpha=95)
    scale = vertical_from_zmax(form, 450.0)

    return form
import compas_tna

from compas_tna.diagrams import FormDiagram
from compas_tna.diagrams import ForceDiagram
from compas_tna.equilibrium import horizontal
from compas_tna.equilibrium import vertical_from_zmax
from compas_plotters import MeshPlotter
from compas.utilities import i_to_black

FILE = compas_tna.get('tutorial/boundaryconditions.json')

form = FormDiagram.from_json(FILE)
force = ForceDiagram.from_formdiagram(form)

horizontal(form, force, alpha=100)
scale = vertical_from_zmax(form, 3.0)

# ==============================================================================
# visualise
# ==============================================================================

z = form.vertices_attribute('z')
zmin = min(z)
zmax = max(z)

plotter = MeshPlotter(form, figsize=(12, 8), tight=True)

plotter.draw_vertices(
    keys=list(form.vertices_where({'is_external': False})),
    facecolor={
        key: i_to_black((attr['z'] - zmin) / (zmax - zmin))
Beispiel #4
0
form.update_interior(interior)

# ------------------------------------------------------------------------------
# make force diagram
# ------------------------------------------------------------------------------
force = ForceDiagram.from_formdiagram(form)

# ------------------------------------------------------------------------------
# horizontal equilibrium
# ------------------------------------------------------------------------------
horizontal(form, force, kmax=100)

# ------------------------------------------------------------------------------
# vertical equilibrium
# ------------------------------------------------------------------------------
vertical_from_zmax(form, force, zmax=5.)
vertical_from_self(form, force)
vertical_from_formforce(form, force)

# ------------------------------------------------------------------------------
# rhino drawings
# ------------------------------------------------------------------------------

# form diagram -----------------------------------------------------------------
artist = FormArtist(form, layer='FormDiagram')
artist.clear_layer()
artist.draw_vertices(keys=list(form.vertices_where({'is_external': False})))
artist.draw_edges(keys=list(form.edges_where({'is_edge': True, 'is_external': False})))
artist.draw_faces(fkeys=list(form.faces_where({'is_loaded': True})), join_faces=True)
artist.draw_reactions(scale=.1)
artist.draw_forces(scale=.003)
Beispiel #5
0
form.set_vertices_attribute('is_anchor', True, keys=exterior)

form.update_exterior(exterior, feet=1)
form.update_interior(interior)

# ==============================================================================
# create the force diagram

force = ForceDiagram.from_formdiagram(form)

# ==============================================================================
# compute equilibrium

horizontal_nodal(form, force)

scale = vertical_from_zmax(form, zmax=2)

print('scale:', scale)
print('zmax:', max(form.get_vertices_attribute('z')))
print('residual:', form.residual())

# ==============================================================================
# visualise the result

viewer = FormViewer(form, figsize=(14, 9))

viewer.draw_vertices(keys=list(form.vertices_where({'is_external': False})),
                     text={
                         key: "{:.1f}".format(attr['z'])
                         for key, attr in form.vertices(True)
                     })
Beispiel #6
0
form.set_vertices_attribute('is_anchor', True, keys=exterior)

form.update_exterior(exterior, feet=1)
form.update_interior(interior)

# ==============================================================================
# create the force diagram

force = ForceDiagram.from_formdiagram(form)

# ==============================================================================
# compute equilibrium

horizontal(form, force)

scale = vertical_from_zmax(form, zmax=3, xtol=1e-3, rtol=1e-2, kmax=200)

print('scale:', scale)
print('zmax:', max(form.get_vertices_attribute('z')))
print('residual:', form.residual())

# ==============================================================================
# visualise result

viewer = FormViewer(form, figsize=(10, 7))
viewer.defaults['edge.fontsize'] = 4

viewer.draw_vertices(keys=list(form.vertices_where({'is_external': False})),
                     radius=0.1)

viewer.draw_edges(keys=list(