I passed through Barcelona last April on holiday and finally managed to visit La Sagrada Familia, the great unfinished work of Gaudi. This is a pilgrimage I have long wanted to make, though for purely secular reasons. The now consecrated and operational Basilica is truly breathtaking and entering that dizzying forest of columns and staring up into the canopy of intersecting hypars and columns for the first time is an incredible experience.

This left me hooked on understanding the geometric puzzles that have been handed down to us by Gaudi. I got hold of two of  Mark Burry’s books, downloaded the information to be found on the Sagrada Familia website and set about trying to recreate the system of columns in Grasshopper 3D.

Understanding the Problem

My aim was to create an open ended Grasshopper definition that could create any number of sides to the column, thereby creating the full hierarchy of 6, 8, 10  or 12 sided columns found in the basilica.


As you can see in those references above on the Sagrada Familia website, the base profile of the column is a parabolic curve within the constraints of a polygon of a set number of points.

This base profile then counter rotates against a copy of itself, the intersection of these two give the column’s section. The column has a further hierarchy in these profiles further duplicating themselves at each section of the column. The first column section has a height in metres equal to the number of sides to the column, eg. a six sided column will have a first section of height 6m, followed by a section of 3m, then 1.5m etc. At each section the number of profiles rotating will double.


In this way the profile moves from the parabolic base curve to a more ridged profile reminiscent of classical greek arrised columns.

Creating the Grasshopper definition

The trickiest element in achieving this in Grasshopper is to create the sequence of rotations for each profile curve and managing the data tree that this creates correctly.

GH script screenshot

The profiles at each height are then turned into negative versions around the column as split hoops, this then allows us to perform a mass curve Boolean on them and results in the desired column profile.


If we have used a sufficient number of profiles along the height of the columns the surface we loft through these will give us a faithful representation of a column.

Creating the Base

The column base takes as its starting point the n-sided star polygon for the column and builds hypar surfaces onto it. Hypars are ruled surfaces,but they result in a double curved surface geometry. The regular layout of the edges (see below left) here results in hypars which, when cut with a horizontal plane, will produce parabolas. This can be seen below right and these cut edges of the hypar match the starting profile for the column perfectly.


The hypars are then trimmed against each other and the ground plane to produce the repeatable element highlighted in yellow above right.

Further Curvature Experiments

In seeing the columns in place and looking at the virtual reproduction in Rhino, one aspect of the geometry of the columns that bothered me was the curvature discontinuity between stages of the column where the number of profiles doubles. Now, in surface modelling in general we are used to looking at and modelling G2 continuity in NURBS by matching control points across surface boundaries etc. However, in this case I wondered if it would be possible to extend the first principles thinking of Gaudi.

If we consider the original way in which the plaster models were created of the columns there is a linear relationship between the rotation and the height along the column. What if this linear relationship could be replaced with one which still passes through the key points at each stage, but with a gradual change in gradient to the change in rotation angle?

I had considered driving this originally making use of a NURBS curve, but somehow that didn’t seem satisfactorily fundamental when compared to the relationships that Gaudi envisaged.


The equation is dependent on the stage that the profiles being drawn by grasshopper are currently within and uses a cosine curve to vary the rotation with a perfectly smooth change in rotation at the transition points along the height of the column.

140711 gradient controlled 6 sided column render 2

Above left, the original linear rotations, and right the smoothed rotations.

140711 gradient controlled 6 sided column envmap

The images above show the difference in the resulting curvatures, with the original geometry on the left and the revised geometry to the right, which as you can see has no curvature discontinuity.

I hope this does not seem too presumptuous in attempting to refine the geometry of Gaudi’s columns further, it is incredible what Gaudi achieved with entirely analogue tools and an incredible vision, I only wonder what he would have produced with access to the tools we have today!