This is the code for the matchmaking and environmental impact optimization done within the Fertigteil 2.0 (Precast Concrete Components 2.0) research project.
The accompanying paper, Matter as Met: Towards a Computational Workflow for Architectural Design with Reused Concrete Components was published and presented on the Design Modelling Symposium: Towards Radical Regeneration in Berlin, 2022.
For a demo please look at the example file provided in the gh_dev folder.
Make sure you follow the complete installation procedure first, also you need
a working Gurobi license
activated and ready to be used with the gurobipy package.
General
Installation & Updates
Credits, Licensing & References
This codebase is based on malt. Malt is/was a collection of Hops components for Rhino Grasshopper.
Back when RhinoPython was running on IronPython 2.7 this was a good way to quickly prototype Python 3 code with Rhino, today this is not really the way to go!
- The Hops components run using a local ghhops-server.
- The components are written in Python 3.8 and defined in
componentserver.py. - Rhino functionality is provided using Rhino.Inside.Cpython.
This has been tested and is running under Windows 10 using:
- Rhino 7.34.23267.11001
- Grasshopper 1.0.0007
- Hops 0.16.2
- rhinoinside 0.6.0
- ghhops-server 1.5.5
- rhino3dm 8.17.0
The provided environment file ft20-opt.yml unifies the tools that are needed
to run the provided customized componentserver.py file.
If you want to use the provided Hops Components by running the componentserver locally on your machine, you need the following:
- Windows (unfortunately Hops and Rhino.Inside.Cpython won't work under OSX for now)
- Anaconda / Miniconda
- Hops (Install using Rhino package manager by using the
_PackageManagercommand)
While different Rhino and/or Hops versions might work, there is no guarantee at the moment as malt is in a very early stage.
First off, clone or download this repository and unzip it (if needed) into a
working directory of your choice. For the purpose of this guide, I will use
C:\source\repos as my directory for all repositories. If you have no idea
how to work with git or have never worked with a git repository before, please
have a look here first!
If you want to clone using the Command line, cd into your repo directory, i.e.:
cd "C:\source\repos"
You can then clone the repository into your current working directory:
git clone https://github.com/digitaldesignunit/fertigteil-2.0-optimization.git
You should now end up with a new folder fertigteil-2.0-optimization inside
your working directory, containing all the files of the repository, so that the
full path is C:\source\repos\fertigteil-2.0-optimization
NOTE: If you have not installed Anaconda / Miniconda yet, NOW is the time to do it. If you have no idea how to get started with Anaconda, please have a look here
Using a Windows Powershell, cd into the directory where you have
cloned/unpacked the fertigteil-2.0-optimization repository.
For me that's running:
cd "C:\source\repos\fertigteil-2.0-optimization"
Set up a new conda virtual environment with the name ft20-opt using
the provided environment file by running:
conda env create -f "ft20-opt.yml"
NOTE: This step can take quite some time and will take up a good amount of space on your disk. You can expect at least ~5GB!
Now we activate our newly created conda environment:
conda activate ft20-opt
With the virtual environment activated and while in the root directory of the
fertigteil-2.0-optimization repository (where setup.py is located!), run the
following command:
pip install -e .
NOTE: This will install the malt package and its submodules in development
mode (recommended!), in case you want to extend and/or modify it. If you
simply want to use the provided functions and components, you can also simply
call pip install .
Make sure your current working directory is the directory where componentserver.py
is located. Otherwise browse to this directory using cd (as we did in step 3).
Make sure the ft20-opt conda environment is active, otherwise run:
conda activate ft20-opt
Now you can start the Hops Server by running:
python componentserver.py
Note that you can also run the componentserver using different command line options:
python componentserver.py -dwill run the server in debug mode.python componentserver.py -fwill run the server without using Flask.python componentserver.py -nwill run the server in network access mode. WARNING: THIS IS POTENTIALLY VERY DANGEROUS!
Once the server is running, you can query it at different endpoints. When you start the server, all available endpoints are printed to the console:
For a demo you can open the latest example file available in the gh_dev
folder. But you can of course also start from scratch:
Open Rhino and Grasshopper and start by placing a Hops Component on the canvas:
Doubleclick the Hops Component and set it to one of the available endpoints.
Note that the Hops Server is running under http://localhost:5000/.
The component that is available at this endpoint will then be loaded:
I recommend to run the available Hops Components asynchronously because this will add a lot of responsiveness to your Grasshopper definition. I did not test the caching functionality extensively, so feel free to experiment with that. For more info on the available settings, please see here.
You can now use the loaded Hops Component like any other Grasshopper component.
In this example, I first computed geodesic distances on a mesh from a source
vertex using the Heat Method available at the /intri.HeatMethodDistance
endpoint. Then I use the resulting values at each vertex to draw isocurves
on the mesh using the /igl.MeshIsoCurves endpoint.
To update your local repository, open a Powershell or Terminal and cd into
your directory of the repository, for me that's
cd "C:\source\repos\fertigteil-2.0-optimization"
Then you can update the repository using git:
git pull
If you have installed malt in development mode (see section 3) you`re already
done! If not, you have to install the updated module again. First activate
the conda virtual environment...
conda activate ddu_ias_research
...and then update the malt package by running
pip install .
...or update with installing in development mode this time by running
pip install -e .
If you need to update your conda environment after the release of a new version
of the supplied ft20-opt.yml file, here is how you can do this:
First, cd into your fertigteil-2.0-optimization repository directory as always, for me that's
cd "C:\source\repos\fertigteil-2.0-optimization"
then update your conda environment by running
conda env update --name ft20-opt --file ft20-opt.yml --prune
et voila - your conda environment should now be updated with the newly specified dependencies.
Please use the following publication for citations
@inproceedings{eschenbach_matter_2023,
address = {Cham},
title = {Matter as {Met}: {Towards} a {Computational} {Workflow} for {Architectural} {Design} with {Reused} {Concrete} {Components}},
copyright = {All rights reserved},
isbn = {978-3-031-13249-0},
doi = {https://doi.org/10.1007/978-3-031-13249-0_35},
abstract = {Over the past decades computational design, digital fabrication and optimisation have become widely adapted in architectural research, contemporary practice as well as in the construction industry. Nevertheless, current design and fabrication process-chains are still stuck in a linear notion of material use: building components are digitally designed, engineered, and ultimately materialised by consumption of raw materials. These can be defined as digital-real process chains. But these parametric design logics based on mass customisation inhibit the reuse of building components. In contrast to these predominant and established digital-real process chains, we propose a real-digital process chain: departing from our real, already materialised built environment. We digitise and catalogue physical concrete components within a component repository for future reuse. Subsequently, these components are reconditioned, enhanced if necessary and transitioned into a modular building system. The modularised components are then recombined to form a new building design and, eventually, a new building by combinatorial optimisation using mixed-integer linear programming (MILP). An accompanying life cycle assessment (LCA) complements the process and quantifies the environmental potential of reused building components. The paper presents research towards a feasible workflow for the reuse of structural concrete components. Furthermore, we suggest a digital repository, storing geometric as well as complementary data on the origin, history, and performances of the components to be reused. Here, we identify core data to be integrated in such a component repository.},
booktitle = {Towards {Radical} {Regeneration}},
publisher = {Springer International Publishing},
author = {Eschenbach, Max Benjamin and Wagner, Anne-Kristin and Ledderose, Lukas and Böhret, Tobias and Wohlfeld, Denis and Gille-Sepehri, Marc and Kuhn, Christoph and Kloft, Harald and Tessmann, Oliver},
editor = {Gengnagel, Christoph and Baverel, Olivier and Betti, Giovanni and Popescu, Mariana and Thomsen, Mette Ramsgaard and Wurm, Jan},
year = {2023},
pages = {442--455},
}
This research was conducted within the Project Fertigteil 2.0 - Real-digital process chains for the production of built-in concrete components. The project Fertigteil 2.0 (Precast Concrete Components 2.0) was funded by the Federal Ministry of Education and Research Germany (BMBF) through the funding measure Resource-efficient circular economy - Building and mineral cycles (ReMin).
- Original code is licensed under the MIT License.








