A collaborative design tool for integrally-attached timber plate structures.
Manis is a grasshopper plugin developed at the laboratory for timber constructions (IBOIS, EPFL) for creating joints between timber panels . The tool allows:
- generating joints geometry according to topological constraints and assembly sequence
- generating CNC cutting toolpath to automate the fabrication of the plates
- generating robotic trajectories to automate the assembly of the plates
- generating finite element models suitable for structural analysis
As images are often more powerfull than words, have a look at our short trailer if you didn't see it yet!
For research applications, please refer to the following publication. It includes a detailed description of the algorithms behind the code:
Nicolas Rogeau, Pierre Latteur, Yves Weinand, An integrated design tool for timber plate structures to generate joints geometry, fabrication toolpath, and robot trajectories, Automation in Construction, Volume 130, October 2021 https://doi.org/10.1016/j.autcon.2021.103875
- Download the file
Manis.x.ghpy
and place it inside Grasshopper Components folderC:\Users\yourname\AppData\Roaming\Grasshopper\Libraries
orGrasshopper -> File -> Special folders -> Components folder
. - Download the files inside the folder
Gh user objects
and place them inside the Grasshopper User Object folderC:\Users\yourname\AppData\Roaming\Grasshopper\UserObjects
orGrasshopper -> File -> Special folders -> User Object folder
. - Verify that all files are unblocked:
Right-click on the file -> Properties -> General -> Unblock
. - Restart Rhino and open Grasshopper. There should be a new tab in Grasshopper named Manis.
Robots: To simulate robot trajectories generated by Manis, we rely on the plugin "Robots". The latest release of robots is available here. Once the plugin is installed, download the folder "Robots" from Manis repository and place it in your "Documents" folder: C:\Users\yourname\Documents\Robots
. It contains the xml file and 3D model of our robot at IBOIS, EPFL. It is the one we use in the example file but you can of course use your own robot instead.
Compas and Abaqus: To run the structural analysis, we rely on Compas, an open-source framework developed by our colleagues at the NCCR Digital Fabrication to foster collaboration between AEC stakeholders. If you want to use this part of Manis, you will first need to install Compas and the module Compas_fea. You will also need to have a valid license of Abaqus in order to perform the analysis. Once both are installed, go to C:\Users\yourname\AppData\Roaming\McNeel\Rhinoceros\7.0\scripts\compas_fea\cad\
and open rhino.py
. We need to bring a small change to this file for our Grasshopper component to work. At line 236, replace mesh = RhinoMesh.from_guid(guid).to_compas()
with those two lines: mesh = rs.coercerhinoobject(guid)
and mesh = RhinoMesh.from_object(mesh).to_compas()
The plugin has 9 different tabs:
- Adjacency: where you can get useful data about how the plates of the model are connected.
- Assembly: where you can create your own insertion constraints and access plate modules properties.
- FEM: where you can create a simplified model and run a structural analysis using Compas_fea and Abaqus.
- Joints: where you can create different kind of joints between adjacent plates.
- Properties: where you can access the geometric properties of each plate (contour, face, thickness...).
- Robotics: where you can generate robotic trajectories and simulate the robotic assembly of the plates using Robots plugin.
- Solver: where you can find the component to build the model and other computationally intensive solvers.
- Transform: where you can rearrange the plates in the 3D space (for example for fabrication or assembly purposes).
- Utility: where you can find other components that couldn't find a place in the other tabs...
The file manis_demo.gh
contains some examples showing different applications of the joinery solver.
A video tutorial is also available on IBOIS vimeo channel. The first part focuses on the 3D modeling of the joints and the concept of modular assemblies while the second part covers the generation of CNC toolpath and robot trajectories.
For a general overview of Manis workflow, you can refer to this video in which the solver is applied to a boxed vault of 36 plates.
We also recorded a detailed explanation of the code that is behind the grasshopper component we use to perform the structural analysis of this doubly-curved timber vault. You can test it yourself by downloading the file manis_annen.gh
The source code consists of one single python file: platesjoinery.py
.
It is not necessary to recompile the Grasshopper plugin when debugging or developing new functions.
Instead, you can test your modifications directly inside a custom Grasshopper python component.
You need to execute the following steps to be able to call the functions from the python file inside the Grasshopper environment:
- Download the file
platesjoinery.py
. - Place the file inside Rhinoceros IronPython folder
C:\Users\yourname\AppData\Roaming\McNeel\Rhinoceros\7.0\Plug-ins\IronPython\settings\lib
. - Verify that the path is correctly specified in Rhino:
Type _EditPythonScript -> Tools -> Options -> Files -> Add to search path (if necessary)
. - Restart Rhino and open Grasshopper. You should now be able to import the module
platesjoinery
inside a Grasshopper python component and access its classes and functions.
The source code is split in 4 classes:
- PlateModel: The main class of the solver. A plate model instance is created for each new timber plate structures. Adjacencies and insertion vectors are computed during the instanciation of the plate model. This class also containts methods to create timber joints and generate fabrication toolpath.
- PlateModule: A sub-class of the plate model to deal with modular assemblies. For each group of plates specified by the user, a new module is created.
- Plate: A sub-class of the plate model containing the information about a single element of the structure. An instance of the plate class contains geometric information such as the plate thickness or the plate contours.
- Toolbox: A list of methods extending the Rhino framework.
Once the modifications brought to the source code have been validated, a new version of the plugin can be generated.
- Download the folder
Grasshopper compilation files
. - Open the file
build.py
in an editor and replace the 4 classes with their new version from the updated source code. - If necessary, update the parameters and/or the definition of the plugin components (each file corresponds to a single component of the plugin).
- In Rhino, run the command
_EditPythonScript
and run the filemain.py
. It will create a fileManis.x.ghpy
in the folderGrasshopper compilation files
. - Move the newly created file to the Grasshopper Components folder
C:\Users\yourname\AppData\Roaming\Grasshopper\Libraries
orGrasshopper -> File -> Special folders -> Components folder
. - Restart Rhino and open Grasshopper. The plugin should be updated.
For further information about how to create a custom grasshopper component with python, you can refer to this tutorial.