Parametric Bridge from Points



Author:

Categories: Tutorials

Tagged with: | | | | | | | |


Full Script

Download Script:

Download .3dm File:

Aim & Concept

Bridge Script Applied in Studio Project

Why I Created This Script

In my studio project, I’m designing a space with an atrium that spans multiple floors, where footbridges are needed to connect the floors. However, the width of the atrium changes, meaning each bridge would have to be modeled differently.

Manually adjusting each bridge would take hours—and every time something changed, I’d have to start over. I needed a faster, more flexible solution that would allow me to quickly adapt the design without losing control over the details.

Why This Script Saves Time

Instead of manually adjusting widths, thicknesses, and heights, I can do everything with one simple click:
Change the bridge length to match the atrium.

Change the bridge width to create a more dynamic space.
Adjust the floor thickness depending on material needs.
Modify the handrail height and curvature for different conditions.
Refine the walls – their shape, height, and curvature are all parametric.
Adapt the timber panel size of the walls.

Since my project involves multiple footbridges, this script makes it possible to update all of them instantly without having to remodel each one. It transforms a time-consuming process into a flexible, dynamic workflow.

The Steps

How It Works

The script generates a footbridge using just points: the start, middle (can be multiple), and end. From these points, the script automatically constructs the bridge and gives me control over multiple aspects of the design.

It produces four key outputs:

  1. The floor slab – The walking surface of the bridge.
  2. The bridge walls – Defining the structure’s enclosure.
  3. The handrail – Adjustable in height, curvature, and offset from the walls.
  4. The timber panels – A modular system of triangular panels that can be resized and adapted.

Step 1: Creating the Bridge Floor Slab

Part 1: Bridge Floorslab

The first step in my parametric bridge script is generating the bridge’s floor slab—the main surface people will walk on.

1. Setting the Base Points

2. Mirroring the Curve & Adjusting Width Efficiently

This makes the script shorter and more efficient, reducing unnecessary components while increasing flexibility.

3. Generating the Floor Slab Surface

Conclusion: My Learning Process and Future Improvements

At this stage, I already have a parametric floor slab that responds to different point positions, widths, and spans. This part of the script was quite simple and I didn’t run into any issues, but some potential options for it would be to use the Box component (by setting the Domain of the box and its Base Plane). This would be any easier option if the desired output is a more rectilinear design.

Option 1: create a curved floorslab using a Ruled Surface (see image above)

Option 2: create a rectangular floorslab using a Box (issue: the length of the box is defined by a slider and not by the start and end points of the bridge, which does not correspond to my concept)

Option 2: Box (not used in the final script)

Option 3: the tedious approah would be to manually create a box extrusion. (issue: the extrusion is defined by the start and end points of the bridge as desired, but this script is simply too tedious)

Option 3 (not used in the final script)

Step 2: Deconstructing the Floor Slab for Further Use

Step 2

With the floor slab created, the next step is to break it down into its components so that different parts of the bridge can be constructed efficiently.

1. Using the Deconstruct Brep Component

2. Selecting the Needed Items

This approach keeps the script efficient—instead of creating new reference geometry, everything is linked to the existing slab, ensuring that if any changes are made (e.g., adjusting width or thickness), the updates flow through the rest of the design.

Step 3A: Creating the Timber Slats

Step 3A

Now that the bottom face of the floor slab has been extracted in Step 2, we can use it as the base for generating the timber slats.

1. Using the Contour Component to Generate Slat Lines

2. Extruding the Contour Lines into Surfaces

3. Creating the Final Closed Timber Slats

The result is a set of timber slats that can be adjusted by modifying the contour spacing slider. The slats can now be baked into Rhino as solid objects.

Step 3B: Creating a Set of Curves to Serve as the Base for the Bridge Walls

Step 3B

This was probably the most challenging step for me because it involved working with data trees—which are essential in Grasshopper when dealing with structured lists of points, curves, and surfaces. Instead of treating all geometry as a single flat list, data trees allow us to work with hierarchical relationships

1. Generating the Middle Axis of the Bridge

2. Creating Perpendicular Frames (Perp Frames vs. Contour?)

3. PCX (Curve | Plane Intersect)

4. PShift (Periodic Shift)

5. Exploding the Data Tree

6. Using Arc SED (Arc with Start, End, and Direction)

Now that I have key points, I can start shaping the actual curves that will later define the walls.

7. Scaling the Walls with Scale NU

8. Length (LNG) & Range

9. Graph Mapper

10. BND (Bounds) & ReMap

11. Merge the ReMapped Data Streams

12. Shatter

Possible Mistakes in This Step:

or at least mistakes that I made…

  1. PCX (Curve | Plane Intersect) generates multiple intersection points
    • These points are structured as a data tree (organized lists of points, grouped by frame).
  2. BANG! is extracting data but still in tree structure
    • {0;0;0;0} and {0;0;0;1} notation indicates that two separate branches are being extracted.
    • However, the Arc component expects flat data, meaning it needs only one pair of start and end points per arc.
  3. PShift (Periodic Shift) reorders the list by shifting elements cyclically: The first point in each branch gets moved to the end, and everything shifts forward by one position. This makes sure that each point is paired correctly with the next one, creating a clean sequence of start and end points for the Arc component.

In the Arc SED → Scale NU setup, I forgot to add a Point component before connecting to Scale NU. Without it, the script does not know what to scale around, causing it to fail.

Step 4: Creating the Bridge Walls

Now that the curves defining the walls have been generated in Step 3B, the next step is to convert them into surfaces and finalize them as a mesh structure.

1. Creating the Bridge Wall Surfaces with Loft

Input: Curves from Step 3B

2. Panelizing the Walls Using TriB (Triangle Panels B) LunchBox plugin

3. Extracting and Manipulating Panel Center Points

4. Controlling Panel Transformations with Graph Mapper & ReMap

What’s the Role of BND (Bounds) and ReMap?

5. Finalizing the Walls: Mesh Extrusion

Step 5: Creating the Railing

Step 5: railing

1. Defining the Placement of Vertical Handrail Supports

Dividing the Curve from Step 1 into Points

Why Use a Random Component?

2. Generating the Vertical Handrail Posts

3. Creating the Handrail

4. Mirroring the Handrail for the Opposite Side

Short Animation

This short clip demonstrates some of the adjustments possible with the parametric bridge script, including modifications to curvature, wall height, panelization, and handrail size. However, the script offers a lot more: width adjustment, possibility to change the form of the walls as well as the size of their openings, and more.

How the Script Helped Find a Solution

The script provided a parametric solution to efficiently generate adaptive footbridges in a complex atrium where manual modeling would be time-consuming and inflexible. By using just three points to define the bridge, it automated the creation of the floor slab, walls, handrails, and timber panels, allowing for instant adjustments in width, curvature, height, and panelization. This eliminated the need for manual redesigns, making it possible to quickly adapt the bridges to different floor levels and varying atrium widths while maintaining design consistency and structural logic.

Where Are Its Limits?

The script has certain limitations that could impact its adaptability and real-world application. Structural analysis is not integrated, meaning the bridge’s form is optimized for design but lacks validation for load-bearing capacity, material strength, and deflection behavior. Without tools like Karamba3D, the bridge might require manual adjustments before fabrication.

Another constraint is texture mapping and material control, which currently require manual adjustments in Rhino. While the script generates precise geometry, UV mapping for realistic timber textures is not fully automated, making visualization less seamless.

Currently, the bridge wall heights are directly linked to the width of the floor slab, meaning wider bridges result in taller walls. The bridge walls could be separated from the floor slab width by setting a minimum human-scale height (e.g., 2.2m) and allowing independent control via a slider. This would ensure the walls remain comfortable for pedestrians

Future Improvements & Upgrades

Beyond My Studio Project

Although I developed this script specifically for my atrium bridges, it could be applied anywhere a quick, adaptable footbridge is needed. Whether it’s for urban design, landscape architecture, or even interior spaces, this approach makes bridge design faster, more flexible, and responsive to real-world constraints.

Karamba3D for Structural Analysis

Playing Around with Bridge Walls

The bridge walls could be enhanced with kinetic openings, image-based patterns, or attractor-driven perforations to create a more dynamic and engaging experience. Kinetic panels could rotate, slide, or expand in response to movement, wind, or sunlight, making the bridge interactive and adaptable. Image-based openings could use a grayscale image to dictate perforation sizes, creating artistic facades or shading effects. Attractor-driven openings could vary in size based on key viewpoints in the building, naturally framing important views.

Plugin Used – LunchBox

I’d like to credit and thank Nathan Miller for the LunchBox plugin, which played a key role in simplifying the creation of the bridge wall panels and helped save time in the design process.

The plugin can be downloaded at: https://www.food4rhino.com/en/app/lunchbox