Sunday, 1 November 2009

British Museum Great Court Roof using StructDrawRhino

Another stunning, innovative structure that has inspired similar projects since.  It's a favorite space of mine, especially on a bright sunny day when the shadows and reflections are mesmerising.

Here's some papers, blog posts and links I found to determine how Happolds and Fosters designed this amazing roof.

So, now you can try to do something similar yourself using the structural plug-ins for Rhino.  My routines and commands don't follow exactly the description from the paper, but they allow something similar to be created.

To try this for yourself, the input Rhino file can be downloaded from here

I'm currently coding up algorithms for more powerful force density routines to include dynamic relaxation, but in the interim you can try the sdrMeshRepelVertex command to relax a rigid mesh outline with discontinuitys at nodes/vertices for continuing edges.  I used the sdrZigZagCurves command to divide the initial radial lines to generate the starting Grid.

From the starting flat grid, we can use the plug-in command sdrMeshProjectVerts to project the mesh vertices onto the mathematical surface.

Then we start the mesh relaxing process.  The command  sdrMeshRepelVerts uses force density to repel mesh vertex away from their neighbours.  Naked/Free edges/vertex will be restrained.  The more loops or iterations you allow, the better the result you will get.  Note that you can nominate a target surface that will vertically project the vertex back onto the surface (if you don't, the mesh will naturally flatten).  I found the best result was by nominating the balance force option for a number of iterations, and then to run a few loops of the target equal length for edges.

You can then extract the medge edges to curves using the sdrMeshDupEdges command.  By applying a structural profile (I assumed a much larger hollow profile than that used), the plug-in will automatically sweep the centreline curves.

There is also a number of routines in development for form finding and finding minimal surfaces.  Blog posts with worked examples will shortly follow, but if you look at sdrMinShapeMesh function you can try it for your self.  The other sdrMesh.... routines allow manipulation of mesh generated in Rhino to transform it to arrangements more appropriate for analysis/solving.

If you've any requests, ideas or suggestions for these routines (or need more help or other examples), don't hesitate to get in touch.


  1. Hi Jon, super useful plugin. The graphs in this paper are fascinating:
    It basically shows that he was able to create an optimum surface with the least stress, but he ended up analytically describing the surface with three functions. The final roof carries a lot of stress in it. I still think Williams made the right decision: the aesthetic qualities of the roof are as important as its structural performance.

  2. jon, i'm curious... how did you go from the grid where you used the sdrzigzagcurves command to the mesh that was the rhino model?

  3. Hi Jeremy,

    I recall I had a curve network (where all curves are split at intersections) to mesh routine, but I've just looked and it doesn't seem to be available in the current plug-ins. I'll add it back shortly.

    Note also the most recent builds of SDR have direct curve network force density without converting to mesh. I'm nearly there with a Rhino common build of the plug-ins for v5 (and v4 with Grasshopper v0.7.0037+) and hope to revisit and repost many of these early examples shortly.



  4. I always enjoy a walk around the museum, all the historical value makes me feed my knowledge and i feel that i grow up like a person. I like to try what i want to prove. this is when i buy viagra for my husband. whenever i have a doubt, i mus to satisfy my curiosity.

  5. This comment has been removed by the author.

  6. Hi, I'm new to grasshopper, which I found is very interesting.
    I'm wondering how the flat patterned mesh projected to the surface has been created?


  7. Hi Jie,

    This particular blog post was done when Grasshopper was in it's infancy. I used some manual techniques to generate the base mesh on a flat plane, and then projected the mesh vertex up onto the surface. I haven't really found time to make an automatic radial mesher for this scenario. Hope you enjoy Grasshopper.

  8. what structure plug-in is used in the program

  9. This demonstration of achieving an a structural grid akin to the Great Court Roof is assisted by the Geometry Gym plugins, primarily StructDrawRhino in this case.

  10. Hello, Jon, I'm working for a thesis for the renovation of the historical courts by adding a roof on it, and I chose Great Court in British Museum. I would like to ask you how you have found the dimension infomation of the great court?

    1. Primarily from

      My relaxation doesn't give exact shape found by designers, but it's reasonably close.