## ShapeOp Python bindings

Recently, the Computer Graphics and Geometry Laboratory of EPFL released the ShapeOp library, which is “a header-only C++ library for static and dynamic geometry processing, using a unified framework for optimization under constraints“.

The process of creating Python bindings for the library is described in the official documentation. However, if you are on Mac and using a non-framework version of Python, such as one provided by macports, anaconda, homebrew …, you may need a few more instructions. I will describe the process for the macports version of Python.

First of all, make sure you have the following ports installed:

• cmake
• swig
• python-swig
• boost
• eigen
• eigen3

This will take some time, so go do something else while it is happening. Then proceed as instructed in the SahpeOp documentation:

$mkdir build$ cd build
$cmake .. -DSWIG_PYTHON=TRUE$ make


Finally modify the link path of _shapeopPython.so using install_name_tool. You need to have the CommandLine Tools of XCode installed to do this, but if you got this far, i assume this is already taken care of.

First, check the current link path:

$cd ./libShapeOp/bindings/python$ otool -L _shapeopPython.so
/System/Library/Frameworks/Python.framework/Versions/2.7/Python
/usr/lib/libc++.1.dylib
/usr/lib/libSystem.B.dylib


The first link should be changed. Therefore, do the following:

\$ install_name_tool -change /System/Library/Frameworks/Python.framework/Versions/2.7/Python /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/libpython2.7.dylib _shapeopPython.so


After this, executing the runme.py file should return this output:

Input points:
0.0 0.5 0.5 0.0
0.0 0.0 1.0 1.0
0.0 1.0 0.0 1.0
Output points:
0.0 0.0 0.0 0.0
0.0 0.0 1.0 1.0
0.0 1.0 0.0 1.0