Pattern

Generating a pattern is the start of the form-finding process using RhinoVAULT2. The FormDiagram is generated from a pattern, which represents one possible way for the loads to flow down horizontally towards the supports. The topology of the pattern will also be reflected in the generation of the ForceDiagram.

There are many ways to generate a topological pattern. Each method has pros and cons, and the desired design or workflow will help determine which method is more appropriate.

In the case of the rib layout variations for the rib-stiffened funicular floor system, the boundary remains fixed (the footprint and depth of the floor). However, depending on the topology of the form diagram, the distribution and flow of forces change drastically.

Quad mesh patterns and triangle mesh patterns are most commen and practical to use. A quad mesh pattern defines two main directions for the forces. In this case, interact with forces during the form-finding process is easier. Triangulation is a method that is fast and robust for creating a Pattern from a set of complex boundary features. In this case, interact with the Force diagram is not as easy as for the quad pattern, and the variability in direction and magnitude of the reaction forces can make the design of the supports more demanding.

Rhino VAULT 2 provides users various methods to create a pattern. You could also customize your mesh in Rhino with python script, and use RV2pattern_from_lines, or RV2pattern_from_mesh to use it as the pattern.

cmd

input

mesh type

RV2pattern_from_lines

line segments (of the mesh)

based on input

RV2pattern_from_mesh

mesh object

based on input

RV2pattern_from_skeleton

one or a set of branch lines

quad

RV2pattern_from_surfaces

surface object

quad

RV2pattern_from_triangulation

outer, inner boundaries and constraint curves

triangle

RV2pattern_from_features

surface and point features

quad

Ex. Add a diagonal crease

  • add specific features in the structure, why to add these features?

  • understand adding the diagonal edges creating a new path for the forces

Question:

Suppose you have designed the structure as shown in the left of the following picture. Now you want to add a diagonal crease in the middle. How would you do it? Which forces has changed?

Answer:

First, modify the code from the first exercise and anchor the points in the four corners to achieve the initial structure.

# ==============================================================================
# Anchors
# ==============================================================================
anchors = list(pattern.corner_vertices())
pattern.vertices_attribute('is_anchor', True, keys=anchors)

Now if a crease needs to be added, it means a new path for the forces should be created diagonally. Thus, the pattern needs to be modified by adding diagonal edges. Load the new pattern2.json.

Compute horizontal equilibirum. In the ForceDiagram, the new diagonal edges show up in the center. But if horizontal equilibirum is calculated, the final structure would not change much, because the forces in the crease hasn't been modified and the reaction forces in the four corners are sill the same. What is different compared to before is that the diagonal gives us the opportunity to increase the forces along its direction and reach our design goals.

To attract forces along the new diagonal, the length of edges corresponding to the diagonal edges should be increased. Then calculate the vertical equilibirum again, the crease is created.

# ==============================================================================
# Modify Force Diagram
# ==============================================================================
guids = compas_rhino.select_points(message='Select Force Vertices to Modify')
compas_rhino.rs.HideObjects(guids)
points = compas_rhino.get_point_coordinates(guids)

gkey_key_dict = force.gkey_key()
for pt in points:
    vkey = gkey_key_dict[geometric_key(pt)]
    x = force.vertex_attribute(vkey, 'x')
    y = force.vertex_attribute(vkey, 'y')
    force.vertex_attribute(vkey, 'x', x + 5.5)
    force.vertex_attribute(vkey, 'y', y + 5.5)

The reaction forces in the supports can be visualized.

thrustartist.draw_reactions(vertices=anchors, color=(0, 255, 255), scale=1.0, tol=1e-3)

Last updated