Geometry Challenge solved with Grasshopper and ARCHICAD

Hello everyone,
One of our latest collaborations for a fair pavilion design came with a very nice and interesting geometrical problem, which we have tried to analyse, compute and ultimately succeeding in solving thanks to the algorithmic design using Grasshopper. Not only that, but as we will soon see, once more the possibility of dialogue with ARCHICAD allowed us to produce a set of detailed and precise working documents (drawings as well as a BIMx model) shared among the client, the lead architect, contractor and fabrication workshop.
While one part of our design team was designing and developing the actual structure for the exhibition hub, another team started tackling the geometrical topic of what could be defined as one of the main design drivers to integrate the architecture and the contents of the exhibition. The whole team was working in close dialogue with the lead architect and the graphic designer, who underestimated the geometrical implications of what they had in mind. Further advanced modelling was needed in order to provide enough information to the different actors involved. As always, correct and precise communication can reduce issues during the design process as well as on site.
Let’s get into details!
The basic arrangement of simple white-panelled house-like structures had to be integrated with a continuous set of parallel stripes running across all the various interior surfaces of the panels. We could immediately picture the end result in our minds, not fully understanding the challenges of achieving the goal in a clean, precise and effective manner.
As input material from the graphic designer in charge of the task, we were given a set of 2D views of the interiors where he had overlaid the pattern and arrangements of stripes as he wanted it. The wanted effect was to have a set of parallel elements with a predefined width between stripe and gap (5 stripes of 10 cm, 4 gaps of 10 cm, total of 90 cm).


Our first approach was to quickly model (tracing) these stripes in ARCHICAD using curtain walls, morphs, slabs and roofs elements in order to have a first spatial feeling in 3D.

It soon turned out that the nice development represented on the views was indeed not achievable due to geometrical constraints happening where the stripes had to “turn” and change plane. When a stripe (or set of them) has a defined width (y) and meets the edge of its base plane at an angle (), the width is defined as x=y/sin(). If then the following set of lines starts off with a different angle (β), the width of the new stripe will not be y, but defined as y’=x*sin(β), clearly different from the defined and desired initial stripe width.

There are however, two situation where y=y’, or when the stripes retain their width after a turn:

  • =β, the angles are equal, so the stripe is mirrored onto the other plane;
  • +β=90°, the angles are complementary (depending on where the angle is measured, cos(β) needs to be considered to evaluate the stripe width);


After having understood these assumptions, the concept had to be rationalised in order to have more control on the direction of each segment, thus controlling the incidence angle and the starting angle of each of them.

However, after the first review meeting where changes had to be made to the stripes,we realised that a Grasshopper script would produce a similar result with the unbeatable strength of being able to constantly update the pattern and have the result produced in a considerably small amount of time

The manual process to adapt each ARCHICAD element in order for it to follow this geometrical/mathematical logic resulted in a long working time. Once completed, the result was clean and effective. However, after the first review meeting where changes had to be made to the stripes, we realised that a Grasshopper script would produce a similar result with the unbeatable strength of being able to constantly update the pattern and have the result produced in a considerably small amount of time. The ARCHICAD model was imported in Rhino and simplified in order to obtain the internal surfaces of the houses, thus the base planes where the stripes were supposed to run.

The assumptions that had to be taken into account to start planning the script were:
A. In relation to the starting segment:

  1. It is 90° with the edge of the first surface: It can be arrayed with the desired width.
  2. It is not 90° with the edge of the first surface:
  • It can be arrayed with the desired width, IF the second segment makes a symmetric angle with the incident of the first one.
  • It has another thickness IF the second segment needs to be 90° with its respective surface. This starting width is calculated as y=x*sin()

B. Stripes behaviour must be either:

  1. Parallel in-between them and with the intended width (90 cm in total).
  2. Parallel in-between them with a different width than 90cm (known and controlled).
  3. Not parallel (converging) when stripes groups reach their respective ends with a final width that is not equal.


With these points understood, different approaches were adopted to compile the algorithm. Due to the not fully compatibility with looping components currently available for the Grasshopper version for Mac OSX, other more manual but equally effective methods were tried.

After a meeting with the lead architect and the main contractor, they decided to manufacture these stripes with laser cut stickers, as opposed to have painters applying masking tape and paint the elements. This requirement was taken by the parametric team as a need for high degree of precision in the generation of the geometries.
With the objective in mind to be then able to generate ARCHICAD components out of this script, a guide polyline was drawn passing through the desired surfaces, taking care to have full control of the incident angles between them and the relative surfaces’ edges.

Once the script was optimised and made flexible enough to be able to use it in the future for other projects.

Once the script was optimised and made flexible enough to be able to use it in the future for other projects. Stripes made of Rhino surfaces were generated from Grasshopper they were sent into ARCHICAD using the new Morph Curve component, only taking the outline of such surfaces.
Useful enough, a Morph-Line element that is located in the same plane of the surface of an ARCHICAD wall, if visualised in 2D (as interior elevation, for instance), it is perfectly visible and suitable to be dimensioned. 3D Morph-Lines, on the other hand, are not the best tool to visualise the result, so other Morph-Solid elements were created between Grasshopper and ARCHICAD to be able to navigate through the 3D environment and have a clear visual-spatial-aesthetic idea of the resulting design.

Once more the strength of both tools (AC and GH) was tested and proved efficient. What’s even more important though is a matter that goes beyond the positive outcome of this very exercise: We have proved how adaptable these Softwares are.
We have always used grasshopper to generate complex skyscrapers, multi-floor elements at a big scale, masterplan volumetric studies, whereas this time an apparently easy exercise for interior design was brilliantly solved thanks to parametric design.

We hope you have found this article on geometrical issues as interesting and thrilling as we have had.
See you soon with new challenges and design solutions!