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
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))
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)
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) })
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(