One of the most common examples of a practical application of computational design and digital fabrication is to generate personalized panels for walls. While it is not difficult to conceive a generator for non-rectangular walls, most configurators for end-users are limited to simple rectangular boundaries. RoomSurveyor provides a simple method to overcome this limitation and allow non-expert users to conduct accurate as-is surveys of walls. A Grasshopper definition to control this process is very similar to the one for surveying plans, yet there is one important difference to consider: the vertical orientation.

We need to come up with a simple method to either automatically assume a reasonable vertical orientation or to allow the user to provide one. In this post I will present a simple automatic approach that assumes the user will naturally draw the morphology of the wall close to the correct orientation, e.g., using this app.

The first step is to import the JSON and process it to get the polygon and the side lengths. The polygon is reoriented to a vertical plane, here I use the XZ plane. We also need to read the user provided diagonals.

JSON Import

All the above outputs flow to the triangulation stage. Here we proceed as usual taking care to provide the desired vertical plane.


It is likely that the user will draw the polygon lowest side closer to the bottom of the screen, but the user cannot ensure that this side is effectively parallel to X axis. I also assume the polygon is unlikely to be a star polygon, or at least its’ lowest corner has at least one neighbour which is also a convex corner. Since the lowest corner of a polygon is always convex, we just need to search for it by sorting the corners along the y direction of the plane. Them we look at both of its neighbours and check which one is lower and also a convex corner. We also output the indexes of both points.

Lowest Convex Corners

Then, we just take the vector of that side and determine its angle with the X-axis of the plane. Since the lowest corner may be after the second lowest corner in counter-clockwise direction and grasshopper will always tells us the smallest angle between those vectors, we need to check if the vector is negative. The algorithm bellow only works because we have limited ourselves to the XZ plane.

Align to lowest side

For the rest of the pieces of the Survey stage check this post. After the survey stage is completed we can build our configurator. I’ve prepared a few configurators using ShapeDiver, RoomSurveyor and JSON. The first is a very simple batten wall, the second is a random wave batten wall and the last generates modular wall panels made with cork and wood with the ice-ray lattice pattern. To generate solutions to specific walls you need to survey that space with this app. The source code for the app is available on GitHub.

Leave a Reply

Your email address will not be published. Required fields are marked *

fifteen + seven =