libigl - A simple c++ geometry processing library ================================================= Copyright 2013 - Alec Jacobson, Daniele Panozzo, Olga Diamanti, Kenshi Takayama, Leo Sacht, Wenzel Jacob This is first and foremost a *header* library. Each header file should contain a single function. The function may have multiple prototypes. All functions should use the igl namespace and should adhere to the conventions and styles listed below. > **New:** As of 1 July 2014, we have release our libigl beta version 1.0. There are a > number of changes we collected for this release to minimize confusion and > changes to how you use libigl. See [Version 1.0 Changes][version1.0changes]. ## Dependencies ## - Eigen3 Last tested with Eigen Version 3.2 ### Optional ### - OpenGL < 3.2 (`IGL_NO_OPENGL`) - OpenGL >= 4 (`IGL_OPENGL_4`) - AntTweakBar (`IGL_NO_ANTTWEAKBAR`) Last tested 1.16 (see - libigl/external/AntTweakBar) - GLEW Windows and Linux - OpenMP - libpng libiglpng extra only - Mosek libiglmosek extra only - Matlab libiglmatlab extra only - boost libiglboost, libiglcgal extra only - SSE/AVX libiglsvd3x3 extra only - CGAL libiglcgal extra only * boost * gmp * mpfr - CoMiSo libcomiso extra only ### Optional (included in external/) ### - TetGen libigltetgen extra only - Embree libiglembree extra only - tinyxml2 libiglxml extra only - glfw libviewer extra only - LIM liblim extra only ## Header only ## libigl is designed to work "out-of-the-box" as a headers only library. To include libigl in your project. You need only include the libigl/include/ directory in your include path. To compile a hello-word example.cpp: #include #include #include int main(int argc, char * argv[]) { if(argc>1) { Eigen::MatrixXd V; Eigen::MatrixXi F; igl::readOBJ(argv[1],V,F); std::cout<<"Hello, mesh with "< Project ... - Visual C++ > Win32 - Win32 Console Application - Name: libiglVisualStudio - Uncheck "Create directory for solution" - Then hit OK, and then Next - Check "Static Library" - Uncheck "Precompiled headers" - Add all include/igl/*.cpp to the sources directory - Add all include/igl/*.h to the headers directory - Open Project > libigl Properties... - Add the path to eigen3 to the include paths - Change the target name to libigl - Build and pray (this should create libigl.lib [Source](http://msdn.microsoft.com/en-us/library/ms235627(v=vs.80).aspx) ## Examples ## To get started, we advise that you take a look at a few examples: ./examples/hello-world/ ./examples/meshio/ ./examples/basic-topology/ ./examples/ReAntTweakBar/ ## Extras ## Libigl compartmentalizes dependences via its organization into a _main_ libigl library and "extras." ### bbw ### This library extra contains functions for computing Bounded Biharmonic Weights, can be used with and without the [mosek](#mosek) extra via the `IGL_NO_MOSEK` macro. ### boost ### This library extra utilizes the graph functions in the boost library for find connected components and performing breadth-first traversals. ### cgal ### This library extra utilizes CGAL's efficient and exact intersection and proximity queries. ### embree ### This library extra utilizes embree's efficient ray tracing queries. ### matlab ### This library extra provides support for reading and writing `.mat` workspace files, interfacing with Matlab at run time and compiling mex functions. ### mosek ### This library extra utilizes mosek's efficient interior-point solver for quadratic programs. ### png ### This library extra uses `libpng` and `YImage` to read and write `.png` files. ### svd3x3 ### This library extra implements "as-rigid-as-possible" (ARAP) deformation techniques using the fast singular value decomposition routines written specifically for 3x3 matrices to use `SSE` intrinsics. This extra can still be compiled without sse support and support should be determined automatically at compile time via the `__SSE__` macro. ### tetgen ### This library extra provides a simplified wrapper to the tetgen 3d tetrahedral meshing library. ### viewer ### This library extra utilizes glfw and glew to open an opengl context and launch a simple mesh viewer. ### xml ### This library extra utilizes tinyxml2 to read and write serialized classes containing Eigen matrices and other standard simple data-structures. ## Development ## Further documentation for developers is listed in tutorial.html, style_guidelines.html ## License ## See `LICENSE.txt` ## Zipping ## Zip this directory without .git litter and binaries using: git archive -prefix=libigl/ -o libigl.zip master ## Version 1.0 Changes ## Our beta release marks our confidence that this library can be used outside of casual experimenting. To maintain order, we have made a few changes which current users should read and adapt their code accordingly. ### Renamed functions ### The following table lists functions which have changed name as of version 1.0.0: Old | --> | New ----|-|---- `igl::add_barycenter`| |`igl::false_barycentric_subdivision` `igl::areamatrix`| |`igl::vector_area_matrix` `igl::barycentric2global`| |`igl::barycentric_to_global` `igl::boundary_faces`| |`igl::boundary_facets` `igl::boundary_vertices_sorted`| |`igl::boundary_loop` `igl::cotangent`| |`igl::cotmatrix_entries` `igl::edgetopology`| |`igl::edge_topology` `igl::gradMat`| |`igl::grad` `igl::is_manifold`| |`igl::is_edge_manifold` `igl::mexStream`| |`igl::MexStream` `igl::moveFV`| |`igl::average_onto_vertices` `igl::moveVF`| |`igl::average_onto_faces` `igl::plot_vector`| |`igl::print_vector` `igl::pos`| |`igl::HalfEdgeIterator` `igl::plane_project`| |`igl::project_isometrically_to_plane` `igl::project_points_mesh`| |`igl::line_mesh_intersection` `igl::read`| |`igl::read_triangle_mesh` `igl::removeDuplicates.cpp`| |`igl::remove_duplicates` `igl::removeUnreferenced`| |`igl::remove_unreferenced` `igl::tt`| |`igl::triangle_triangle_adjacency` `igl::vf`| |`igl::vertex_triangle_adjacency` `igl::write`| |`igl::write_triangle_mesh` `igl::manifold_patches`| |`igl::orientable_patches` `igl::selfintersect`| |`igl::remesh_self_intersections` `igl::project_mesh`| |`igl::line_mesh_intersection` `igl::triangulate`| |`igl::polygon_mesh_to_triangle_mesh` `igl::is_manifold`| |`igl::is_edge_manifold` `igl::triangle_wrapper`| |`igl::triangulate` ### Miscellaneous ### - To match interfaces provided by (all) other quadratic optimization libraries, `igl::min_quad_with_fixed` and `igl::active_set` now expect as input twice the quadratic coefficients matrix, i.e. the Hessian. For example, `igl::min_quad_with_fixed(H,B,...)` minimizes $\frac{1}{2}x^T H x+x^T B$. - We have inverted the `IGL_HEADER_ONLY` macro to `IGL_STATIC_LIBRARY`. To compile using libigl as a header-only library, simply include headers and libigl in the header search path. To link to libigl, you must define the `IGL_STATIC_LIBRARY` macro at compile time and link to the `libigl*.a` libraries. - Building libigl as a static library is now more organized. There is a `build/` directory with Makefiles for the main library (`Makefile`) and each dependency (e.g. `Makefile_mosek` for `libiglmosek.a`) - `igl::polar_svd` now always returns a rotation in `R`, never a reflection. This mirrors the behavior of `igl::polar_svd3x3`. Consequently the `T` part may have negative skews. - We have organized the static - The previous `igl::grad` function, which computed the per-triangle gradient of a per-vertex scalar function has been replaced. Now `igl::grad` computes the linear operator (previous computed using `igl::gradMat`). The gradient values can still be recovered by multiplying the operator against the scalar field as a vector and reshaping to have gradients per row. - `MASSMATRIX_*` has become `MASSMATRIX_TYPE_*` - The function `igl::project_normals`, which cast a line for each vertex of mesh _A_ in the normal direction and found the closest intersection along these lines with mesh _B_, has been removed. ## Contact ## libigl is a group endeavor led by Alec Jacobson and Daniele Panozzo. Please contact [alecjacobson@gmail.com](mailto:alecjacobson@gmail.com) if you have questions or comments. We are happy to get feedback! Enjoy! If you find bugs or have problems please use our [github issue tracking page](https://github.com/libigl/libigl/issues).