reorganized folder and added a README
This commit is contained in:
@@ -0,0 +1,159 @@
|
||||
# Python wrappers for libigl
|
||||
|
||||
|
||||
## Work in progress
|
||||
<span style="color:#F62217">
|
||||
Everything in this folder is currently being developed and it is likely to be
|
||||
changed radically in the next couple of months, breaking compatibility between
|
||||
different version. We plan to stabilize the python API by the end of 2015.
|
||||
</span>
|
||||
|
||||
## Introduction
|
||||
|
||||
libigl functions can be called natively from python by compiling the wrappers
|
||||
in this folder. The wrappers supports both python 2.7 and python 3.5 and are
|
||||
generated using [pybind11](https://github.com/wjakob/pybind11).
|
||||
|
||||
The generated library will statically link against all dependencies producing a single,
|
||||
self-contained binary.
|
||||
|
||||
## Installation
|
||||
|
||||
The python bindings can be compiled with the following instructions, assuming
|
||||
that your terminal is pointing to the root of libigl:
|
||||
|
||||
```bash
|
||||
cd python
|
||||
mkdir build
|
||||
cd build; make; cd ..
|
||||
```
|
||||
|
||||
The cmake script will complain if it is not able to find python. In that case
|
||||
you can specify the location of the interpreter by specifying the following
|
||||
cmake variables.
|
||||
|
||||
MacOSX/Linux:
|
||||
|
||||
```cmake
|
||||
SET(PYTHON_LIBRARIES "/usr/local/Cellar/python3/3.5.0/Frameworks/Python.framework/Versions/3.5/lib/libpython3.5m.dylib")
|
||||
SET(PYTHON_INCLUDE_DIR "/usr/local/Cellar/python3/3.5.0/Frameworks/Python.framework/Versions/3.5/include/python3.5m")
|
||||
```
|
||||
|
||||
Windows:
|
||||
|
||||
```cmake
|
||||
SET(PYTHON_LIBRARIES "C:/Python35/libs/python35.lib")
|
||||
SET(PYTHON_INCLUDE_DIR "C:/Python35/include")
|
||||
```
|
||||
|
||||
## Tutorial
|
||||
|
||||
All libigl tutorials will be ported to python and will use the same naming
|
||||
scheme. You can find the tutorials in the folder python/tutorials and you can
|
||||
launch them with the following commands:
|
||||
|
||||
```bash
|
||||
cd python
|
||||
python 102_DrawMesh.py
|
||||
```
|
||||
|
||||
## Matrix Representation
|
||||
|
||||
TODO: describe in detail the wrapped eigen classes and how to convert them to
|
||||
numpy.
|
||||
|
||||
## Viewer and callbacks
|
||||
|
||||
The igl viewer provides a convenient and efficient way of visualizing 3D
|
||||
surfaces in python. It behaves in the same way as the C++ viewer and supports
|
||||
native python functions as callbacks. This is a simple example that loads
|
||||
two meshes and switches between the two when a key is pressed:
|
||||
|
||||
```python
|
||||
import igl
|
||||
|
||||
V1 = igl.eigen.MatrixXd()
|
||||
F1 = igl.eigen.MatrixXi()
|
||||
|
||||
V2 = igl.eigen.MatrixXd()
|
||||
F2 = igl.eigen.MatrixXi()
|
||||
|
||||
def key_pressed(viewer, key, modifier):
|
||||
print("Key: ", chr(key))
|
||||
|
||||
if key == ord('1'):
|
||||
# # Clear should be called before drawing the mesh
|
||||
viewer.data.clear();
|
||||
# # Draw_mesh creates or updates the vertices and faces of the displayed mesh.
|
||||
# # If a mesh is already displayed, draw_mesh returns an error if the given V and
|
||||
# # F have size different than the current ones
|
||||
viewer.data.set_mesh(V1, F1);
|
||||
viewer.core.align_camera_center(V1,F1);
|
||||
elif key == ord('2'):
|
||||
viewer.data.clear();
|
||||
viewer.data.set_mesh(V2, F2);
|
||||
viewer.core.align_camera_center(V2,F2);
|
||||
return False
|
||||
|
||||
|
||||
# Load two meshes
|
||||
igl.readOFF("../tutorial/shared/bumpy.off", V1, F1);
|
||||
igl.readOFF("../tutorial/shared/fertility.off", V2, F2);
|
||||
|
||||
print("1 Switch to bump mesh")
|
||||
print("2 Switch to fertility mesh")
|
||||
|
||||
viewer = igl.viewer.Viewer()
|
||||
|
||||
# Register a keyboard callback that allows to switch between
|
||||
# the two loaded meshes
|
||||
viewer.callback_key_pressed = key_pressed
|
||||
viewer.data.set_mesh(V1, F1)
|
||||
viewer.launch()
|
||||
```
|
||||
|
||||
### Remote viewer
|
||||
|
||||
Whe using the viewer from an interactive python shell (iPython), it is
|
||||
inconvenient to let the viewer take control of the main thread for rendering
|
||||
purposes. We provide a simple wrapper for the viewer that allows to launch
|
||||
a remote process and send meshes to it via a TCP/IP socket. For more
|
||||
informations on how to use it see the documentation in [tcpviewer.py](tcpviewer.py)
|
||||
|
||||
## Matlab
|
||||
|
||||
The python wrappers can be natively being used from MATLAB.
|
||||
We provide a few examples in the folder python/matlab.
|
||||
|
||||
## Documentation
|
||||
|
||||
The python functions have exactly the same prototypes as their C++ counterpart.
|
||||
To get help for a certain function, please check the documentation in the
|
||||
corresponding .h file in libigl/include. We will add a proper docstring
|
||||
documentation in the future.
|
||||
|
||||
## Known Issues
|
||||
|
||||
## Contact
|
||||
|
||||
Libigl is a group endeavor led by [Alec
|
||||
Jacobson](http://www.cs.columbia.edu/~jacobson/) and [Daniele
|
||||
Panozzo](http://www.inf.ethz.ch/personal/dpanozzo/). Please [contact
|
||||
us](mailto:alecjacobson@gmail.com,daniele.panozzo@gmail.com) if you have
|
||||
questions or comments. For troubleshooting, please post an
|
||||
[issue](https://github.com/libigl/libigl/issues) on github.
|
||||
|
||||
If you're using libigl in your projects, quickly [drop us a
|
||||
note](mailto:alecjacobson@gmail.com,daniele.panozzo@gmail.com). Tell us who you
|
||||
are and what you're using it for. This helps us apply for funding and justify
|
||||
spending time maintaining this.
|
||||
|
||||
If you find bugs or have problems please use our [github issue tracking
|
||||
page](https://github.com/libigl/libigl/issues).
|
||||
|
||||
## Copyright
|
||||
2015 Alec Jacobson, Daniele Panozzo, Christian Schüller, Olga Diamanti, Qingnan
|
||||
Zhou, Nico Pietroni, Stefan Brugger, Kenshi Takayama, Wenzel Jakob, Nikolas De
|
||||
Giorgis, Luigi Rocca, Leonardo Sacht, Olga Sorkine-Hornung, and others.
|
||||
|
||||
Please see individual files for appropriate copyright notices.
|
||||
Reference in New Issue
Block a user