Browse Source

Merge commit 'af6f17aa78d022b7c3ecd12e6dd30da3ba03bf1b [formerly 26bfb6db5bd230eae0d71610c8bb5a1c627b2380]'

# Conflicts:
#	README.md
#	include/igl/adjacency_matrix.cpp
#	include/igl/ambient_occlusion.cpp
#	include/igl/angle_bound_frame_fields.cpp
#	include/igl/colon.cpp
#	include/igl/comb_cross_field.cpp
#	include/igl/comb_line_field.cpp
#	include/igl/copyleft/boolean/mesh_boolean.cpp
#	include/igl/copyleft/boolean/mesh_boolean.h
#	include/igl/copyleft/cgal/RemeshSelfIntersectionsParam.h
#	include/igl/copyleft/cgal/SelfIntersectMesh.h
#	include/igl/copyleft/cgal/closest_facet.cpp
#	include/igl/copyleft/cgal/closest_facet.h
#	include/igl/copyleft/cgal/extract_cells.cpp
#	include/igl/copyleft/cgal/order_facets_around_edge.cpp
#	include/igl/copyleft/cgal/order_facets_around_edge.h
#	include/igl/copyleft/cgal/outer_hull.cpp
#	include/igl/copyleft/cgal/outer_hull.h
#	include/igl/copyleft/cgal/piecewise_constant_winding_number.cpp
#	include/igl/copyleft/cgal/propagate_winding_numbers.cpp
#	include/igl/copyleft/cgal/propagate_winding_numbers.h
#	include/igl/copyleft/cgal/remesh_intersections.cpp
#	include/igl/copyleft/cgal/remesh_intersections.h
#	include/igl/copyleft/marching_cubes.cpp
#	include/igl/copyleft/marching_cubes.h
#	include/igl/copyleft/quadprog.cpp
#	include/igl/copyleft/tetgen/cdt.cpp
#	include/igl/cross_field_missmatch.cpp
#	include/igl/cut_mesh.cpp
#	include/igl/cut_mesh_from_singularities.cpp
#	include/igl/embree/unproject_onto_mesh.cpp
#	include/igl/extract_manifold_patches.h
#	include/igl/find_cross_field_singularities.cpp
#	include/igl/line_field_missmatch.cpp
#	include/igl/list_to_matrix.cpp
#	include/igl/n_polyvector.cpp
#	include/igl/n_polyvector_general.cpp
#	include/igl/piecewise_constant_winding_number.cpp
#	include/igl/polyvector_field_matchings.cpp
#	include/igl/project_to_line.cpp
#	include/igl/ray_mesh_intersect.cpp
#	include/igl/ray_mesh_intersect.h
#	include/igl/sort.cpp
#	include/igl/unproject_in_mesh.cpp
#	include/igl/unproject_in_mesh.h
#	tutorial/609_Boolean/CMakeLists.txt
#	tutorial/610_CSGTree/CMakeLists.txt
#	tutorial/CMakeLists.shared
#	tutorial/CMakeLists.txt


Former-commit-id: 7fbfe317f9fad78ebf862e3e303837281115b365
Daniele Panozzo 9 years ago
parent
commit
c04e0ef1c3
62 changed files with 1231 additions and 749 deletions
  1. 3 0
      .gitmodules
  2. 339 0
      cmake/CMakeLists.txt
  3. 94 0
      cmake/FindCGAL.cmake
  4. 52 0
      cmake/FindCORK.cmake
  5. 60 0
      cmake/FindLIBCOMISOH.cmake
  6. 216 0
      cmake/FindMATLAB.cmake
  7. 30 0
      cmake/FindMOSEK.cmake
  8. 8 18
      include/igl/png/render_to_png.cpp
  9. 15 29
      include/igl/png/render_to_png_async.cpp
  10. 4 5
      include/igl/png/texture_from_file.cpp
  11. 30 22
      include/igl/png/texture_from_png.cpp
  12. 0 7
      include/igl/png/texture_from_png.h
  13. 5 8
      tutorial/101_FileIO/CMakeLists.txt
  14. 5 8
      tutorial/102_DrawMesh/CMakeLists.txt
  15. 5 8
      tutorial/103_Events/CMakeLists.txt
  16. 5 8
      tutorial/104_Colors/CMakeLists.txt
  17. 5 8
      tutorial/105_Overlays/CMakeLists.txt
  18. 5 8
      tutorial/106_ViewerMenu/CMakeLists.txt
  19. 5 8
      tutorial/201_Normals/CMakeLists.txt
  20. 5 8
      tutorial/202_GaussianCurvature/CMakeLists.txt
  21. 5 8
      tutorial/203_CurvatureDirections/CMakeLists.txt
  22. 5 8
      tutorial/204_Gradient/CMakeLists.txt
  23. 5 8
      tutorial/205_Laplacian/CMakeLists.txt
  24. 5 8
      tutorial/301_Slice/CMakeLists.txt
  25. 5 8
      tutorial/302_Sort/CMakeLists.txt
  26. 5 8
      tutorial/303_LaplaceEquation/CMakeLists.txt
  27. 5 8
      tutorial/304_LinearEqualityConstraints/CMakeLists.txt
  28. 5 8
      tutorial/305_QuadraticProgramming/CMakeLists.txt
  29. 5 8
      tutorial/306_EigenDecomposition/CMakeLists.txt
  30. 5 8
      tutorial/401_BiharmonicDeformation/CMakeLists.txt
  31. 5 8
      tutorial/402_PolyharmonicDeformation/CMakeLists.txt
  32. 6 19
      tutorial/403_BoundedBiharmonicWeights/CMakeLists.txt
  33. 5 8
      tutorial/404_DualQuaternionSkinning/CMakeLists.txt
  34. 5 8
      tutorial/405_AsRigidAsPossible/CMakeLists.txt
  35. 5 8
      tutorial/406_FastAutomaticSkinningTransformations/CMakeLists.txt
  36. 5 8
      tutorial/407_BiharmonicCoordinates/CMakeLists.txt
  37. 5 8
      tutorial/501_HarmonicParam/CMakeLists.txt
  38. 5 8
      tutorial/502_LSCMParam/CMakeLists.txt
  39. 5 8
      tutorial/503_ARAPParam/CMakeLists.txt
  40. 5 8
      tutorial/504_NRosyDesign/CMakeLists.txt
  41. 5 8
      tutorial/505_MIQ/CMakeLists.txt
  42. 5 8
      tutorial/506_FrameField/CMakeLists.txt
  43. 5 8
      tutorial/507_PolyVectorField/CMakeLists.txt
  44. 5 8
      tutorial/508_ConjugateField/CMakeLists.txt
  45. 5 8
      tutorial/509_Planarization/CMakeLists.txt
  46. 5 8
      tutorial/510_Integrable/CMakeLists.txt
  47. 5 11
      tutorial/601_Serialization/CMakeLists.txt
  48. 1 1
      tutorial/601_Serialization/main.cpp
  49. 5 17
      tutorial/602_Matlab/CMakeLists.txt
  50. 5 11
      tutorial/604_Triangle/CMakeLists.txt
  51. 5 11
      tutorial/605_Tetgen/CMakeLists.txt
  52. 5 8
      tutorial/606_AmbientOcclusion/CMakeLists.txt
  53. 5 8
      tutorial/607_Picking/CMakeLists.txt
  54. 12 11
      tutorial/608_LIM/CMakeLists.txt
  55. 5 30
      tutorial/609_Boolean/CMakeLists.txt
  56. 5 30
      tutorial/610_CSGTree/CMakeLists.txt
  57. 5 8
      tutorial/701_Statistics/CMakeLists.txt
  58. 5 8
      tutorial/702_WindingNumber/CMakeLists.txt
  59. 5 8
      tutorial/703_Decimation/CMakeLists.txt
  60. 5 8
      tutorial/704_SignedDistance/CMakeLists.txt
  61. 5 8
      tutorial/705_MarchingCubes/CMakeLists.txt
  62. 131 207
      tutorial/CMakeLists.txt

+ 3 - 0
.gitmodules

@@ -9,3 +9,6 @@ url=https://github.com/libigl/nanogui.git
 [submodule "external/pybind11"]
 	path = external/pybind11
 	url = https://github.com/wjakob/pybind11.git
+[submodule "external/cgal"]
+	path = external/cgal
+	url = https://github.com/CGAL/cgal.git

+ 339 - 0
cmake/CMakeLists.txt

@@ -0,0 +1,339 @@
+cmake_minimum_required(VERSION 2.6)
+project(libigl)
+
+### Available options ###
+option(LIBIGL_USE_STATIC_LIBRARY "Use libIGL as static library" OFF)
+option(LIBIGL_WITH_BBW         "Use BBW"            OFF)
+option(LIBIGL_WITH_BOOLEAN     "Use Cork boolean"   OFF)
+option(LIBIGL_WITH_CGAL        "Use CGAL"           OFF)
+option(LIBIGL_WITH_COMISO      "Use CoMiso"         OFF)
+option(LIBIGL_WITH_EMBREE      "Use Embree"         OFF)
+option(LIBIGL_WITH_LIM         "Use LIM"            OFF)
+option(LIBIGL_WITH_MATLAB      "Use Matlab"         OFF)
+option(LIBIGL_WITH_MOSEK       "Use MOSEK"          OFF)
+option(LIBIGL_WITH_OPENGL      "Use OpenGL"         OFF)
+option(LIBIGL_WITH_PNG         "Use PNG"            OFF)
+option(LIBIGL_WITH_TETGEN      "Use Tetgen"         OFF)
+option(LIBIGL_WITH_TRIANGLE    "Use Triangle"       OFF)
+option(LIBIGL_WITH_VIEWER      "Use Nanogui Viewer" OFF)
+option(LIBIGL_WITH_XML         "Use XML"            OFF)
+
+### Compilation configuration ###
+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
+set(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}")
+
+set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}")
+set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}")
+set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}")
+
+#if(MSVC)
+#  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP /bigobj") ### Enable parallel compilation for Visual Studio
+#endif()
+
+
+### Compiling libraries based on chosen options ###
+set(LIBIGL_INCLUDE_DIRS "")
+set(LIBIGL_LIBRARIES "")
+set(LIBIGL_EXTRA_LIBRARIES "")
+set(LIBIGL_EXTRA_SOURCES "")
+set(LIBIGL_DEFINITIONS "")
+
+if(LIBIGL_USE_STATIC_LIBRARY)
+  add_definitions(-DIGL_STATIC_LIBRARY)
+endif()
+
+#if(APPLE)
+#  set(CMAKE_CXX_LINK_FLAGS "-framework OpenGL -framework Cocoa -framework IOKit -framework CoreVideo")
+#  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse4.2")
+#endif()
+
+#if(UNIX AND NOT APPLE)
+#  set(CMAKE_CXX_LINK_EXECUTABLE "${CMAKE_CXX_LINK_EXECUTABLE} -lGL -lGLU -lrt -lX11 -lXxf86vm -lXrandr -lpthread -lXi  -lXcursor -lXinerama ")
+#  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mavx")
+#endif()
+
+### macro definition ###
+set(LIBIGL_ROOT "${PROJECT_SOURCE_DIR}/..")
+set(LIBIGL_SOURCE_DIR "${LIBIGL_ROOT}/include")
+set(LIBIGL_EXTERNAL "${LIBIGL_ROOT}/external")
+
+macro(CompileIGL_Module module)
+  file(GLOB SOURCES_${module}
+  "${LIBIGL_SOURCE_DIR}/igl/${module}/*.cpp")
+  add_library(igl${module} STATIC ${SOURCES_${module}})
+  list(APPEND LIBIGL_LIBRARIES "igl${module}")
+endmacro()
+
+
+### Eigen ###
+set(EIGEN_INCLUDE_DIR "${LIBIGL_EXTERNAL}/nanogui/ext/eigen")
+include_directories(${EIGEN_INCLUDE_DIR})
+list(APPEND LIBIGL_INCLUDE_DIRS "${EIGEN_INCLUDE_DIR}")
+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-deprecated-declarations") # remove some annoying warning for Eigen (at least with gcc)
+
+### OpenMP ###
+find_package(OpenMP)
+if(OPENMP_FOUND AND NOT WIN32)
+  set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")
+  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
+endif()
+
+### IGL Common ###
+list(APPEND LIBIGL_INCLUDE_DIRS "${LIBIGL_SOURCE_DIR}")
+if(LIBIGL_USE_STATIC_LIBRARY)
+  include_directories("${LIBIGL_SOURCE_DIR}")
+  file(GLOB SOURCES_IGL "${LIBIGL_SOURCE_DIR}/igl/*.cpp")
+  add_library(igl STATIC ${SOURCES_IGL})
+  list(APPEND LIBIGL_LIBRARIES "igl")
+endif()
+
+
+### Compile the mosek part ###
+if(LIBIGL_WITH_MOSEK)
+  find_package(MOSEK REQUIRED)
+  if(NOT MOSEK_FOUND)
+    message(SEND_ERROR "Could NOT find MOSEK")
+  endif()
+  list(APPEND LIBIGL_INCLUDE_DIRS ${MOSEK_INCLUDE_DIR})
+  list(APPEND LIBIGL_EXTRA_LIBRARIES ${MOSEK_LIBRARIES})
+
+  if(LIBIGL_USE_STATIC_LIBRARY)
+    include_directories(${MOSEK_INCLUDE_DIR})
+    CompileIGL_Module("mosek")
+  endif()
+else()
+  add_definitions(-DIGL_NO_MOSEK)
+  list(APPEND LIBIGL_DEFINITIONS "-DIGL_NO_MOSEK")
+endif()
+
+### Compile the BBW part ###
+if(LIBIGL_WITH_BBW)
+  if(LIBIGL_USE_STATIC_LIBRARY)
+    CompileIGL_Module("bbw")
+  endif()
+endif()
+
+### Compile the comiso part ###
+if(LIBIGL_WITH_COMISO)
+  find_package(LIBCOMISOH REQUIRED)
+  if(NOT LIBCOMISOH_FOUND)
+    message(SEND_ERROR "Could NOT find COMISO")
+  endif()
+  #include_directories( ${LIBCOMISO_INCLUDE_DIRS})
+  list(GET LIBCOMISO_INCLUDE_DIRS 0 COMISO_ROOT)
+
+  add_subdirectory("${COMISO_ROOT}/CoMISo/" "CoMISo")
+
+  set(COMISO_INCLUDE_DIRS
+    "${COMISO_ROOT}/CoMISo/ext/gmm-4.2/include"
+    "${COMISO_ROOT}/")
+
+  list(APPEND LIBIGL_INCLUDE_DIRS ${COMISO_INCLUDE_DIRS})
+
+  if(APPLE)
+    find_library(accelerate_library Accelerate)
+    list(APPEND LIBIGL_EXTRA_LIBRARIES "CoMISo" ${accelerate_library})
+  else()
+    list(APPEND LIBIGL_EXTRA_LIBRARIES "CoMISo")
+  endif()
+
+  if(LIBIGL_USE_STATIC_LIBRARY)
+    include_directories(${COMISO_INCLUDE_DIRS})
+    CompileIGL_Module("comiso")
+  endif()
+endif()
+
+### Compile the embree part ###
+if(LIBIGL_WITH_EMBREE)
+  set(EMBREE_DIR "${LIBIGL_EXTERNAL}/embree")
+
+  option(ENABLE_ISPC_SUPPORT OFF)
+  option(RTCORE_TASKING_SYSTEM "INTERNAL")
+  option(ENABLE_TUTORIALS OFF)
+  option(ENABLE_STATIC_LIB ON)
+
+  if(MSVC)
+    option(USE_STATIC_RUNTIME " " OFF)
+  endif()
+
+  add_subdirectory("${EMBREE_DIR}" "embree")
+  list(APPEND LIBIGL_INCLUDE_DIRS "${EMBREE_DIR}/include")
+  list(APPEND LIBIGL_EXTRA_LIBRARIES "embree")
+
+  if(LIBIGL_USE_STATIC_LIBRARY)
+    include_directories(${EMBREE_DIR}/include)
+    CompileIGL_Module("embree")
+  endif()
+endif()
+
+### Compile the lim part ###
+if(LIBIGL_WITH_LIM)
+  set(LIM_DIR "${LIBIGL_EXTERNAL}/lim")
+  add_subdirectory("${LIM_DIR}" "lim")
+  list(APPEND LIBIGL_INCLUDE_DIRS ${LIM_DIR})
+  list(APPEND LIBIGL_LIBRARIES "lim") # it depends on ligigl, so placing it here solve linking problems
+
+  if(LIBIGL_USE_STATIC_LIBRARY)
+    include_directories(${LIM_DIR})
+    CompileIGL_Module("lim")
+  endif()
+endif()
+
+### Compile the matlab part ###
+if(LIBIGL_WITH_MATLAB)
+  find_package(MATLAB REQUIRED)
+  if(NOT MATLAB_FOUND)
+    message(SEND_ERROR "Could NOT find MATLAB")
+  endif()
+  list(APPEND LIBIGL_INCLUDE_DIRS ${MATLAB_INCLUDE_DIR})
+  list(APPEND LIBIGL_EXTRA_LIBRARIES ${MATLAB_LIBRARIES})
+
+  if(LIBIGL_USE_STATIC_LIBRARY)
+    include_directories(${MATLAB_INCLUDE_DIR})
+    CompileIGL_Module("matlab")
+  endif()
+endif()
+
+
+### Compile the opengl and png parts ###
+if(LIBIGL_WITH_OPENGL)
+  if(LIBIGL_USE_STATIC_LIBRARY)
+    CompileIGL_Module("opengl")
+    CompileIGL_Module("opengl2")
+  endif()
+
+  if(LIBIGL_WITH_PNG)
+    set(STB_IMAGE_DIR "${LIBIGL_EXTERNAL}/stb_image")
+    add_subdirectory("${STB_IMAGE_DIR}" "stb_image")
+    list(APPEND LIBIGL_INCLUDE_DIRS ${STB_IMAGE_DIR})
+    list(APPEND LIBIGL_EXTRA_LIBRARIES "stb_image")
+
+    if(LIBIGL_USE_STATIC_LIBRARY)
+      include_directories(${STB_IMAGE_DIR})
+      CompileIGL_Module("png")
+    endif()
+  endif()
+endif()
+
+### Compile the tetgen part ###
+if(LIBIGL_WITH_TETGEN)
+  set(TETGEN_DIR "${LIBIGL_EXTERNAL}/tetgen")
+  add_subdirectory("${TETGEN_DIR}" "tetgen")
+  list(APPEND LIBIGL_INCLUDE_DIRS ${TETGEN_DIR})
+  list(APPEND LIBIGL_EXTRA_LIBRARIES "tetgen")
+
+  if(LIBIGL_USE_STATIC_LIBRARY)
+    include_directories(${TETGEN_DIR})
+    CompileIGL_Module("tetgen")
+  endif()
+endif()
+
+### Compile the triangle part ###
+if(LIBIGL_WITH_TRIANGLE)
+  set(TRIANGLE_DIR "${LIBIGL_EXTERNAL}/triangle")
+  add_subdirectory("${TRIANGLE_DIR}" "triangle")
+  list(APPEND LIBIGL_INCLUDE_DIRS ${TRIANGLE_DIR})
+  list(APPEND LIBIGL_EXTRA_LIBRARIES "triangle")
+
+  if(LIBIGL_USE_STATIC_LIBRARY)
+    include_directories(${TRIANGLE_DIR})
+    CompileIGL_Module("triangle")
+  endif()
+endif()
+
+### Compile the viewer ###
+if(LIBIGL_WITH_VIEWER) # to finish cleaning
+  set(NANOGUI_DIR "${LIBIGL_EXTERNAL}/nanogui")
+  set(NANOGUI_INCLUDE_DIRS
+    "${NANOGUI_DIR}/include"
+    "${NANOGUI_DIR}/ext/nanovg/src"
+    "${NANOGUI_DIR}/ext/glfw/include")
+
+  option(GLFW_INSTALL OFF)
+  option(NANOGUI_BUILD_PYTHON OFF)
+  option(NANOGUI_BUILD_EXAMPLE OFF)
+  option(NANOGUI_BUILD_SHARED  OFF)
+  add_subdirectory("${NANOGUI_DIR}" "nanogui")
+  list(APPEND LIBIGL_INCLUDE_DIRS ${NANOGUI_INCLUDE_DIRS})
+  list(APPEND LIBIGL_EXTRA_LIBRARIES "nanogui" "glfw" ${GLFW_LIBRARIES} pthread)
+
+  if(WIN32 OR UNIX) # GLEW should not be needed on Linux
+    include_directories("${NANOGUI_DIR}/ext/glew/include")
+    list(APPEND LIBIGL_INCLUDE_DIRS "${NANOGUI_DIR}/ext/glew/include")
+    list(APPEND LIBIGL_EXTRA_SOURCES "${NANOGUI_DIR}/ext/glew/src/glew.c")
+  endif()
+
+  if(LIBIGL_USE_STATIC_LIBRARY)
+    include_directories(${NANOGUI_INCLUDE_DIRS})
+    CompileIGL_Module("viewer")
+  endif()
+endif()
+
+### Compile the xml part ###
+if(LIBIGL_WITH_XML)
+  set(TINYXML2_DIR "${LIBIGL_EXTERNAL}/tinyxml2")
+
+  add_library(tinyxml2 STATIC ${TINYXML2_DIR}/tinyxml2.cpp ${TINYXML2_DIR}/tinyxml2.h)
+  set_target_properties(tinyxml2 PROPERTIES
+          COMPILE_DEFINITONS "TINYXML2_EXPORT"
+          VERSION "3.0.0"
+          SOVERSION "3")
+  list(APPEND LIBIGL_INCLUDE_DIRS ${TINYXML2_DIR})
+  list(APPEND LIBIGL_EXTRA_LIBRARIES "tinyxml2")
+
+  if(LIBIGL_USE_STATIC_LIBRARY)
+    include_directories(${TINYXML2_DIR})
+    CompileIGL_Module("xml")
+  endif()
+endif()
+
+
+### Compile the boolean and cgal parts ###
+if(LIBIGL_WITH_CGAL) # to be cleaned
+  set(CGAL_DIR "${LIBIGL_EXTERNAL}/cgal/build")
+  #option(CGAL_BRANCH_BUILD ON)
+  #option(BUILD_SHARED_LIBS OFF)
+  #option(WITH_CGAL_ImageIO OFF)
+  #option(WITH_CGAL_QT3 OFF)
+  #option(WITH_CGAL_QT5 OFF)
+  set(CMAKELISTS_SHARED_INCLUDED FALSE)
+  find_package(CGAL REQUIRED)
+  message(${CGAL_USE_FILE})
+  include(${CGAL_USE_FILE})
+  #add_subdirectory("${LIBIGL_EXTERNAL}/cgal" "cgal")
+
+#  find_package(CGAL REQUIRED)
+#  if(NOT CGAL_FOUND)
+#    message(SEND_ERROR "Could NOT find CGAL")
+#  endif()
+
+  if(LIBIGL_WITH_CORK)
+#    find_package(CORK REQUIRED)
+#    if(NOT MOSEK_FOUND)
+#      message(SEND_ERROR "Could NOT find CORK")
+#    endif()
+
+#    if(LIBIGL_USE_STATIC_LIBRARY)
+#      include_directories(${CORK_INCLUDE_DIR})
+#      CompileIGL_Module("boolean")
+#    endif()
+  else()
+    add_definitions(-DIGL_NO_CORK)
+    list(APPEND LIBIGL_DEFINITIONS "-DIGL_NO_CORK")
+  endif()
+
+  if(LIBIGL_USE_STATIC_LIBRARY)
+    CompileIGL_Module("cgal")
+  endif()
+endif()
+
+# Pass the list of compiled libraries to the parent if there is one
+if(NOT ${CMAKE_PROJECT_NAME} STREQUAL ${PROJECT_NAME})
+  list(REVERSE LIBIGL_LIBRARIES)
+
+  set(LIBIGL_INCLUDE_DIRS ${LIBIGL_INCLUDE_DIRS} PARENT_SCOPE)
+  set(LIBIGL_LIBRARIES ${LIBIGL_LIBRARIES} PARENT_SCOPE)
+  set(LIBIGL_EXTRA_LIBRARIES ${LIBIGL_EXTRA_LIBRARIES} PARENT_SCOPE)
+  set(LIBIGL_EXTRA_SOURCES ${LIBIGL_EXTRA_SOURCES} PARENT_SCOPE)
+  set(LIBIGL_DEFINITIONS ${LIBIGL_DEFINITIONS} PARENT_SCOPE)
+endif()

+ 94 - 0
cmake/FindCGAL.cmake

@@ -0,0 +1,94 @@
+#
+# The following module is based on FindVTK.cmake
+#
+
+# - Find a CGAL installation or binary tree.
+# The following variables are set if CGAL is found.  If CGAL is not
+# found, CGAL_FOUND is set to false.
+#
+#  CGAL_FOUND         - Set to true when CGAL is found.
+#  CGAL_USE_FILE      - CMake file to use CGAL.
+#
+
+# Construct consitent error messages for use below.
+set(CGAL_DIR_DESCRIPTION "directory containing CGALConfig.cmake. This is either the binary directory where CGAL was configured or PREFIX/lib/CGAL for an installation.")
+set(CGAL_DIR_MESSAGE     "CGAL not found.  Set the CGAL_DIR cmake variable or environment variable to the ${CGAL_DIR_DESCRIPTION}")
+ 
+set(CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS true)
+ 
+if ( NOT CGAL_DIR )
+  
+  # Get the system search path as a list.
+  if(UNIX)
+    string(REGEX MATCHALL "[^:]+" CGAL_DIR_SEARCH1 "$ENV{PATH}")
+  else()
+    string(REGEX REPLACE "\\\\" "/" CGAL_DIR_SEARCH1 "$ENV{PATH}")
+  endif()
+  
+  string(REGEX REPLACE "/;" ";" CGAL_DIR_SEARCH2 "${CGAL_DIR_SEARCH1}")
+
+  # Construct a set of paths relative to the system search path.
+  set(CGAL_DIR_SEARCH "")
+  
+  foreach(dir ${CGAL_DIR_SEARCH2})
+  
+    set(CGAL_DIR_SEARCH ${CGAL_DIR_SEARCH} ${dir}/../lib/CGAL )
+      
+  endforeach()
+
+
+  #
+  # Look for an installation or build tree.
+  #
+  find_path(CGAL_DIR CGALConfig.cmake
+
+    # Look for an environment variable CGAL_DIR.
+    $ENV{CGAL_DIR}
+
+    # Look in places relative to the system executable search path.
+    ${CGAL_DIR_SEARCH}
+
+    # Look in standard UNIX install locations.
+    /opt/local/share/CGAL/cmake
+    /usr/local/lib/CGAL
+    /usr/lib/CGAL
+
+    # Read from the CMakeSetup registry entries.  It is likely that
+    # CGAL will have been recently built.
+    [HKEY_CURRENT_USER\\Software\\Kitware\\CMakeSetup\\Settings\\StartPath;WhereBuild1]
+    [HKEY_CURRENT_USER\\Software\\Kitware\\CMakeSetup\\Settings\\StartPath;WhereBuild2]
+    [HKEY_CURRENT_USER\\Software\\Kitware\\CMakeSetup\\Settings\\StartPath;WhereBuild3]
+    [HKEY_CURRENT_USER\\Software\\Kitware\\CMakeSetup\\Settings\\StartPath;WhereBuild4]
+    [HKEY_CURRENT_USER\\Software\\Kitware\\CMakeSetup\\Settings\\StartPath;WhereBuild5]
+    [HKEY_CURRENT_USER\\Software\\Kitware\\CMakeSetup\\Settings\\StartPath;WhereBuild6]
+    [HKEY_CURRENT_USER\\Software\\Kitware\\CMakeSetup\\Settings\\StartPath;WhereBuild7]
+    [HKEY_CURRENT_USER\\Software\\Kitware\\CMakeSetup\\Settings\\StartPath;WhereBuild8]
+    [HKEY_CURRENT_USER\\Software\\Kitware\\CMakeSetup\\Settings\\StartPath;WhereBuild9]
+    [HKEY_CURRENT_USER\\Software\\Kitware\\CMakeSetup\\Settings\\StartPath;WhereBuild10]
+
+    # Help the user find it if we cannot.
+    DOC "The ${CGAL_DIR_DESCRIPTION}"
+  )
+  
+endif()
+
+if ( CGAL_DIR )
+  
+  if ( EXISTS "${CGAL_DIR}/CGALConfig.cmake" )
+    include( "${CGAL_DIR}/CGALConfig.cmake" )
+    set( CGAL_FOUND TRUE )
+  endif()
+
+endif()
+
+if(CGAL_FOUND)
+  MESSAGE(STATUS "Found CGAL: ${CGAL_DIR}")
+else()
+  if(CGAL_FIND_REQUIRED)
+    MESSAGE(FATAL_ERROR ${CGAL_DIR_MESSAGE})
+  else()
+    if(NOT CGAL_FIND_QUIETLY)
+      MESSAGE(STATUS ${CGAL_DIR_MESSAGE})
+    endif()
+  endif()
+endif()

+ 52 - 0
cmake/FindCORK.cmake

@@ -0,0 +1,52 @@
+#
+# Try to find CORK library and include path.
+# Once done this will define
+#
+# CORK_FOUND
+# CORK_INCLUDE_DIR
+# CORK_LIBRARIES
+#
+
+if(NOT CORK_FOUND)
+
+FIND_PATH(CORK_INCLUDE_DIR cork.h
+  PATHS
+    ${PROJECT_SOURCE_DIR}/../../external/cork/include
+    ${PROJECT_SOURCE_DIR}/../external/cork/include
+    ${PROJECT_SOURCE_DIR}/external/cork/include
+    /usr/local/include
+    /usr/X11/include
+    /usr/include
+    /opt/local/include
+    NO_DEFAULT_PATH
+    )
+
+FIND_LIBRARY( CORK_LIBRARIES NAMES cork
+  PATHS
+    ${PROJECT_SOURCE_DIR}/../../external/cork/lib/
+    ${PROJECT_SOURCE_DIR}/../external/cork/lib/
+    ${PROJECT_SOURCE_DIR}/external/cork/lib/
+    /usr/local
+    /usr/X11
+    /usr
+    PATH_SUFFIXES
+    a
+    lib64
+    lib
+    NO_DEFAULT_PATH
+)
+
+SET(CORK_FOUND "NO")
+IF (CORK_INCLUDE_DIR AND CORK_LIBRARIES)
+	SET(CORK_FOUND "YES")
+ENDIF (CORK_INCLUDE_DIR AND CORK_LIBRARIES)
+
+if(CORK_FOUND)
+  message(STATUS "Found CORK: ${CORK_INCLUDE_DIR}")
+else(CORK_FOUND)
+  if (NOT CORK_FIND_QUIETLY)
+    message(FATAL_ERROR "could NOT find CORK")
+  endif (NOT CORK_FIND_QUIETLY)
+endif(CORK_FOUND)
+
+endif(NOT CORK_FOUND)

+ 60 - 0
cmake/FindLIBCOMISOH.cmake

@@ -0,0 +1,60 @@
+# - Try to find the LIBCOMISO library
+# Once done this will define
+#
+#  LIBCOMISO_FOUND - system has LIBCOMISO
+#  LIBCOMISO_INCLUDE_DIR - the LIBCOMISO include directory
+#  LIBCOMISO_LIBRARY - the LIBCOMISO binary lib
+
+FIND_PATH(LIBCOMISO_INCLUDE_DIR CoMISo/Solver/ConstrainedSolver.hh
+   /usr/include
+   /usr/local/include
+   $ENV{LIBCOMISOROOT}/include
+   $ENV{LIBCOMISO_ROOT}/include
+   $ENV{LIBCOMISO_DIR}/include
+   $ENV{LIBCOMISO_DIR}/inc
+   ${PROJECT_SOURCE_DIR}/../
+   ${PROJECT_SOURCE_DIR}/../../
+   ${PROJECT_SOURCE_DIR}/../../../
+   ${PROJECT_SOURCE_DIR}/../CoMISo/
+   ${PROJECT_SOURCE_DIR}/../CoMISo/include
+   ${PROJECT_SOURCE_DIR}/../../CoMISo/
+   ${PROJECT_SOURCE_DIR}/../../CoMISo/include
+   /Users/daniele/Dropbox/igl/MIQ/src
+   /Users/olkido/Documents/igl/MIQ/src
+)
+
+SET(LIBCOMISO_FOUND "NO")
+IF (COMISO_INCLUDE_DIR)
+	SET(LIBCOMISO_FOUND "YES")
+ENDIF (COMISO_INCLUDE_DIR)
+
+
+
+if(LIBCOMISO_INCLUDE_DIR)
+
+   #message("${LIBCOMISO_INCLUDE_DIR}")
+
+   set(LIBCOMISO_INCLUDE_DIRS
+      ${LIBCOMISO_INCLUDE_DIR}
+      ${LIBCOMISO_INCLUDE_DIR}/CoMISo
+      ${LIBCOMISO_INCLUDE_DIR}/CoMISo/Solver
+      ${LIBCOMISO_INCLUDE_DIR}/CoMISo/EigenSolver
+      ${LIBCOMISO_INCLUDE_DIR}/CoMISo/NSolver
+      ${LIBCOMISO_INCLUDE_DIR}/CoMISo/Config
+      ${LIBCOMISO_INCLUDE_DIR}/CoMISo/Utils
+      ${LIBCOMISO_INCLUDE_DIR}/CoMISo/QtWidgets
+      ${LIBCOMISO_INCLUDE_DIR}/CoMISo/ext/gmm-4.2/include
+      )
+
+   #message("${LIBCOMISO_INCLUDE_DIRS}")
+
+   set(LIBCOMISO_INCLUDE_DIR ${LIBCOMISO_INCLUDE_DIR})
+
+   add_definitions(-DINCLUDE_TEMPLATES)
+   message(STATUS "Found LIBCOMISO: ${LIBCOMISO_INCLUDE_DIR}")
+   set(LIBCOMISO_FOUND TRUE)
+else(LIBCOMISO_INCLUDE_DIR)
+  if(NOT LIBCOMISOH_FIND_QUIETLY)
+   message(FATAL_ERROR "could NOT find LIBCOMISO")
+ endif (NOT LIBCOMISOH_FIND_QUIETLY)
+endif(LIBCOMISO_INCLUDE_DIR)

+ 216 - 0
cmake/FindMATLAB.cmake

@@ -0,0 +1,216 @@
+# - this module looks for Matlab
+# Defines:
+#  MATLAB_INCLUDE_DIR: include path for mex.h, engine.h
+#  MATLAB_LIBRARIES:   required libraries: libmex, etc
+#  MATLAB_MEX_LIBRARY: path to libmex.lib
+#  MATLAB_MX_LIBRARY:  path to libmx.lib
+#  MATLAB_MAT_LIBRARY:  path to libmat.lib # added
+#  MATLAB_ENG_LIBRARY: path to libeng.lib
+#  MATLAB_ROOT: path to Matlab's root directory
+
+# This file is part of Gerardus
+#
+# This is a derivative work of file FindMatlab.cmake released with
+# CMake v2.8, because the original seems to be a bit outdated and
+# doesn't work with my Windows XP and Visual Studio 10 install
+#
+# (Note that the original file does work for Ubuntu Natty)
+#
+# Author: Ramon Casero <rcasero@gmail.com>, Tom Doel
+# Version: 0.2.3
+# $Rev$
+# $Date$
+#
+# The original file was copied from an Ubuntu Linux install
+# /usr/share/cmake-2.8/Modules/FindMatlab.cmake
+
+#=============================================================================
+# Copyright 2005-2009 Kitware, Inc.
+#
+# Distributed under the OSI-approved BSD License (the "License");
+# see accompanying file Copyright.txt for details.
+#
+# This software is distributed WITHOUT ANY WARRANTY; without even the
+# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the License for more information.
+#=============================================================================
+# (To distribute this file outside of CMake, substitute the full
+#  License text for the above reference.)
+
+SET(MATLAB_FOUND 0)
+IF(WIN32)
+  # Search for a version of Matlab available, starting from the most modern one to older versions
+  FOREACH(MATVER "7.14" "7.11" "7.17" "7.10" "7.9" "7.8" "7.7" "7.6" "7.5" "7.4" "8.0" "8.1" "8.2" "8.3" "8.4" "8.5")
+    IF((NOT DEFINED MATLAB_ROOT)
+        OR ("${MATLAB_ROOT}" STREQUAL "")
+        OR ("${MATLAB_ROOT}" STREQUAL "/registry"))
+      GET_FILENAME_COMPONENT(MATLAB_ROOT
+        "[HKEY_LOCAL_MACHINE\\SOFTWARE\\MathWorks\\MATLAB\\${MATVER};MATLABROOT]"
+        ABSOLUTE)
+      SET(MATLAB_VERSION ${MATVER})
+    ENDIF((NOT DEFINED MATLAB_ROOT)
+      OR ("${MATLAB_ROOT}" STREQUAL "")
+      OR ("${MATLAB_ROOT}" STREQUAL "/registry"))
+  ENDFOREACH(MATVER)
+
+  # Directory name depending on whether the Windows architecture is 32
+  # bit or 64 bit
+  set(CMAKE_SIZEOF_VOID_P 8) # Note: For some weird reason this variable is undefined in my system...
+  IF(CMAKE_SIZEOF_VOID_P MATCHES "4")
+    SET(WINDIR "win32")
+  ELSEIF(CMAKE_SIZEOF_VOID_P MATCHES "8")
+    SET(WINDIR "win64")
+  ELSE(CMAKE_SIZEOF_VOID_P MATCHES "4")
+    MESSAGE(FATAL_ERROR
+      "CMAKE_SIZEOF_VOID_P (${CMAKE_SIZEOF_VOID_P}) doesn't indicate a valid platform")
+  ENDIF(CMAKE_SIZEOF_VOID_P MATCHES "4")
+
+  # Folder where the MEX libraries are, depending of the Windows compiler
+  IF(${CMAKE_GENERATOR} MATCHES "Visual Studio 6")
+    SET(MATLAB_LIBRARIES_DIR "${MATLAB_ROOT}/extern/lib/${WINDIR}/microsoft/msvc60")
+  ELSEIF(${CMAKE_GENERATOR} MATCHES "Visual Studio 7")
+    # Assume people are generally using Visual Studio 7.1,
+    # if using 7.0 need to link to: ../extern/lib/${WINDIR}/microsoft/msvc70
+    SET(MATLAB_LIBRARIES_DIR "${MATLAB_ROOT}/extern/lib/${WINDIR}/microsoft/msvc71")
+    # SET(MATLAB_LIBRARIES_DIR "${MATLAB_ROOT}/extern/lib/${WINDIR}/microsoft/msvc70")
+  ELSEIF(${CMAKE_GENERATOR} MATCHES "Borland")
+    # Assume people are generally using Borland 5.4,
+    # if using 7.0 need to link to: ../extern/lib/${WINDIR}/microsoft/msvc70
+    SET(MATLAB_LIBRARIES_DIR "${MATLAB_ROOT}/extern/lib/${WINDIR}/microsoft/bcc54")
+    # SET(MATLAB_LIBRARIES_DIR "${MATLAB_ROOT}/extern/lib/${WINDIR}/microsoft/bcc50")
+    # SET(MATLAB_LIBRARIES_DIR "${MATLAB_ROOT}/extern/lib/${WINDIR}/microsoft/bcc51")
+  ELSEIF(${CMAKE_GENERATOR} MATCHES "Visual Studio*")
+    # If the compiler is Visual Studio, but not any of the specific
+    # versions above, we try our luck with the microsoft directory
+    SET(MATLAB_LIBRARIES_DIR "${MATLAB_ROOT}/extern/lib/${WINDIR}/microsoft/")
+  ELSE(${CMAKE_GENERATOR} MATCHES "Visual Studio 6")
+    MESSAGE(FATAL_ERROR "Generator not compatible: ${CMAKE_GENERATOR}")
+  ENDIF(${CMAKE_GENERATOR} MATCHES "Visual Studio 6")
+
+  # Get paths to the Matlab MEX libraries
+  FIND_LIBRARY(MATLAB_MEX_LIBRARY
+    libmex
+    ${MATLAB_LIBRARIES_DIR}
+    )
+  FIND_LIBRARY(MATLAB_MX_LIBRARY
+    libmx
+    ${MATLAB_LIBRARIES_DIR}
+    )
+  FIND_LIBRARY(MATLAB_MAT_LIBRARY
+    libmat
+    ${MATLAB_LIBRARIES_DIR}
+    )
+  FIND_LIBRARY(MATLAB_ENG_LIBRARY
+    libeng
+    ${MATLAB_LIBRARIES_DIR}
+    )
+
+  # Get path to the include directory
+  FIND_PATH(MATLAB_INCLUDE_DIR
+    "mex.h"
+    "${MATLAB_ROOT}/extern/include"
+    )
+
+ELSE(WIN32)
+
+  IF((NOT DEFINED MATLAB_ROOT)
+      OR ("${MATLAB_ROOT}" STREQUAL ""))
+    # get path to the Matlab root directory
+    EXECUTE_PROCESS(
+      COMMAND which matlab
+      COMMAND xargs readlink
+      COMMAND xargs dirname
+      COMMAND xargs dirname
+      COMMAND xargs echo -n
+      OUTPUT_VARIABLE MATLAB_ROOT
+      )
+  ENDIF((NOT DEFINED MATLAB_ROOT)
+    OR ("${MATLAB_ROOT}" STREQUAL ""))
+
+  # Check if this is a Mac
+  IF(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
+
+    SET(LIBRARY_EXTENSION .dylib)
+
+    # If this is a Mac and the attempts to find MATLAB_ROOT have so far failed,
+    # we look in the applications folder
+    IF((NOT DEFINED MATLAB_ROOT) OR ("${MATLAB_ROOT}" STREQUAL ""))
+
+    # Search for a version of Matlab available, starting from the most modern one to older versions
+      FOREACH(MATVER "R2015b" "R2015a" "R2014b" "R2014a" "R2014a" "R2013b" "R2013a" "R2012b" "R2012a" "R2011b" "R2011a" "R2010b" "R2010a" "R2009b" "R2009a" "R2008b")
+        IF((NOT DEFINED MATLAB_ROOT) OR ("${MATLAB_ROOT}" STREQUAL ""))
+          IF(EXISTS /Applications/MATLAB_${MATVER}.app)
+            SET(MATLAB_ROOT /Applications/MATLAB_${MATVER}.app)
+
+          ENDIF(EXISTS /Applications/MATLAB_${MATVER}.app)
+        ENDIF((NOT DEFINED MATLAB_ROOT) OR ("${MATLAB_ROOT}" STREQUAL ""))
+      ENDFOREACH(MATVER)
+
+    ENDIF((NOT DEFINED MATLAB_ROOT) OR ("${MATLAB_ROOT}" STREQUAL ""))
+
+  ELSE(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
+    SET(LIBRARY_EXTENSION .so)
+
+  ENDIF(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
+
+  # Get path to the MEX libraries
+  EXECUTE_PROCESS(
+    #COMMAND find "${MATLAB_ROOT}/extern/lib" -name libmex${LIBRARY_EXTENSION} # Peter
+	COMMAND find "${MATLAB_ROOT}/bin" -name libmex${LIBRARY_EXTENSION} # Standard
+    COMMAND xargs echo -n
+    OUTPUT_VARIABLE MATLAB_MEX_LIBRARY
+    )
+  EXECUTE_PROCESS(
+    #COMMAND find "${MATLAB_ROOT}/extern/lib" -name libmx${LIBRARY_EXTENSION} # Peter
+	COMMAND find "${MATLAB_ROOT}/bin" -name libmx${LIBRARY_EXTENSION} # Standard
+    COMMAND xargs echo -n
+    OUTPUT_VARIABLE MATLAB_MX_LIBRARY
+    )
+  EXECUTE_PROCESS(
+    #COMMAND find "${MATLAB_ROOT}/extern/lib" -name libmat${LIBRARY_EXTENSION} # Peter
+	COMMAND find "${MATLAB_ROOT}/bin" -name libmat${LIBRARY_EXTENSION} # Standard
+    COMMAND xargs echo -n
+    OUTPUT_VARIABLE MATLAB_MAT_LIBRARY
+    )
+  EXECUTE_PROCESS(
+    #COMMAND find "${MATLAB_ROOT}/extern/lib" -name libeng${LIBRARY_EXTENSION} # Peter
+	COMMAND find "${MATLAB_ROOT}/bin" -name libeng${LIBRARY_EXTENSION} # Standard
+    COMMAND xargs echo -n
+    OUTPUT_VARIABLE MATLAB_ENG_LIBRARY
+    )
+
+  # Get path to the include directory
+  FIND_PATH(MATLAB_INCLUDE_DIR
+    "mex.h"
+    PATHS "${MATLAB_ROOT}/extern/include"
+    )
+
+ENDIF(WIN32)
+
+if (${CMAKE_CXX_COMPILER_ID} STREQUAL "GNU")
+  set(MATLAB_LIBSTDCPP "-lstdc++")
+endif ()
+
+
+# This is common to UNIX and Win32:
+SET(MATLAB_LIBRARIES
+  ${MATLAB_LIBSTDCPP}
+  ${MATLAB_MAT_LIBRARY}
+  ${MATLAB_MEX_LIBRARY}
+  ${MATLAB_MX_LIBRARY}
+  ${MATLAB_ENG_LIBRARY}
+)
+
+IF(MATLAB_INCLUDE_DIR AND MATLAB_LIBRARIES)
+  SET(MATLAB_FOUND 1)
+ENDIF(MATLAB_INCLUDE_DIR AND MATLAB_LIBRARIES)
+
+MARK_AS_ADVANCED(
+  MATLAB_LIBRARIES
+  MATLAB_MEX_LIBRARY
+  MATLAB_MX_LIBRARY
+  MATLAB_ENG_LIBRARY
+  MATLAB_INCLUDE_DIR
+  MATLAB_FOUND
+  MATLAB_ROOT
+)

+ 30 - 0
cmake/FindMOSEK.cmake

@@ -0,0 +1,30 @@
+#
+# Try to find MOSEK
+# Once done this will define
+#
+# MOSEK_FOUND           - system has MOSEK
+# MOSEK_INCLUDE_DIRS    - the MOSEK include directories
+# MOSEK_LIBRARIES       - Link these to use MOSEK
+#
+
+FIND_PATH(MOSEK_INCLUDE_DIR mosek.h
+  PATHS /usr/local/mosek/7/tools/platform/osx64x86/h/
+    )
+
+SET(SEARCH_PATHS "${MOSEK_INCLUDE_DIR}" "${MOSEK_INCLUDE_DIR}/../bin" "${MOSEK_INCLUDE_DIR}/lib")
+
+set(MOSEK_LIBRARIES)
+FIND_LIBRARY(MOSEK_LIBRARIES  NAMES mosek64 PATHS ${SEARCH_PATHS} NO_DEFAULT_PATH DPATH_SUFFIXES a lib dylib)
+
+if(MOSEK_LIBRARIES AND MOSEK_INCLUDE_DIR)
+message(STATUS "Found mosek: ${MOSEK_LIBRARIES}")
+set(MOSEK_FOUND TRUE)
+endif(MOSEK_LIBRARIES AND MOSEK_INCLUDE_DIR)
+
+IF (MOSEK_FOUND)
+   message(STATUS "Found MOSEK: ${MOSEK_INCLUDE_DIR}")
+   SET(MOSEK_INCLUDE_DIRS ${MOSEK_INCLUDE_DIR} )
+ELSE (MOSEK_FOUND)
+    #add_definitions(-DIGL_NO_MOSEK)
+    #message(WARNING "could NOT find MOSEK")
+ENDIF (MOSEK_FOUND)

+ 8 - 18
include/igl/png/render_to_png.cpp

@@ -6,18 +6,9 @@
 // v. 2.0. If a copy of the MPL was not distributed with this file, You can
 // obtain one at http://mozilla.org/MPL/2.0/.
 #include "render_to_png.h"
-#include <YImage.hpp>
+#include <stb_image_write.h>
 
-#ifdef __APPLE__
-#  include <OpenGL/gl.h>
-#else
-#  ifdef _WIN32
-#    define NOMINMAX
-#    include <Windows.h>
-#    undef NOMINMAX
-#  endif
-#  include <GL/gl.h>
-#endif
+#include "../opengl/OpenGL_convenience.h"
 
 IGL_INLINE bool igl::png::render_to_png(
   const std::string png_file,
@@ -26,8 +17,7 @@ IGL_INLINE bool igl::png::render_to_png(
   const bool alpha,
   const bool fast)
 {
-  YImage *img = new YImage();
-  img->resize(width,height);
+  unsigned char * data = new unsigned char[width*height];
   glReadPixels(
     0,
     0,
@@ -35,18 +25,18 @@ IGL_INLINE bool igl::png::render_to_png(
     height,
     GL_RGBA,
     GL_UNSIGNED_BYTE,
-    img->data());
-  img->flip();
+    data);
+  //img->flip();
   if(!alpha)
   {
     for(int i = 0;i<width;i++)
     for(int j = 0;j<height;j++)
     {
-      img->at(i,j).a = 255;
+      data[4*(i+j*width)+3] = 255;
     }
   }
-  bool ret = img->save(png_file.c_str(),fast);
-  delete img;
+  bool ret = stbi_write_png(png_file.c_str(), width, height, 4, data, width*sizeof(unsigned char));
+  delete [] data;
   return ret;
 }
 

+ 15 - 29
include/igl/png/render_to_png_async.cpp

@@ -1,46 +1,33 @@
 // This file is part of libigl, a simple c++ geometry processing library.
-// 
+//
 // Copyright (C) 2013 Alec Jacobson <alecjacobson@gmail.com>
-// 
-// This Source Code Form is subject to the terms of the Mozilla Public License 
-// v. 2.0. If a copy of the MPL was not distributed with this file, You can 
+//
+// This Source Code Form is subject to the terms of the Mozilla Public License
+// v. 2.0. If a copy of the MPL was not distributed with this file, You can
 // obtain one at http://mozilla.org/MPL/2.0/.
 #include "render_to_png_async.h"
-#include <YImage.hpp>
+#include <stb_image_write.h>
 
-#ifdef __APPLE__
-#  include <OpenGL/gl.h>
-#else
-#  ifdef _WIN32
-#    define NOMINMAX
-#    include <Windows.h>
-#    undef NOMINMAX
-#  endif
-#  include <GL/gl.h>
-#endif
+#include "../opengl/OpenGL_convenience.h"
 
-  
 static IGL_INLINE bool render_to_png_async_helper(
-  YImage * img,
+  unsigned char * img, int width, int height,
   const std::string png_file,
   const bool alpha,
   const bool fast)
 {
-
-  img->flip();
-  const int width = img->width();
-  const int height = img->height();
+  //img->flip();
   if(!alpha)
   {
     for(int i = 0;i<width;i++)
     for(int j = 0;j<height;j++)
     {
-      img->at(i,j).a = 255;
+      img[4*(i+j*width)+3] = 255;
     }
   }
 
-  bool ret = img->save(png_file.c_str(),fast);
-  delete img;
+  bool ret = stbi_write_png(png_file.c_str(), width, height, 4, img, width*sizeof(unsigned char));
+  delete [] img;
   return ret;
 }
 
@@ -52,8 +39,7 @@ IGL_INLINE std::thread igl::png::render_to_png_async(
   const bool fast)
 {
   // Part that should serial
-  YImage * img = new YImage();
-  img->resize(width,height);
+  unsigned char * data = new unsigned char[width*height];
   glReadPixels(
     0,
     0,
@@ -61,9 +47,9 @@ IGL_INLINE std::thread igl::png::render_to_png_async(
     height,
     GL_RGBA,
     GL_UNSIGNED_BYTE,
-    img->data());
-  // Part that should be asynchronous  
-  std::thread t(render_to_png_async_helper,img,png_file,alpha,fast);
+    data);
+  // Part that should be asynchronous
+  std::thread t(render_to_png_async_helper,data,width,height,png_file,alpha,fast);
   t.detach();
   return t;
 }

+ 4 - 5
include/igl/png/texture_from_file.cpp

@@ -1,9 +1,9 @@
 // This file is part of libigl, a simple c++ geometry processing library.
-// 
+//
 // Copyright (C) 2014 Alec Jacobson <alecjacobson@gmail.com>
-// 
-// This Source Code Form is subject to the terms of the Mozilla Public License 
-// v. 2.0. If a copy of the MPL was not distributed with this file, You can 
+//
+// This Source Code Form is subject to the terms of the Mozilla Public License
+// v. 2.0. If a copy of the MPL was not distributed with this file, You can
 // obtain one at http://mozilla.org/MPL/2.0/.
 #include "texture_from_file.h"
 
@@ -12,7 +12,6 @@
 #include "../pathinfo.h"
 #include "../opengl/report_gl_error.h"
 #include "../opengl/texture_from_tga.h"
-#include <YImage.hpp>
 #include <string>
 #include <algorithm>
 #include <iostream>

+ 30 - 22
include/igl/png/texture_from_png.cpp

@@ -8,20 +8,22 @@
 #include "texture_from_png.h"
 
 #include "../opengl/report_gl_error.h"
-#include <YImage.hpp>
+#include <stb_image.h>
 
 IGL_INLINE bool igl::png::texture_from_png(const std::string png_file, const bool flip, GLuint & id)
 {
-  YImage yimg;
-  if(!yimg.load(png_file.c_str()))
-  {
+  int width,height,n;
+  unsigned char *data = stbi_load(png_file.c_str(), &width, &height, &n, 4);
+  if(data == NULL) {
     return false;
   }
+
   // Why do I need to flip?
-  if(flip)
+  /*if(flip)
   {
     yimg.flip();
-  }
+  }*/
+  
   glGenTextures(1, &id);
   glBindTexture(GL_TEXTURE_2D, id);
   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
@@ -30,8 +32,11 @@ IGL_INLINE bool igl::png::texture_from_png(const std::string png_file, const boo
   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
   glTexImage2D(
     GL_TEXTURE_2D, 0, GL_RGB,
-    yimg.width(), yimg.height(), 0, GL_RGBA, GL_UNSIGNED_BYTE, yimg.data());
+    width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, data);
   glBindTexture(GL_TEXTURE_2D, 0);
+
+  stbi_image_free(data);
+
   return true;
 }
 
@@ -49,27 +54,30 @@ IGL_INLINE bool igl::png::texture_from_png(
   Eigen::Matrix<char,Eigen::Dynamic,Eigen::Dynamic>& A
 )
 {
-  YImage yimg;
-  if(!yimg.load(png_file.c_str()))
-  {
+  int width,height,n;
+  unsigned char *data = stbi_load(png_file.c_str(), &width, &height, &n, 4);
+  if(data == NULL) {
     return false;
   }
 
-  R.resize(yimg.height(),yimg.width());
-  G.resize(yimg.height(),yimg.width());
-  B.resize(yimg.height(),yimg.width());
-  A.resize(yimg.height(),yimg.width());
+  R.resize(height,width);
+  G.resize(height,width);
+  B.resize(height,width);
+  A.resize(height,width);
 
-  for (unsigned j=0; j<yimg.height(); ++j)
-  {
-    for (unsigned i=0; i<yimg.width(); ++i)
-    {
-      R(i,j) = yimg.at(yimg.width()-1-i,yimg.height()-1-j).r;
-      G(i,j) = yimg.at(yimg.width()-1-i,yimg.height()-1-j).g;
-      B(i,j) = yimg.at(yimg.width()-1-i,yimg.height()-1-j).b;
-      //1A(i,j) = yimg.at(yimg.width()-1-i,yimg.height()-1-j).a;
+  for (unsigned j=0; j<height; ++j) {
+    for (unsigned i=0; i<width; ++i) {
+      // used to flip with libPNG, but I'm not sure if
+      // simply j*width + i wouldn't be better
+      // stb_image uses horizontal scanline an starts top-left corner
+      R(i,j) = data[4*( (width-1-i) + width * (height-1-j) )];
+      G(i,j) = data[4*( (width-1-i) + width * (height-1-j) ) + 1];
+      B(i,j) = data[4*( (width-1-i) + width * (height-1-j) ) + 2];
+      //A(i,j) = data[4*( (width-1-i) + width * (height-1-j) ) + 3];
     }
   }
 
+  stbi_image_free(data);
+
   return true;
 }

+ 0 - 7
include/igl/png/texture_from_png.h

@@ -10,7 +10,6 @@
 #include "../igl_inline.h"
 #include <Eigen/Core>
 #include <string>
-#include <Eigen/Core>
 
 #include "../opengl/OpenGL_convenience.h"
 
@@ -28,13 +27,7 @@ namespace igl
     // Returns true on success, false on failure
     IGL_INLINE bool texture_from_png(const std::string png_file, const bool flip, GLuint & id);
     IGL_INLINE bool texture_from_png(const std::string png_file, GLuint & id);
-  }
-}
 
-namespace igl
-{
-  namespace png
-  {
     // Read an image from a .png file and use it as a texture
     //
     // Input:

+ 5 - 8
tutorial/101_FileIO/CMakeLists.txt

@@ -1,11 +1,8 @@
 cmake_minimum_required(VERSION 2.6)
 project(101_FileIO)
 
-include("../CMakeLists.shared")
-
-set(SOURCES
-${PROJECT_SOURCE_DIR}/main.cpp
-)
-
-add_executable(${PROJECT_NAME}_bin ${SOURCES} ${SHARED_SOURCES})
-target_link_libraries(${PROJECT_NAME}_bin ${SHARED_LIBRARIES})
+include_directories(${LIBIGL_INCLUDE_DIRS})
+add_executable(${PROJECT_NAME}_bin
+  main.cpp
+${LIBIGL_EXTRA_SOURCES})
+target_link_libraries(${PROJECT_NAME}_bin ${LIBIGL_LIBRARIES} ${LIBIGL_EXTRA_LIBRARIES})

+ 5 - 8
tutorial/102_DrawMesh/CMakeLists.txt

@@ -1,11 +1,8 @@
 cmake_minimum_required(VERSION 2.6)
 project(102_DrawMesh)
 
-include("../CMakeLists.shared")
-
-set(SOURCES
-${PROJECT_SOURCE_DIR}/main.cpp
-)
-
-add_executable(${PROJECT_NAME}_bin ${SOURCES} ${SHARED_SOURCES})
-target_link_libraries(${PROJECT_NAME}_bin ${SHARED_LIBRARIES})
+include_directories(${LIBIGL_INCLUDE_DIRS})
+add_executable(${PROJECT_NAME}_bin
+  main.cpp
+${LIBIGL_EXTRA_SOURCES})
+target_link_libraries(${PROJECT_NAME}_bin ${LIBIGL_LIBRARIES} ${LIBIGL_EXTRA_LIBRARIES})

+ 5 - 8
tutorial/103_Events/CMakeLists.txt

@@ -1,11 +1,8 @@
 cmake_minimum_required(VERSION 2.6)
 project(103_Events)
 
-include("../CMakeLists.shared")
-
-set(SOURCES
-${PROJECT_SOURCE_DIR}/main.cpp
-)
-
-add_executable(${PROJECT_NAME}_bin ${SOURCES} ${SHARED_SOURCES})
-target_link_libraries(${PROJECT_NAME}_bin ${SHARED_LIBRARIES})
+include_directories(${LIBIGL_INCLUDE_DIRS})
+add_executable(${PROJECT_NAME}_bin
+  main.cpp
+${LIBIGL_EXTRA_SOURCES})
+target_link_libraries(${PROJECT_NAME}_bin ${LIBIGL_LIBRARIES} ${LIBIGL_EXTRA_LIBRARIES})

+ 5 - 8
tutorial/104_Colors/CMakeLists.txt

@@ -1,11 +1,8 @@
 cmake_minimum_required(VERSION 2.6)
 project(104_Colors)
 
-include("../CMakeLists.shared")
-
-set(SOURCES
-${PROJECT_SOURCE_DIR}/main.cpp
-)
-
-add_executable(${PROJECT_NAME}_bin ${SOURCES} ${SHARED_SOURCES})
-target_link_libraries(${PROJECT_NAME}_bin ${SHARED_LIBRARIES})
+include_directories(${LIBIGL_INCLUDE_DIRS})
+add_executable(${PROJECT_NAME}_bin
+  main.cpp
+${LIBIGL_EXTRA_SOURCES})
+target_link_libraries(${PROJECT_NAME}_bin ${LIBIGL_LIBRARIES} ${LIBIGL_EXTRA_LIBRARIES})

+ 5 - 8
tutorial/105_Overlays/CMakeLists.txt

@@ -1,11 +1,8 @@
 cmake_minimum_required(VERSION 2.6)
 project(105_Overlays)
 
-include("../CMakeLists.shared")
-
-set(SOURCES
-${PROJECT_SOURCE_DIR}/main.cpp
-)
-
-add_executable(${PROJECT_NAME}_bin ${SOURCES} ${SHARED_SOURCES})
-target_link_libraries(${PROJECT_NAME}_bin ${SHARED_LIBRARIES})
+include_directories(${LIBIGL_INCLUDE_DIRS})
+add_executable(${PROJECT_NAME}_bin
+  main.cpp
+${LIBIGL_EXTRA_SOURCES})
+target_link_libraries(${PROJECT_NAME}_bin ${LIBIGL_LIBRARIES} ${LIBIGL_EXTRA_LIBRARIES})

+ 5 - 8
tutorial/106_ViewerMenu/CMakeLists.txt

@@ -1,11 +1,8 @@
 cmake_minimum_required(VERSION 2.6)
 project(106_ViewerMenu)
 
-include("../CMakeLists.shared")
-
-set(SOURCES
-${PROJECT_SOURCE_DIR}/main.cpp
-)
-
-add_executable(${PROJECT_NAME}_bin ${SOURCES} ${SHARED_SOURCES})
-target_link_libraries(${PROJECT_NAME}_bin ${SHARED_LIBRARIES})
+include_directories(${LIBIGL_INCLUDE_DIRS})
+add_executable(${PROJECT_NAME}_bin
+  main.cpp
+${LIBIGL_EXTRA_SOURCES})
+target_link_libraries(${PROJECT_NAME}_bin ${LIBIGL_LIBRARIES} ${LIBIGL_EXTRA_LIBRARIES})

+ 5 - 8
tutorial/201_Normals/CMakeLists.txt

@@ -1,11 +1,8 @@
 cmake_minimum_required(VERSION 2.6)
 project(201_Normals)
 
-include("../CMakeLists.shared")
-
-set(SOURCES
-${PROJECT_SOURCE_DIR}/main.cpp
-)
-
-add_executable(${PROJECT_NAME}_bin ${SOURCES} ${SHARED_SOURCES})
-target_link_libraries(${PROJECT_NAME}_bin ${SHARED_LIBRARIES})
+include_directories(${LIBIGL_INCLUDE_DIRS})
+add_executable(${PROJECT_NAME}_bin
+  main.cpp
+${LIBIGL_EXTRA_SOURCES})
+target_link_libraries(${PROJECT_NAME}_bin ${LIBIGL_LIBRARIES} ${LIBIGL_EXTRA_LIBRARIES})

+ 5 - 8
tutorial/202_GaussianCurvature/CMakeLists.txt

@@ -1,11 +1,8 @@
 cmake_minimum_required(VERSION 2.6)
 project(202_GaussianCurvature)
 
-include("../CMakeLists.shared")
-
-set(SOURCES
-${PROJECT_SOURCE_DIR}/main.cpp
-)
-
-add_executable(${PROJECT_NAME}_bin ${SOURCES} ${SHARED_SOURCES})
-target_link_libraries(${PROJECT_NAME}_bin ${SHARED_LIBRARIES})
+include_directories(${LIBIGL_INCLUDE_DIRS})
+add_executable(${PROJECT_NAME}_bin
+  main.cpp
+${LIBIGL_EXTRA_SOURCES})
+target_link_libraries(${PROJECT_NAME}_bin ${LIBIGL_LIBRARIES} ${LIBIGL_EXTRA_LIBRARIES})

+ 5 - 8
tutorial/203_CurvatureDirections/CMakeLists.txt

@@ -1,11 +1,8 @@
 cmake_minimum_required(VERSION 2.6)
 project(203_CurvatureDirections)
 
-include("../CMakeLists.shared")
-
-set(SOURCES
-${PROJECT_SOURCE_DIR}/main.cpp
-)
-
-add_executable(${PROJECT_NAME}_bin ${SOURCES} ${SHARED_SOURCES})
-target_link_libraries(${PROJECT_NAME}_bin ${SHARED_LIBRARIES})
+include_directories(${LIBIGL_INCLUDE_DIRS})
+add_executable(${PROJECT_NAME}_bin
+  main.cpp
+${LIBIGL_EXTRA_SOURCES})
+target_link_libraries(${PROJECT_NAME}_bin ${LIBIGL_LIBRARIES} ${LIBIGL_EXTRA_LIBRARIES})

+ 5 - 8
tutorial/204_Gradient/CMakeLists.txt

@@ -1,11 +1,8 @@
 cmake_minimum_required(VERSION 2.6)
 project(204_Gradient)
 
-include("../CMakeLists.shared")
-
-set(SOURCES
-${PROJECT_SOURCE_DIR}/main.cpp
-)
-
-add_executable(${PROJECT_NAME}_bin ${SOURCES} ${SHARED_SOURCES})
-target_link_libraries(${PROJECT_NAME}_bin ${SHARED_LIBRARIES})
+include_directories(${LIBIGL_INCLUDE_DIRS})
+add_executable(${PROJECT_NAME}_bin
+  main.cpp
+${LIBIGL_EXTRA_SOURCES})
+target_link_libraries(${PROJECT_NAME}_bin ${LIBIGL_LIBRARIES} ${LIBIGL_EXTRA_LIBRARIES})

+ 5 - 8
tutorial/205_Laplacian/CMakeLists.txt

@@ -1,11 +1,8 @@
 cmake_minimum_required(VERSION 2.6)
 project(205_Laplacian)
 
-include("../CMakeLists.shared")
-
-set(SOURCES
-${PROJECT_SOURCE_DIR}/main.cpp
-)
-
-add_executable(${PROJECT_NAME}_bin ${SOURCES} ${SHARED_SOURCES})
-target_link_libraries(${PROJECT_NAME}_bin ${SHARED_LIBRARIES})
+include_directories(${LIBIGL_INCLUDE_DIRS})
+add_executable(${PROJECT_NAME}_bin
+  main.cpp
+${LIBIGL_EXTRA_SOURCES})
+target_link_libraries(${PROJECT_NAME}_bin ${LIBIGL_LIBRARIES} ${LIBIGL_EXTRA_LIBRARIES})

+ 5 - 8
tutorial/301_Slice/CMakeLists.txt

@@ -1,11 +1,8 @@
 cmake_minimum_required(VERSION 2.6)
 project(301_Slice)
 
-include("../CMakeLists.shared")
-
-set(SOURCES
-${PROJECT_SOURCE_DIR}/main.cpp
-)
-
-add_executable(${PROJECT_NAME}_bin ${SOURCES} ${SHARED_SOURCES})
-target_link_libraries(${PROJECT_NAME}_bin ${SHARED_LIBRARIES})
+include_directories(${LIBIGL_INCLUDE_DIRS})
+add_executable(${PROJECT_NAME}_bin
+  main.cpp
+${LIBIGL_EXTRA_SOURCES})
+target_link_libraries(${PROJECT_NAME}_bin ${LIBIGL_LIBRARIES} ${LIBIGL_EXTRA_LIBRARIES})

+ 5 - 8
tutorial/302_Sort/CMakeLists.txt

@@ -1,11 +1,8 @@
 cmake_minimum_required(VERSION 2.6)
 project(302_Sort)
 
-include("../CMakeLists.shared")
-
-set(SOURCES
-${PROJECT_SOURCE_DIR}/main.cpp
-)
-
-add_executable(${PROJECT_NAME}_bin ${SOURCES} ${SHARED_SOURCES})
-target_link_libraries(${PROJECT_NAME}_bin ${SHARED_LIBRARIES})
+include_directories(${LIBIGL_INCLUDE_DIRS})
+add_executable(${PROJECT_NAME}_bin
+  main.cpp
+${LIBIGL_EXTRA_SOURCES})
+target_link_libraries(${PROJECT_NAME}_bin ${LIBIGL_LIBRARIES} ${LIBIGL_EXTRA_LIBRARIES})

+ 5 - 8
tutorial/303_LaplaceEquation/CMakeLists.txt

@@ -1,11 +1,8 @@
 cmake_minimum_required(VERSION 2.6)
 project(303_LaplaceEquation)
 
-include("../CMakeLists.shared")
-
-set(SOURCES
-${PROJECT_SOURCE_DIR}/main.cpp
-)
-
-add_executable(${PROJECT_NAME}_bin ${SOURCES} ${SHARED_SOURCES})
-target_link_libraries(${PROJECT_NAME}_bin ${SHARED_LIBRARIES})
+include_directories(${LIBIGL_INCLUDE_DIRS})
+add_executable(${PROJECT_NAME}_bin
+  main.cpp
+${LIBIGL_EXTRA_SOURCES})
+target_link_libraries(${PROJECT_NAME}_bin ${LIBIGL_LIBRARIES} ${LIBIGL_EXTRA_LIBRARIES})

+ 5 - 8
tutorial/304_LinearEqualityConstraints/CMakeLists.txt

@@ -1,11 +1,8 @@
 cmake_minimum_required(VERSION 2.6)
 project(304_LinearEqualityConstraints)
 
-include("../CMakeLists.shared")
-
-set(SOURCES
-${PROJECT_SOURCE_DIR}/main.cpp
-)
-
-add_executable(${PROJECT_NAME}_bin ${SOURCES} ${SHARED_SOURCES})
-target_link_libraries(${PROJECT_NAME}_bin ${SHARED_LIBRARIES})
+include_directories(${LIBIGL_INCLUDE_DIRS})
+add_executable(${PROJECT_NAME}_bin
+  main.cpp
+${LIBIGL_EXTRA_SOURCES})
+target_link_libraries(${PROJECT_NAME}_bin ${LIBIGL_LIBRARIES} ${LIBIGL_EXTRA_LIBRARIES})

+ 5 - 8
tutorial/305_QuadraticProgramming/CMakeLists.txt

@@ -1,11 +1,8 @@
 cmake_minimum_required(VERSION 2.6)
 project(305_QuadraticProgramming)
 
-include("../CMakeLists.shared")
-
-set(SOURCES
-${PROJECT_SOURCE_DIR}/main.cpp
-)
-
-add_executable(${PROJECT_NAME}_bin ${SOURCES} ${SHARED_SOURCES})
-target_link_libraries(${PROJECT_NAME}_bin ${SHARED_LIBRARIES})
+include_directories(${LIBIGL_INCLUDE_DIRS})
+add_executable(${PROJECT_NAME}_bin
+  main.cpp
+${LIBIGL_EXTRA_SOURCES})
+target_link_libraries(${PROJECT_NAME}_bin ${LIBIGL_LIBRARIES} ${LIBIGL_EXTRA_LIBRARIES})

+ 5 - 8
tutorial/306_EigenDecomposition/CMakeLists.txt

@@ -1,11 +1,8 @@
 cmake_minimum_required(VERSION 2.6)
 project(306_EigenDecomposition)
 
-include("../CMakeLists.shared")
-
-set(SOURCES
-${PROJECT_SOURCE_DIR}/main.cpp
-)
-
-add_executable(${PROJECT_NAME}_bin ${SOURCES} ${SHARED_SOURCES})
-target_link_libraries(${PROJECT_NAME}_bin ${SHARED_LIBRARIES})
+include_directories(${LIBIGL_INCLUDE_DIRS})
+add_executable(${PROJECT_NAME}_bin
+  main.cpp
+${LIBIGL_EXTRA_SOURCES})
+target_link_libraries(${PROJECT_NAME}_bin ${LIBIGL_LIBRARIES} ${LIBIGL_EXTRA_LIBRARIES})

+ 5 - 8
tutorial/401_BiharmonicDeformation/CMakeLists.txt

@@ -1,11 +1,8 @@
 cmake_minimum_required(VERSION 2.6)
 project(401_BiharmonicDeformation)
 
-include("../CMakeLists.shared")
-
-set(SOURCES
-${PROJECT_SOURCE_DIR}/main.cpp
-)
-
-add_executable(${PROJECT_NAME}_bin ${SOURCES} ${SHARED_SOURCES})
-target_link_libraries(${PROJECT_NAME}_bin ${SHARED_LIBRARIES})
+include_directories(${LIBIGL_INCLUDE_DIRS})
+add_executable(${PROJECT_NAME}_bin
+  main.cpp
+${LIBIGL_EXTRA_SOURCES})
+target_link_libraries(${PROJECT_NAME}_bin ${LIBIGL_LIBRARIES} ${LIBIGL_EXTRA_LIBRARIES})

+ 5 - 8
tutorial/402_PolyharmonicDeformation/CMakeLists.txt

@@ -1,11 +1,8 @@
 cmake_minimum_required(VERSION 2.6)
 project(402_PolyharmonicDeformation)
 
-include("../CMakeLists.shared")
-
-set(SOURCES
-${PROJECT_SOURCE_DIR}/main.cpp
-)
-
-add_executable(${PROJECT_NAME}_bin ${SOURCES} ${SHARED_SOURCES})
-target_link_libraries(${PROJECT_NAME}_bin ${SHARED_LIBRARIES})
+include_directories(${LIBIGL_INCLUDE_DIRS})
+add_executable(${PROJECT_NAME}_bin
+  main.cpp
+${LIBIGL_EXTRA_SOURCES})
+target_link_libraries(${PROJECT_NAME}_bin ${LIBIGL_LIBRARIES} ${LIBIGL_EXTRA_LIBRARIES})

+ 6 - 19
tutorial/403_BoundedBiharmonicWeights/CMakeLists.txt

@@ -1,22 +1,9 @@
 cmake_minimum_required(VERSION 2.6)
 project(403_BoundedBiharmonicWeights)
 
-include("../CMakeLists.shared")
-
-find_package(MOSEK QUIET)
-if(MOSEK_FOUND)
-  include_directories( ${MOSEK_INCLUDE_DIR} )
-else(MOSEK_FOUND)
-  add_definitions(-DIGL_NO_MOSEK)
-  if(LIBIGL_USE_STATIC_LIBRARY)
-    set(LIBIGLMOSEK_LIBRARY "")
-  endif(LIBIGL_USE_STATIC_LIBRARY)
-  set(MOSEK_LIBRARIES "")
-endif(MOSEK_FOUND)
-
-set(SOURCES
-${PROJECT_SOURCE_DIR}/main.cpp
-)
-
-add_executable(${PROJECT_NAME}_bin ${SOURCES} ${SHARED_SOURCES})
-target_link_libraries(${PROJECT_NAME}_bin ${SHARED_LIBRARIES} ${MOSEK_LIBRARIES})
+include_directories(${LIBIGL_INCLUDE_DIRS})
+add_definitions(${LIBIGL_DEFINITIONS})
+add_executable(${PROJECT_NAME}_bin
+  main.cpp
+${LIBIGL_EXTRA_SOURCES})
+target_link_libraries(${PROJECT_NAME}_bin ${LIBIGL_LIBRARIES} ${LIBIGL_EXTRA_LIBRARIES})

+ 5 - 8
tutorial/404_DualQuaternionSkinning/CMakeLists.txt

@@ -1,11 +1,8 @@
 cmake_minimum_required(VERSION 2.6)
 project(404_DualQuaternionSkinning)
 
-include("../CMakeLists.shared")
-
-set(SOURCES
-${PROJECT_SOURCE_DIR}/main.cpp
-)
-
-add_executable(${PROJECT_NAME}_bin ${SOURCES} ${SHARED_SOURCES})
-target_link_libraries(${PROJECT_NAME}_bin ${SHARED_LIBRARIES})
+include_directories(${LIBIGL_INCLUDE_DIRS})
+add_executable(${PROJECT_NAME}_bin
+  main.cpp
+${LIBIGL_EXTRA_SOURCES})
+target_link_libraries(${PROJECT_NAME}_bin ${LIBIGL_LIBRARIES} ${LIBIGL_EXTRA_LIBRARIES})

+ 5 - 8
tutorial/405_AsRigidAsPossible/CMakeLists.txt

@@ -1,11 +1,8 @@
 cmake_minimum_required(VERSION 2.6)
 project(405_AsRigidAsPossible)
 
-include("../CMakeLists.shared")
-
-set(SOURCES
-${PROJECT_SOURCE_DIR}/main.cpp
-)
-
-add_executable(${PROJECT_NAME}_bin ${SOURCES} ${SHARED_SOURCES})
-target_link_libraries(${PROJECT_NAME}_bin ${SHARED_LIBRARIES})
+include_directories(${LIBIGL_INCLUDE_DIRS})
+add_executable(${PROJECT_NAME}_bin
+  main.cpp
+${LIBIGL_EXTRA_SOURCES})
+target_link_libraries(${PROJECT_NAME}_bin ${LIBIGL_LIBRARIES} ${LIBIGL_EXTRA_LIBRARIES})

+ 5 - 8
tutorial/406_FastAutomaticSkinningTransformations/CMakeLists.txt

@@ -1,11 +1,8 @@
 cmake_minimum_required(VERSION 2.6)
 project(406_FastAutomaticSkinningTransformations)
 
-include("../CMakeLists.shared")
-
-set(SOURCES
-${PROJECT_SOURCE_DIR}/main.cpp
-)
-
-add_executable(${PROJECT_NAME}_bin ${SOURCES} ${SHARED_SOURCES})
-target_link_libraries(${PROJECT_NAME}_bin ${SHARED_LIBRARIES})
+include_directories(${LIBIGL_INCLUDE_DIRS})
+add_executable(${PROJECT_NAME}_bin
+  main.cpp
+${LIBIGL_EXTRA_SOURCES})
+target_link_libraries(${PROJECT_NAME}_bin ${LIBIGL_LIBRARIES} ${LIBIGL_EXTRA_LIBRARIES})

+ 5 - 8
tutorial/407_BiharmonicCoordinates/CMakeLists.txt

@@ -1,11 +1,8 @@
 cmake_minimum_required(VERSION 2.6)
 project(407_BiharmonicCoordinates)
 
-include("../CMakeLists.shared")
-
-set(SOURCES
-${PROJECT_SOURCE_DIR}/main.cpp
-)
-
-add_executable(${PROJECT_NAME}_bin ${SOURCES} ${SHARED_SOURCES})
-target_link_libraries(${PROJECT_NAME}_bin ${SHARED_LIBRARIES})
+include_directories(${LIBIGL_INCLUDE_DIRS})
+add_executable(${PROJECT_NAME}_bin
+  main.cpp
+${LIBIGL_EXTRA_SOURCES})
+target_link_libraries(${PROJECT_NAME}_bin ${LIBIGL_LIBRARIES} ${LIBIGL_EXTRA_LIBRARIES})

+ 5 - 8
tutorial/501_HarmonicParam/CMakeLists.txt

@@ -1,11 +1,8 @@
 cmake_minimum_required(VERSION 2.6)
 project(501_HarmonicParam)
 
-include("../CMakeLists.shared")
-
-set(SOURCES
-${PROJECT_SOURCE_DIR}/main.cpp
-)
-
-add_executable(${PROJECT_NAME}_bin ${SOURCES} ${SHARED_SOURCES})
-target_link_libraries(${PROJECT_NAME}_bin ${SHARED_LIBRARIES})
+include_directories(${LIBIGL_INCLUDE_DIRS})
+add_executable(${PROJECT_NAME}_bin
+  main.cpp
+${LIBIGL_EXTRA_SOURCES})
+target_link_libraries(${PROJECT_NAME}_bin ${LIBIGL_LIBRARIES} ${LIBIGL_EXTRA_LIBRARIES})

+ 5 - 8
tutorial/502_LSCMParam/CMakeLists.txt

@@ -1,11 +1,8 @@
 cmake_minimum_required(VERSION 2.6)
 project(502_LSCMParam)
 
-include("../CMakeLists.shared")
-
-set(SOURCES
-${PROJECT_SOURCE_DIR}/main.cpp
-)
-
-add_executable(${PROJECT_NAME}_bin ${SOURCES} ${SHARED_SOURCES})
-target_link_libraries(${PROJECT_NAME}_bin ${SHARED_LIBRARIES})
+include_directories(${LIBIGL_INCLUDE_DIRS})
+add_executable(${PROJECT_NAME}_bin
+  main.cpp
+${LIBIGL_EXTRA_SOURCES})
+target_link_libraries(${PROJECT_NAME}_bin ${LIBIGL_LIBRARIES} ${LIBIGL_EXTRA_LIBRARIES})

+ 5 - 8
tutorial/503_ARAPParam/CMakeLists.txt

@@ -1,11 +1,8 @@
 cmake_minimum_required(VERSION 2.6)
 project(503_ARAPParam)
 
-include("../CMakeLists.shared")
-
-set(SOURCES
-${PROJECT_SOURCE_DIR}/main.cpp
-)
-
-add_executable(${PROJECT_NAME}_bin ${SOURCES} ${SHARED_SOURCES})
-target_link_libraries(${PROJECT_NAME}_bin ${SHARED_LIBRARIES})
+include_directories(${LIBIGL_INCLUDE_DIRS})
+add_executable(${PROJECT_NAME}_bin
+  main.cpp
+${LIBIGL_EXTRA_SOURCES})
+target_link_libraries(${PROJECT_NAME}_bin ${LIBIGL_LIBRARIES} ${LIBIGL_EXTRA_LIBRARIES})

+ 5 - 8
tutorial/504_NRosyDesign/CMakeLists.txt

@@ -1,11 +1,8 @@
 cmake_minimum_required(VERSION 2.6)
 project(504_NRosyDesign)
 
-include("../CMakeLists.shared")
-
-set(SOURCES
-${PROJECT_SOURCE_DIR}/main.cpp
-)
-
-add_executable(${PROJECT_NAME}_bin ${SOURCES} ${SHARED_SOURCES})
-target_link_libraries(${PROJECT_NAME}_bin ${SHARED_LIBRARIES})
+include_directories(${LIBIGL_INCLUDE_DIRS})
+add_executable(${PROJECT_NAME}_bin
+  main.cpp
+${LIBIGL_EXTRA_SOURCES})
+target_link_libraries(${PROJECT_NAME}_bin ${LIBIGL_LIBRARIES} ${LIBIGL_EXTRA_LIBRARIES})

+ 5 - 8
tutorial/505_MIQ/CMakeLists.txt

@@ -1,11 +1,8 @@
 cmake_minimum_required(VERSION 2.6)
 project(505_MIQ)
 
-include("../CMakeLists.shared")
-
-set(SOURCES
-${PROJECT_SOURCE_DIR}/main.cpp
-)
-
-add_executable(${PROJECT_NAME}_bin ${SOURCES} ${SHARED_SOURCES})
-target_link_libraries(${PROJECT_NAME}_bin ${SHARED_LIBRARIES})
+include_directories(${LIBIGL_INCLUDE_DIRS})
+add_executable(${PROJECT_NAME}_bin
+  main.cpp
+${LIBIGL_EXTRA_SOURCES})
+target_link_libraries(${PROJECT_NAME}_bin ${LIBIGL_LIBRARIES} ${LIBIGL_EXTRA_LIBRARIES})

+ 5 - 8
tutorial/506_FrameField/CMakeLists.txt

@@ -1,11 +1,8 @@
 cmake_minimum_required(VERSION 2.6)
 project(506_FrameField)
 
-include("../CMakeLists.shared")
-
-set(SOURCES
-${PROJECT_SOURCE_DIR}/main.cpp
-)
-
-add_executable(${PROJECT_NAME}_bin ${SOURCES} ${SHARED_SOURCES})
-target_link_libraries(${PROJECT_NAME}_bin ${SHARED_LIBRARIES})
+include_directories(${LIBIGL_INCLUDE_DIRS})
+add_executable(${PROJECT_NAME}_bin
+  main.cpp
+${LIBIGL_EXTRA_SOURCES})
+target_link_libraries(${PROJECT_NAME}_bin ${LIBIGL_LIBRARIES} ${LIBIGL_EXTRA_LIBRARIES})

+ 5 - 8
tutorial/507_PolyVectorField/CMakeLists.txt

@@ -1,11 +1,8 @@
 cmake_minimum_required(VERSION 2.6)
 project(507_PolyVectorField)
 
-include("../CMakeLists.shared")
-
-set(SOURCES
-${PROJECT_SOURCE_DIR}/main.cpp
-)
-
-add_executable(${PROJECT_NAME}_bin ${SOURCES} ${SHARED_SOURCES})
-target_link_libraries(${PROJECT_NAME}_bin ${SHARED_LIBRARIES})
+include_directories(${LIBIGL_INCLUDE_DIRS})
+add_executable(${PROJECT_NAME}_bin
+  main.cpp
+${LIBIGL_EXTRA_SOURCES})
+target_link_libraries(${PROJECT_NAME}_bin ${LIBIGL_LIBRARIES} ${LIBIGL_EXTRA_LIBRARIES})

+ 5 - 8
tutorial/508_ConjugateField/CMakeLists.txt

@@ -1,11 +1,8 @@
 cmake_minimum_required(VERSION 2.6)
 project(508_ConjugateField)
 
-include("../CMakeLists.shared")
-
-set(SOURCES
-${PROJECT_SOURCE_DIR}/main.cpp
-)
-
-add_executable(${PROJECT_NAME}_bin ${SOURCES} ${SHARED_SOURCES})
-target_link_libraries(${PROJECT_NAME}_bin ${SHARED_LIBRARIES})
+include_directories(${LIBIGL_INCLUDE_DIRS})
+add_executable(${PROJECT_NAME}_bin
+  main.cpp
+${LIBIGL_EXTRA_SOURCES})
+target_link_libraries(${PROJECT_NAME}_bin ${LIBIGL_LIBRARIES} ${LIBIGL_EXTRA_LIBRARIES})

+ 5 - 8
tutorial/509_Planarization/CMakeLists.txt

@@ -1,11 +1,8 @@
 cmake_minimum_required(VERSION 2.6)
 project(509_Planarization)
 
-include("../CMakeLists.shared")
-
-set(SOURCES
-${PROJECT_SOURCE_DIR}/main.cpp
-)
-
-add_executable(${PROJECT_NAME}_bin ${SOURCES} ${SHARED_SOURCES})
-target_link_libraries(${PROJECT_NAME}_bin ${SHARED_LIBRARIES})
+include_directories(${LIBIGL_INCLUDE_DIRS})
+add_executable(${PROJECT_NAME}_bin
+  main.cpp
+${LIBIGL_EXTRA_SOURCES})
+target_link_libraries(${PROJECT_NAME}_bin ${LIBIGL_LIBRARIES} ${LIBIGL_EXTRA_LIBRARIES})

+ 5 - 8
tutorial/510_Integrable/CMakeLists.txt

@@ -1,11 +1,8 @@
 cmake_minimum_required(VERSION 2.6)
 project(510_Integrable)
 
-include("../CMakeLists.shared")
-
-set(SOURCES
-${PROJECT_SOURCE_DIR}/main.cpp
-)
-
-add_executable(${PROJECT_NAME}_bin ${SOURCES} ${SHARED_SOURCES})
-target_link_libraries(${PROJECT_NAME}_bin ${SHARED_LIBRARIES})
+include_directories(${LIBIGL_INCLUDE_DIRS})
+add_executable(${PROJECT_NAME}_bin
+  main.cpp
+${LIBIGL_EXTRA_SOURCES})
+target_link_libraries(${PROJECT_NAME}_bin ${LIBIGL_LIBRARIES} ${LIBIGL_EXTRA_LIBRARIES})

+ 5 - 11
tutorial/601_Serialization/CMakeLists.txt

@@ -1,14 +1,8 @@
 cmake_minimum_required(VERSION 2.6)
 project(601_Serialization)
 
-include("../CMakeLists.shared")
-
-find_package(TINYXML2 REQUIRED)
-include_directories( ${TINYXML2_INCLUDE_DIR})
-
-set(SOURCES
-${PROJECT_SOURCE_DIR}/main.cpp
-)
-
-add_executable(${PROJECT_NAME}_bin ${SOURCES} ${SHARED_SOURCES} ${TINYXML2_SOURCES})
-target_link_libraries(${PROJECT_NAME}_bin ${SHARED_LIBRARIES})
+include_directories(${LIBIGL_INCLUDE_DIRS})
+add_executable(${PROJECT_NAME}_bin
+  main.cpp
+${LIBIGL_EXTRA_SOURCES})
+target_link_libraries(${PROJECT_NAME}_bin ${LIBIGL_LIBRARIES} ${LIBIGL_EXTRA_LIBRARIES})

+ 1 - 1
tutorial/601_Serialization/main.cpp

@@ -17,7 +17,7 @@ struct State : public igl::Serializable
 
   // You have to define this function to
   // register the fields you want to serialize
-  void InitSerialization()
+  virtual void InitSerialization()
   {
     this->Add(V  , "V");
     this->Add(F  , "F");

+ 5 - 17
tutorial/602_Matlab/CMakeLists.txt

@@ -1,20 +1,8 @@
 cmake_minimum_required(VERSION 2.6)
 project(602_Matlab)
 
-include("../CMakeLists.shared")
-
-find_package(MATLAB REQUIRED)
-include_directories( ${MATLAB_INCLUDE_DIR} )
-
-set(SOURCES
-${PROJECT_SOURCE_DIR}/main.cpp
-)
-
-# Alec: This seems like a clang specific thing and also seems to have an extra
-# bracket.
-# if(APPLE)
-#   set(CMAKE_EXE_LINKER_FLAGS "-rpath ${MATLAB_INCLUDE_DIR}/../../bin/maci64"})
-# endif (APPLE) #APPLE
-
-add_executable(${PROJECT_NAME}_bin ${SOURCES} ${SHARED_SOURCES})
-target_link_libraries(${PROJECT_NAME}_bin ${SHARED_LIBRARIES} ${MATLAB_LIBRARIES})
+include_directories(${LIBIGL_INCLUDE_DIRS})
+add_executable(${PROJECT_NAME}_bin
+  main.cpp
+${LIBIGL_EXTRA_SOURCES})
+target_link_libraries(${PROJECT_NAME}_bin ${LIBIGL_LIBRARIES} ${LIBIGL_EXTRA_LIBRARIES})

+ 5 - 11
tutorial/604_Triangle/CMakeLists.txt

@@ -1,14 +1,8 @@
 cmake_minimum_required(VERSION 2.6)
 project(604_Triangle)
 
-include("../CMakeLists.shared")
-find_package(TRIANGLE REQUIRED)
-
-include_directories( ${TRIANGLE_INCLUDE_DIR})
-
-set(SOURCES
-${PROJECT_SOURCE_DIR}/main.cpp
-)
-
-add_executable(${PROJECT_NAME}_bin ${SOURCES} ${SHARED_SOURCES} ${TRIANGLE_SOURCES})
-target_link_libraries(${PROJECT_NAME}_bin ${SHARED_LIBRARIES})
+include_directories(${LIBIGL_INCLUDE_DIRS})
+add_executable(${PROJECT_NAME}_bin
+  main.cpp
+${LIBIGL_EXTRA_SOURCES})
+target_link_libraries(${PROJECT_NAME}_bin ${LIBIGL_LIBRARIES} ${LIBIGL_EXTRA_LIBRARIES})

+ 5 - 11
tutorial/605_Tetgen/CMakeLists.txt

@@ -1,14 +1,8 @@
 cmake_minimum_required(VERSION 2.6)
 project(605_Tetgen)
 
-include("../CMakeLists.shared")
-find_package(TETGEN REQUIRED)
-
-include_directories( ${TETGEN_INCLUDE_DIR})
-
-set(SOURCES
-${PROJECT_SOURCE_DIR}/main.cpp
-)
-
-add_executable(${PROJECT_NAME}_bin ${SOURCES} ${SHARED_SOURCES} ${TETGEN_SOURCES})
-target_link_libraries(${PROJECT_NAME}_bin ${SHARED_LIBRARIES})
+include_directories(${LIBIGL_INCLUDE_DIRS})
+add_executable(${PROJECT_NAME}_bin
+  main.cpp
+${LIBIGL_EXTRA_SOURCES})
+target_link_libraries(${PROJECT_NAME}_bin ${LIBIGL_LIBRARIES} ${LIBIGL_EXTRA_LIBRARIES})

+ 5 - 8
tutorial/606_AmbientOcclusion/CMakeLists.txt

@@ -1,11 +1,8 @@
 cmake_minimum_required(VERSION 2.6)
 project(606_AmbientOcclusion)
 
-include("../CMakeLists.shared")
-
-set(SOURCES
-${PROJECT_SOURCE_DIR}/main.cpp
-)
-
-add_executable(${PROJECT_NAME}_bin ${SOURCES} ${SHARED_SOURCES})
-target_link_libraries(${PROJECT_NAME}_bin ${SHARED_LIBRARIES})
+include_directories(${LIBIGL_INCLUDE_DIRS})
+add_executable(${PROJECT_NAME}_bin
+  main.cpp
+${LIBIGL_EXTRA_SOURCES})
+target_link_libraries(${PROJECT_NAME}_bin ${LIBIGL_LIBRARIES} ${LIBIGL_EXTRA_LIBRARIES})

+ 5 - 8
tutorial/607_Picking/CMakeLists.txt

@@ -1,11 +1,8 @@
 cmake_minimum_required(VERSION 2.6)
 project(607_Picking)
 
-include("../CMakeLists.shared")
-
-set(SOURCES
-${PROJECT_SOURCE_DIR}/main.cpp
-)
-
-add_executable(${PROJECT_NAME}_bin ${SOURCES} ${SHARED_SOURCES})
-target_link_libraries(${PROJECT_NAME}_bin ${SHARED_LIBRARIES})
+include_directories(${LIBIGL_INCLUDE_DIRS})
+add_executable(${PROJECT_NAME}_bin
+  main.cpp
+${LIBIGL_EXTRA_SOURCES})
+target_link_libraries(${PROJECT_NAME}_bin ${LIBIGL_LIBRARIES} ${LIBIGL_EXTRA_LIBRARIES})

+ 12 - 11
tutorial/608_LIM/CMakeLists.txt

@@ -1,14 +1,15 @@
 cmake_minimum_required(VERSION 2.6)
 project(608_LIM)
 
-include("../CMakeLists.shared")
-find_package(LIM REQUIRED)
-
-include_directories(${LIM_INCLUDE_DIR})
-
-set(SOURCES
-${PROJECT_SOURCE_DIR}/main.cpp
-)
-
-add_executable(${PROJECT_NAME}_bin ${SOURCES} ${SHARED_SOURCES} ${LIM_SOURCES})
-target_link_libraries(${PROJECT_NAME}_bin ${SHARED_LIBRARIES})
+### OpenMP ###
+find_package(OpenMP)
+if(OPENMP_FOUND AND NOT WIN32)
+  set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")
+  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
+endif()
+
+include_directories(${LIBIGL_INCLUDE_DIRS})
+add_executable(${PROJECT_NAME}_bin
+  main.cpp
+${LIBIGL_EXTRA_SOURCES})
+target_link_libraries(${PROJECT_NAME}_bin ${LIBIGL_LIBRARIES} ${LIBIGL_EXTRA_LIBRARIES})

+ 5 - 30
tutorial/609_Boolean/CMakeLists.txt

@@ -1,33 +1,8 @@
 cmake_minimum_required(VERSION 2.6)
 project(609_Boolean)
 
-find_package(CGAL REQUIRED)
-set(CGAL_DONT_OVERRIDE_CMAKE_FLAGS TRUE CACHE BOOL "CGAL's CMAKE Setup is super annoying ")
-include(${CGAL_USE_FILE})
-# CGAL's monkeying with all of the flags. Rather than change the CGAL_USE_FILE
-# just get ride of this flag.
-if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
-  remove_cxx_flag("-stdlib=libc++")
-endif()
-IF(MSVC)
-  SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP") ### Enable parallel compilation for Visual Studio
-  SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG ${CMAKE_BINARY_DIR} )
-  SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE ${CMAKE_BINARY_DIR} )
-ELSE(MSVC)
-  SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") #### Libigl requires a modern C++ compiler that supports c++11
-  SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY "../" )
-ENDIF(MSVC)
-
-# This is absolutely necessary for Exact Construction
-
-# for some reason must come after cgal include. I think that it's overwriting
-# come flags like CXX_FLAGS
-#set(CMAKELISTS_SHARED_INCLUDED FALSE)
-include("../CMakeLists.shared")
-
-set(SOURCES
-${PROJECT_SOURCE_DIR}/main.cpp
-)
-
-add_executable(${PROJECT_NAME}_bin ${SOURCES} ${SHARED_SOURCES})
-target_link_libraries(${PROJECT_NAME}_bin ${SHARED_LIBRARIES} ${CGAL_LIBRARIES})
+include_directories(${LIBIGL_INCLUDE_DIRS})
+add_executable(${PROJECT_NAME}_bin
+  main.cpp
+${LIBIGL_EXTRA_SOURCES})
+target_link_libraries(${PROJECT_NAME}_bin ${LIBIGL_LIBRARIES} ${LIBIGL_EXTRA_LIBRARIES})

+ 5 - 30
tutorial/610_CSGTree/CMakeLists.txt

@@ -1,33 +1,8 @@
 cmake_minimum_required(VERSION 2.6)
 project(610_CSGTree)
 
-find_package(CGAL REQUIRED)
-set(CGAL_DONT_OVERRIDE_CMAKE_FLAGS TRUE CACHE BOOL "CGAL's CMAKE Setup is super annoying ")
-include(${CGAL_USE_FILE})
-# CGAL's monkeying with all of the flags. Rather than change the CGAL_USE_FILE
-# just get ride of this flag.
-if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
-  remove_cxx_flag("-stdlib=libc++")
-endif()
-IF(MSVC)
-  SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP") ### Enable parallel compilation for Visual Studio
-  SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG ${CMAKE_BINARY_DIR} )
-  SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE ${CMAKE_BINARY_DIR} )
-ELSE(MSVC)
-  SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") #### Libigl requires a modern C++ compiler that supports c++11
-  SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY "../" )
-ENDIF(MSVC)
-
-# This is absolutely necessary for Exact Construction
-
-# for some reason must come after cgal include. I think that it's overwriting
-# come flags like CXX_FLAGS
-#set(CMAKELISTS_SHARED_INCLUDED FALSE)
-include("../CMakeLists.shared")
-
-set(SOURCES
-${PROJECT_SOURCE_DIR}/main.cpp
-)
-
-add_executable(${PROJECT_NAME}_bin ${SOURCES} ${SHARED_SOURCES})
-target_link_libraries(${PROJECT_NAME}_bin ${SHARED_LIBRARIES} ${CGAL_LIBRARIES})
+include_directories(${LIBIGL_INCLUDE_DIRS})
+add_executable(${PROJECT_NAME}_bin
+  main.cpp
+${LIBIGL_EXTRA_SOURCES})
+target_link_libraries(${PROJECT_NAME}_bin ${LIBIGL_LIBRARIES} ${LIBIGL_EXTRA_LIBRARIES})

+ 5 - 8
tutorial/701_Statistics/CMakeLists.txt

@@ -1,11 +1,8 @@
 cmake_minimum_required(VERSION 2.6)
 project(701_Statistics)
 
-include("../CMakeLists.shared")
-
-set(SOURCES
-${PROJECT_SOURCE_DIR}/main.cpp
-)
-
-add_executable(${PROJECT_NAME}_bin ${SOURCES} ${SHARED_SOURCES})
-target_link_libraries(${PROJECT_NAME}_bin ${SHARED_LIBRARIES})
+include_directories(${LIBIGL_INCLUDE_DIRS})
+add_executable(${PROJECT_NAME}_bin
+  main.cpp
+${LIBIGL_EXTRA_SOURCES})
+target_link_libraries(${PROJECT_NAME}_bin ${LIBIGL_LIBRARIES} ${LIBIGL_EXTRA_LIBRARIES})

+ 5 - 8
tutorial/702_WindingNumber/CMakeLists.txt

@@ -1,11 +1,8 @@
 cmake_minimum_required(VERSION 2.6)
 project(702_WindingNumber)
 
-include("../CMakeLists.shared")
-
-set(SOURCES
-${PROJECT_SOURCE_DIR}/main.cpp
-)
-
-add_executable(${PROJECT_NAME}_bin ${SOURCES} ${SHARED_SOURCES})
-target_link_libraries(${PROJECT_NAME}_bin ${SHARED_LIBRARIES})
+include_directories(${LIBIGL_INCLUDE_DIRS})
+add_executable(${PROJECT_NAME}_bin
+  main.cpp
+${LIBIGL_EXTRA_SOURCES})
+target_link_libraries(${PROJECT_NAME}_bin ${LIBIGL_LIBRARIES} ${LIBIGL_EXTRA_LIBRARIES})

+ 5 - 8
tutorial/703_Decimation/CMakeLists.txt

@@ -1,11 +1,8 @@
 cmake_minimum_required(VERSION 2.6)
 project(703_Decimation)
 
-include("../CMakeLists.shared")
-
-set(SOURCES
-${PROJECT_SOURCE_DIR}/main.cpp
-)
-
-add_executable(${PROJECT_NAME}_bin ${SOURCES} ${SHARED_SOURCES})
-target_link_libraries(${PROJECT_NAME}_bin ${SHARED_LIBRARIES})
+include_directories(${LIBIGL_INCLUDE_DIRS})
+add_executable(${PROJECT_NAME}_bin
+  main.cpp
+${LIBIGL_EXTRA_SOURCES})
+target_link_libraries(${PROJECT_NAME}_bin ${LIBIGL_LIBRARIES} ${LIBIGL_EXTRA_LIBRARIES})

+ 5 - 8
tutorial/704_SignedDistance/CMakeLists.txt

@@ -1,11 +1,8 @@
 cmake_minimum_required(VERSION 2.6)
 project(704_SignedDistance)
 
-include("../CMakeLists.shared")
-
-set(SOURCES
-${PROJECT_SOURCE_DIR}/main.cpp
-)
-
-add_executable(${PROJECT_NAME}_bin ${SOURCES} ${SHARED_SOURCES})
-target_link_libraries(${PROJECT_NAME}_bin ${SHARED_LIBRARIES})
+include_directories(${LIBIGL_INCLUDE_DIRS})
+add_executable(${PROJECT_NAME}_bin
+  main.cpp
+${LIBIGL_EXTRA_SOURCES})
+target_link_libraries(${PROJECT_NAME}_bin ${LIBIGL_LIBRARIES} ${LIBIGL_EXTRA_LIBRARIES})

+ 5 - 8
tutorial/705_MarchingCubes/CMakeLists.txt

@@ -1,11 +1,8 @@
 cmake_minimum_required(VERSION 2.6)
 project(705_MarchingCubes)
 
-include("../CMakeLists.shared")
-
-set(SOURCES
-${PROJECT_SOURCE_DIR}/main.cpp
-)
-
-add_executable(${PROJECT_NAME}_bin ${SOURCES} ${SHARED_SOURCES})
-target_link_libraries(${PROJECT_NAME}_bin ${SHARED_LIBRARIES})
+include_directories(${LIBIGL_INCLUDE_DIRS})
+add_executable(${PROJECT_NAME}_bin
+  main.cpp
+${LIBIGL_EXTRA_SOURCES})
+target_link_libraries(${PROJECT_NAME}_bin ${LIBIGL_LIBRARIES} ${LIBIGL_EXTRA_LIBRARIES})

+ 131 - 207
tutorial/CMakeLists.txt

@@ -1,228 +1,152 @@
 cmake_minimum_required(VERSION 2.6)
 project(libigl_tutorials)
 
-message("Generated with config types: ${CMAKE_CONFIGURATION_TYPES}")
-
-option(LIBIGL_USE_STATIC_LIBRARY "Use static library" OFF)
-option(LIBIGL_VIEWER_WITH_NANOGUI "Enable nanogui " OFF)
-
-if(LIBIGL_USE_STATIC_LIBRARY)
-  add_definitions(-DIGL_STATIC_LIBRARY)
-endif(LIBIGL_USE_STATIC_LIBRARY)
-
-SET(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake)
-
-IF(MSVC)
-  # Enable parallel compilation for Visual Studio
-  SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP /bigobj /w") 
-
-  SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG ${CMAKE_BINARY_DIR} )
-  SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE ${CMAKE_BINARY_DIR} )
-
-ELSE(MSVC)
-  # Libigl requires a modern C++ compiler that supports c++11
-  SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
-  SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY "../" )
-ENDIF(MSVC)
-
-find_package(CORK QUIET)
-find_package(CGAL QUIET)
-find_package(EMBREE QUIET)
-find_package(LIBCOMISOH QUIET)
-find_package(MATLAB QUIET)
-find_package(MOSEK QUIET)
-find_package(TETGEN QUIET)
-find_package(TINYXML2 QUIET)
-find_package(TRIANGLE QUIET)
-find_package(LIM QUIET)
-
-message(STATUS "CMAKE_CXX_FLAGS: ${CMAKE_CXX_FLAGS}")
-include("CMakeLists.shared")
-
-#Compile libigl
-add_definitions(-DIGL_NO_OPENGL)
-
-if(LIBIGL_USE_STATIC_LIBRARY)
-  add_subdirectory("../optional" "libigl")
-endif(LIBIGL_USE_STATIC_LIBRARY)
-include_directories("../include")
-
-
-#Compile embree
-option(ENABLE_ISPC_SUPPORT " " OFF)
-option(RTCORE_TASKING_SYSTEM " " INTERNAL)
-
-# embree static build is broken on visual studio
-IF(NOT MSVC) 
-  option(ENABLE_STATIC_LIB " " ON)
-  set(ENABLE_STATIC_LIB ON CACHE BOOL "force static build of embree" FORCE)
-ENDIF(NOT MSVC)
-
-IF(MSVC)
-  option(USE_STATIC_RUNTIME " " OFF)
-  set(USE_STATIC_RUNTIME OFF CACHE BOOL "disable changes in the runtime for VS" FORCE)
-ENDIF(MSVC)
-
-option(ENABLE_TUTORIALS " " OFF)
-
-IF(EMBREE_FOUND)
-  add_subdirectory("../external/embree/" "embree")    
-  include_directories("../external/embree/include")    
-  list(APPEND SHARED_LIBRARIES "embree")    
-ENDIF(EMBREE_FOUND)
-
-#Compile nanogui
-if(LIBIGL_VIEWER_WITH_NANOGUI)
-  set(NANOGUI_BUILD_PYTHON OFF CACHE BOOL " " FORCE)
-  set(NANOGUI_BUILD_EXAMPLE OFF CACHE BOOL " " FORCE)
-  set(NANOGUI_BUILD_SHARED OFF CACHE BOOL " " FORCE)
-  add_definitions(-DIGL_VIEWER_WITH_NANOGUI)
-  add_subdirectory("../external/nanogui/" "nanogui")
-  include_directories("../external/nanogui/include")
-  include_directories("../external/nanogui/ext/nanovg/src")
-  list(APPEND SHARED_LIBRARIES "nanogui")
+### Compilation flags: adapt to your needs ###
+if(MSVC)
+  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP /bigobj") ### Enable parallel compilation
+  set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG ${CMAKE_BINARY_DIR} )
+  set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE ${CMAKE_BINARY_DIR} )
 else()
-  # still need to build GLFW
-  set(GLFW_BUILD_EXAMPLES OFF CACHE BOOL " " FORCE)
-  set(GLFW_BUILD_TESTS OFF CACHE BOOL " " FORCE)
-  set(GLFW_BUILD_DOCS OFF CACHE BOOL " " FORCE)
-  set(GLFW_BUILD_INSTALL OFF CACHE BOOL " " FORCE)
-  add_subdirectory("${GLFW_INCLUDE_DIR}/../" "glfw")
-  list(APPEND SHARED_LIBRARIES "glfw")
-
+  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") #### Libigl requires a modern C++ compiler that supports c++11
+  set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "../" )
 endif()
 
-
-#Compile CoMISo (if found)
-# NOTE: this cmakefile works only with the
-# comiso available here: https://github.com/libigl/CoMISo
-IF(LIBCOMISO_FOUND)
-
-  list(GET LIBCOMISO_INCLUDE_DIRS 0 COMISO_ROOT)
-  # message( FATAL_ERROR "${COMISO_ROOT}" )
-
-  if(APPLE)
-    find_library(accelerate_library Accelerate)
-    list(APPEND SHARED_LIBRARIES "CoMISo" ${accelerate_library})
-  elseif(UNIX)
-    find_package(BLAS REQUIRED)
-    list(APPEND SHARED_LIBRARIES "CoMISo" ${BLAS_LIBRARIES})
-  endif(APPLE)
-
-  if(MSVC)
-    SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /D_SCL_SECURE_NO_DEPRECATE")
-    #link_directories("${COMISO_ROOT}/CoMISo/ext/OpenBLAS-v0.2.14-Win64-int64/lib/")
-    list(APPEND SHARED_LIBRARIES "CoMISo" "${COMISO_ROOT}/CoMISo/ext/OpenBLAS-v0.2.14-Win64-int64/lib/libopenblas.dll.a.lib")
-  endif(MSVC)
-
-
-  include_directories("${COMISO_ROOT}/CoMISo/ext/gmm-4.2/include")
-  include_directories("${COMISO_ROOT}/")
-  add_subdirectory("${COMISO_ROOT}/CoMISo/" "CoMISo")
-
-  if(MSVC)
-    # Copy the dll
-    add_custom_target(Copy-CoMISo-DLL        # Adds a post-build event to MyTest
-    COMMAND ${CMAKE_COMMAND} -E copy_if_different
-        "${COMISO_ROOT}/CoMISo/ext/OpenBLAS-v0.2.14-Win64-int64/bin/libopenblas.dll"
-        "${CMAKE_CURRENT_BINARY_DIR}/libopenblas.dll"
-    COMMAND ${CMAKE_COMMAND} -E copy_if_different
-        "${COMISO_ROOT}/CoMISo/ext/OpenBLAS-v0.2.14-Win64-int64/bin/libgcc_s_seh-1.dll"
-        "${CMAKE_CURRENT_BINARY_DIR}/libgcc_s_seh-1.dll"
-    COMMAND ${CMAKE_COMMAND} -E copy_if_different
-        "${COMISO_ROOT}/CoMISo/ext/OpenBLAS-v0.2.14-Win64-int64/bin/libgfortran-3.dll"
-        "${CMAKE_CURRENT_BINARY_DIR}/libgfortran-3.dll"
-    COMMAND ${CMAKE_COMMAND} -E copy_if_different
-        "${COMISO_ROOT}/CoMISo/ext/OpenBLAS-v0.2.14-Win64-int64/bin/libquadmath-0.dll"
-        "${CMAKE_CURRENT_BINARY_DIR}/libquadmath-0.dll")
-  endif(MSVC)
-
-ENDIF(LIBCOMISO_FOUND)
-
-message(STATUS "Linking with: ${LIBIGL_LIBRARIES}")
-list(APPEND SHARED_LIBRARIES ${LIBIGL_LIBRARIES})
-
-# This is necessary to work around the static linking order dependencies on linux
-if(UNIX AND NOT APPLE)
-  set(SHARED_LIBRARIES ${SHARED_LIBRARIES} ${SHARED_LIBRARIES})
-endif(UNIX AND NOT APPLE)
-
-#message(FATAL_ERROR ${SHARED_LIBRARIES})
-
-# Store location of tutorial/shared directory 
+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-deprecated-declarations")
+
+
+### libIGL options: choose between header only and comiled static library
+option(LIBIGL_USE_STATIC_LIBRARY "Use LibIGL as static library" OFF)
+
+### libIGL options: choose your dependencies (by default everything is OFF, in this example we need the viewer) ###
+#option(LIBIGL_WITH_BBW         "Use BBW"            ON)
+option(LIBIGL_WITH_BOOLEAN     "Use Cork boolean"   OFF)
+option(LIBIGL_WITH_CGAL        "Use CGAL"           OFF)
+#option(LIBIGL_WITH_COMISO      "Use CoMiso"         OFF)
+#option(LIBIGL_WITH_EMBREE      "Use Embree"         ON)
+#option(LIBIGL_WITH_LIM         "Use LIM"            ON)
+#option(LIBIGL_WITH_MATLAB      "Use Matlab"         OFF)
+#option(LIBIGL_WITH_MOSEK       "Use MOSEK"          OFF)
+#option(LIBIGL_WITH_OPENGL      "Use OpenGL"         ON)
+#option(LIBIGL_WITH_PNG         "Use PNG"            ON)
+#option(LIBIGL_WITH_TETGEN      "Use Tetgen"         ON)
+#option(LIBIGL_WITH_TRIANGLE    "Use Triangle"       ON)
+option(LIBIGL_WITH_VIEWER      "Use Nanogui Viewer" ON)
+#option(LIBIGL_WITH_XML         "Use XML"            OFF)
+
+### Adding libIGL: choose the path to your local copy libIGL ###
+### This is going to compile everything you requested ###
+add_subdirectory("${PROJECT_SOURCE_DIR}/../cmake" "libigl")
+
+### ligIBL information ###
+message("libIGL includes: ${LIBIGL_INCLUDE_DIRS}")
+message("libIGL libraries: ${LIBIGL_LIBRARIES}")
+message("libIGL extra sources: ${LIBIGL_EXTRA_SOURCES}")
+message("libIGL extra libraries: ${LIBIGL_EXTRA_LIBRARIES}")
+message("libIGL definitions: ${LIBIGL_DEFINITIONS}")
+
+### Choose which chapters to compile ###
+option(TUTORIALS_CHAPTER1 "Compile chapter 1" ON)
+option(TUTORIALS_CHAPTER2 "Compile chapter 2" OFF)
+option(TUTORIALS_CHAPTER3 "Compile chapter 3" OFF)
+option(TUTORIALS_CHAPTER4 "Compile chapter 4" OFF)
+option(TUTORIALS_CHAPTER5 "Compile chapter 5" OFF)
+option(TUTORIALS_CHAPTER6 "Compile chapter 6" OFF)
+option(TUTORIALS_CHAPTER7 "Compile chapter 7" OFF)
+
+# Store location of tutorial/shared directory
 set(TUTORIAL_SHARED_PATH ${CMAKE_CURRENT_SOURCE_DIR}/shared CACHE PATH "location of shared tutorial resources")
 add_definitions("-DTUTORIAL_SHARED_PATH=\"${TUTORIAL_SHARED_PATH}\"")
 
+include_directories(${CMAKE_CURRENT_SOURCE_DIR})
+
 # Chapter 1
-add_subdirectory("101_FileIO")
-add_subdirectory("102_DrawMesh")
-add_subdirectory("103_Events")
-add_subdirectory("104_Colors")
-add_subdirectory("105_Overlays")
-add_subdirectory("106_ViewerMenu")
+if(TUTORIALS_CHAPTER1)
+  add_subdirectory("101_FileIO")
+  add_subdirectory("102_DrawMesh")
+  add_subdirectory("103_Events")
+  add_subdirectory("104_Colors")
+  add_subdirectory("105_Overlays")
+  add_subdirectory("106_ViewerMenu")
+endif()
 
 # Chapter 2
-add_subdirectory("201_Normals")
-add_subdirectory("202_GaussianCurvature")
-add_subdirectory("203_CurvatureDirections")
-add_subdirectory("204_Gradient")
-add_subdirectory("205_Laplacian")
+if(TUTORIALS_CHAPTER2)
+  add_subdirectory("201_Normals")
+  add_subdirectory("202_GaussianCurvature")
+  add_subdirectory("203_CurvatureDirections")
+  add_subdirectory("204_Gradient")
+  add_subdirectory("205_Laplacian")
+endif()
 
 # Chapter 3
-add_subdirectory("301_Slice")
-add_subdirectory("302_Sort")
-add_subdirectory("303_LaplaceEquation")
-add_subdirectory("304_LinearEqualityConstraints")
-add_subdirectory("305_QuadraticProgramming")
-add_subdirectory("306_EigenDecomposition")
+if(TUTORIALS_CHAPTER3)
+  add_subdirectory("301_Slice")
+  add_subdirectory("302_Sort")
+  add_subdirectory("303_LaplaceEquation")
+  add_subdirectory("304_LinearEqualityConstraints")
+  add_subdirectory("305_QuadraticProgramming")
+  add_subdirectory("306_EigenDecomposition")
+endif()
 
 # Chapter 4
-add_subdirectory("401_BiharmonicDeformation")
-add_subdirectory("402_PolyharmonicDeformation")
-add_subdirectory("403_BoundedBiharmonicWeights")
-add_subdirectory("404_DualQuaternionSkinning")
-add_subdirectory("405_AsRigidAsPossible")
-add_subdirectory("406_FastAutomaticSkinningTransformations")
-add_subdirectory("407_BiharmonicCoordinates")
+if(TUTORIALS_CHAPTER4)
+  add_subdirectory("401_BiharmonicDeformation")
+  add_subdirectory("402_PolyharmonicDeformation")
+  add_subdirectory("403_BoundedBiharmonicWeights")
+  add_subdirectory("404_DualQuaternionSkinning")
+  add_subdirectory("405_AsRigidAsPossible")
+  add_subdirectory("406_FastAutomaticSkinningTransformations")
+  add_subdirectory("407_BiharmonicCoordinates")
+endif()
 
 # Chapter 5
-add_subdirectory("501_HarmonicParam")
-add_subdirectory("502_LSCMParam")
-add_subdirectory("503_ARAPParam")
-if(LIBCOMISO_FOUND)
-  add_subdirectory("504_NRosyDesign")
-  add_subdirectory("505_MIQ")
-  add_subdirectory("506_FrameField")
-endif(LIBCOMISO_FOUND)
-add_subdirectory("507_PolyVectorField")
-add_subdirectory("508_ConjugateField")
-add_subdirectory("509_Planarization")
-add_subdirectory("510_Integrable")
+if(TUTORIALS_CHAPTER5)
+  add_subdirectory("501_HarmonicParam")
+  add_subdirectory("502_LSCMParam")
+  add_subdirectory("503_ARAPParam")
+  if(LIBIGL_WITH_COMISO)
+    add_subdirectory("504_NRosyDesign")
+    add_subdirectory("505_MIQ")
+    add_subdirectory("506_FrameField")
+  endif()
+  add_subdirectory("507_PolyVectorField")
+  add_subdirectory("508_ConjugateField")
+  add_subdirectory("509_Planarization")
+  add_subdirectory("510_Integrable")
+endif()
 
 # Chapter 6
-if(TINYXML2_FOUND)
-  add_subdirectory("601_Serialization")
-endif(TINYXML2_FOUND)
-if(MATLAB_FOUND)
-  add_subdirectory("602_Matlab")
-endif(MATLAB_FOUND)
-add_subdirectory("604_Triangle")
-add_subdirectory("605_Tetgen")
-
-if (EMBREE_FOUND)
-  add_subdirectory("606_AmbientOcclusion")
-  add_subdirectory("607_Picking")
-endif (EMBREE_FOUND)
-
-if(LIM_FOUND)
-  add_subdirectory("608_LIM")
-endif(LIM_FOUND)
-if(CGAL_FOUND)
-  add_subdirectory("609_Boolean")
-  add_subdirectory("610_CSGTree")
+if(TUTORIALS_CHAPTER6)
+  if(LIBIGL_WITH_XML)
+    add_subdirectory("601_Serialization")
+  endif()
+  if(LIBIGL_WITH_MATLAB)
+    add_subdirectory("602_Matlab")
+  endif()
+  if(LIBIGL_WITH_TRIANGLE)
+    add_subdirectory("604_Triangle")
+  endif()
+  if(LIBIGL_WITH_TETGEN)
+    add_subdirectory("605_Tetgen")
+  endif()
+  if(LIBIGL_WITH_EMBREE)
+    add_subdirectory("606_AmbientOcclusion")
+    add_subdirectory("607_Picking")
+  endif()
+  if(LIBIGL_WITH_LIM)
+    add_subdirectory("608_LIM")
+  endif()
+  if(LIBIGL_WITH_CGAL)
+    add_subdirectory("609_Boolean")
+    add_subdirectory("610_CSGTree")
+  endif()
+endif()
+
+# Chapter 7
+if(TUTORIALS_CHAPTER7)
+  add_subdirectory("701_Statistics")
+  add_subdirectory("702_WindingNumber")
+  add_subdirectory("703_Decimation")
+  add_subdirectory("704_SignedDistance")
+  add_subdirectory("705_MarchingCubes")
 endif()
-add_subdirectory("701_Statistics")
-add_subdirectory("702_WindingNumber")
-add_subdirectory("703_Decimation")
-add_subdirectory("704_SignedDistance")
-add_subdirectory("705_MarchingCubes")