Raw File
# Shrink & Morph: 3D-printed self-shaping shells actuated by a shape memory effect
David Jourdan, Pierre-Alexandre Hugron, Camille Schreck, Jonàs Martínez, and Sylvain Lefebvre
![Teaser image](data/teaser.png)

This repository contains the implementation associated with the paper "Shrink & Morph: 3D-printed self-shaping shells actuated by a shape memory effect"

## Installation instructions

Installation can be done using standard CMake routines. On a typical Linux/macOS machine, the following should work:
git clone https://github.com/DavidJourdan/shrink-morph
cd shrink-morph
cmake -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build -j $(nproc)
Provided that you have the necessary graphics packages installed (if not the case, see [here](Dependencies.md)) CMake will download the required dependencies and compile the executable.

## Optional dependencies 

These libraries can downloaded for better performance:
- [OR-Tools](https://developers.google.com/optimization/install/cpp/binary_linux): the path where the downloaded archive has been extracted should be specified in the ```${ORTOOLS_PATH}``` variable in ```CMakeLists.txt```.
- [MKL Pardiso](https://www.intel.com/content/www/us/en/developer/tools/oneapi/onemkl-download.html)

## How to run
From the command line, specify which mesh file (stored in ```/data/```) should be opened. For example with ```beetle.obj```  simply run
build/shrink_morph beetle
For those who prefer to use a command-line version of a the app, use the ```shrink_morph_cli``` executable:
build/shrink_morph_cli mesh wD width nFmin
with ```mesh``` the name of the input mesh, ```wD``` the smoothing factor (0 by default), ```width``` the width of the flattened plate in mm, and ```nFmin``` the minimum number of faces in the input mesh (it gets iteratively subdivided until reaching this value). For example, to generate the same results as the ```hat``` model in the paper, type:
build/shrink_morph_cli hat 0.1 100 10000

To generate the final gcode files, use the togcode.py script. Its inputs are the .path file generated by the app, the name of your printer (only a few a supported at moment), and optionally the name of the output file, here is an example:
python togcode.py ../data/input_file.path Creality_K1_Max -o output_file.gcode

## Display layers with Matplotlib
To generate SVG files showing the trajectories similar to Figure 7 in the paper, runthe ```plot-layer.py``` script:
cd ../data/
python plot-layer.py 1
python plot-layer.py 10
back to top