libdirectional is a C++ library for creating, manipulating and drawing directional fields on 3D meshes, build on libigl1 and, in turn, Eigen. The libdirectional represents directional objects, that is sets of vectors, per face of the mesh. The content and the notations are based on the Eurographics 2016 star, and consequently SIGGRAPH Asia 2016/SIGGRAPH 2017 course on Directional Field Synthesis, Design, and Processing2. Some visualization code is borrowed from the libhedra library3.
libdirectional is a header-only library where each file generally includes one function. To use the library, simply add the include directory to your include path and make sure libigl and its prerequisites are set up properly. After that you can include any files you need normally, using for example #include <directional/trivial_connection.h>
.
To use the examples simply clone the repository using:
git clone --recursive https://github.com/avaxman/libdirectional.git
Then open a shell in the folder containing the example you wish to run, in the folder `examples' and call:
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release ../
make
This should properly set up the example including all dependencies upon which you can build it using your favourite compiler. For windows, you should use cmake-gui ..
and follow the instructions to create a compilable Visual Studio file.
##Future Plans
The following functionality is still needed for libdirectional:
Face-based polar representation, and consequent mixed-integer algorithms. Integrable PolyVector fields Support for 3D octahedral fields. Other discretizations: vertex-based, DEC. Discrete vector calculus: operators and Hodge decomposition. Poisson equations and parameterization.
If you would like to suggest further topics, would like to collaborate in implementation, complain about bugs or ask questions, please address [Amir Vaxman] (avaxman@gmail.com) (or open an issue in the repository)
##Acknowledge libdirectional
If you use libhedra in your academic projects, please cite the implemented papers directly, and/or the EG STAR 2016 when appropriate. To cite the library in general, you could use this BibTeX entry:
@misc{libdirectional,
title = {{libdirectional}: directional field synthesis, design, and processing,
author = {Amir Vaxman and others},
note = {https://github.com/avaxman/libdirectional},
year = {2017},
}
2017 Amir Vaxman, Sam de Redelijkheid, Daniele Panozzo, Olga Diamanti, Olga Sorkine-Hornung, and others.
1: A. Jacobson and D. Panozzo and others, libigl: A simple C++ geometry processing library, 2016.
2: A. Vaxman et al., Directional Field Synthesis, Design, and Processing, 2016.
3: A. Vaxman et al., libhedra, 2016.
4: K. Crane and M. Desbrun and P. Schröder, Trivial Connections on Discrete Surfaces, 2010.
5: O. Diamanti et al., Designing N-PolyVector Fields with Complex Polynomials, 2014.
6: F. Knöppel et al., Globally optimal direction fields, 2013.