Browse Source

compile tutorial with namespace

Former-commit-id: 6643b9a67ceba8087f40b9cae9937538920e3487
Alec Jacobson 10 years ago
parent
commit
0640f41c49
49 changed files with 321 additions and 283 deletions
  1. 2 0
      include/igl/cgal/remesh_self_intersections.cpp
  2. 7 6
      include/igl/readOBJ.cpp
  3. 4 0
      include/igl/sort_angles.cpp
  4. 1 0
      include/igl/triangle_triangle_adjacency.cpp
  5. 1 1
      tutorial/102_DrawMesh/main.cpp
  6. 2 2
      tutorial/103_Events/main.cpp
  7. 1 1
      tutorial/104_Colors/main.cpp
  8. 1 1
      tutorial/105_Overlays/main.cpp
  9. 2 2
      tutorial/201_Normals/main.cpp
  10. 2 2
      tutorial/202_GaussianCurvature/main.cpp
  11. 9 9
      tutorial/203_CurvatureDirections/main.cpp
  12. 5 5
      tutorial/204_Gradient/main.cpp
  13. 7 7
      tutorial/205_Laplacian/main.cpp
  14. 2 2
      tutorial/301_Slice/main.cpp
  15. 4 4
      tutorial/302_Sort/main.cpp
  16. 1 1
      tutorial/303_LaplaceEquation/main.cpp
  17. 2 2
      tutorial/304_LinearEqualityConstraints/main.cpp
  18. 3 3
      tutorial/305_QuadraticProgramming/main.cpp
  19. 3 3
      tutorial/401_BiharmonicDeformation/main.cpp
  20. 3 3
      tutorial/402_PolyharmonicDeformation/main.cpp
  21. 6 6
      tutorial/403_BoundedBiharmonicWeights/main.cpp
  22. 3 3
      tutorial/404_DualQuaternionSkinning/main.cpp
  23. 4 4
      tutorial/405_AsRigidAsPossible/main.cpp
  24. 5 5
      tutorial/406_FastAutomaticSkinningTransformations/main.cpp
  25. 5 5
      tutorial/501_HarmonicParam/main.cpp
  26. 3 3
      tutorial/502_LSCMParam/main.cpp
  27. 6 6
      tutorial/503_ARAPParam/main.cpp
  28. 27 11
      tutorial/504_NRosyDesign/main.cpp
  29. 14 15
      tutorial/505_MIQ/main.cpp
  30. 18 16
      tutorial/506_FrameField/main.cpp
  31. 10 10
      tutorial/507_PolyVectorField/main.cpp
  32. 10 15
      tutorial/508_ConjugateField/main.cpp
  33. 9 9
      tutorial/509_Planarization/main.cpp
  34. 5 6
      tutorial/601_Serialization/main.cpp
  35. 11 11
      tutorial/602_Matlab/main.cpp
  36. 2 2
      tutorial/604_Triangle/main.cpp
  37. 3 3
      tutorial/605_Tetgen/main.cpp
  38. 10 10
      tutorial/606_AmbientOcclusion/main.cpp
  39. 13 10
      tutorial/607_Picking/main.cpp
  40. 12 11
      tutorial/608_LIM/main.cpp
  41. 0 4
      tutorial/609_Boolean/CMakeLists.txt
  42. 12 11
      tutorial/609_Boolean/main.cpp
  43. 12 10
      tutorial/701_Statistics/main.cpp
  44. 6 6
      tutorial/702_WindingNumber/main.cpp
  45. 4 4
      tutorial/703_Decimation/main.cpp
  46. 3 3
      tutorial/704_SignedDistance/main.cpp
  47. 7 0
      tutorial/CMakeLists.shared
  48. 3 0
      tutorial/CMakeLists.txt
  49. 36 30
      tutorial/cmake/FindLIBIGL.cmake

+ 2 - 0
include/igl/cgal/remesh_self_intersections.cpp

@@ -85,4 +85,6 @@ IGL_INLINE void igl::cgal::remesh_self_intersections(
 template void igl::cgal::remesh_self_intersections<Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<int, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<int, -1, -1, 0, -1, -1>, Eigen::Matrix<int, -1, -1, 0, -1, -1>, Eigen::Matrix<int, -1, 1, 0, -1, 1>, Eigen::Matrix<int, -1, 1, 0, -1, 1> >(Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> > const&, igl::cgal::RemeshSelfIntersectionsParam const&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> >&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> >&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> >&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> >&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> >&);
 template void igl::cgal::remesh_self_intersections<Eigen::Matrix<double, -1, 3, 0, -1, 3>, Eigen::Matrix<int, -1, 3, 0, -1, 3>, Eigen::Matrix<double, -1, 3, 0, -1, 3>, Eigen::Matrix<int, -1, 3, 0, -1, 3>, Eigen::Matrix<int, -1, 2, 0, -1, 2>, Eigen::Matrix<int, -1, 1, 0, -1, 1>, Eigen::Matrix<int, -1, 1, 0, -1, 1> >(Eigen::PlainObjectBase<Eigen::Matrix<double, -1, 3, 0, -1, 3> > const&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, 3, 0, -1, 3> > const&, igl::cgal::RemeshSelfIntersectionsParam const&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, 3, 0, -1, 3> >&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, 3, 0, -1, 3> >&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, 2, 0, -1, 2> >&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> >&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> >&);
 template void igl::cgal::remesh_self_intersections<Eigen::Matrix<double, -1, 3, 0, -1, 3>, Eigen::Matrix<int, -1, 3, 0, -1, 3>, Eigen::Matrix<double, -1, 3, 0, -1, 3>, Eigen::Matrix<int, -1, 3, 0, -1, 3>, Eigen::Matrix<int, -1, 2, 0, -1, 2>, Eigen::Matrix<long, -1, 1, 0, -1, 1>, Eigen::Matrix<int, -1, 1, 0, -1, 1> >(Eigen::PlainObjectBase<Eigen::Matrix<double, -1, 3, 0, -1, 3> > const&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, 3, 0, -1, 3> > const&, igl::cgal::RemeshSelfIntersectionsParam const&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, 3, 0, -1, 3> >&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, 3, 0, -1, 3> >&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, 2, 0, -1, 2> >&, Eigen::PlainObjectBase<Eigen::Matrix<long, -1, 1, 0, -1, 1> >&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> >&);
+template void igl::cgal::remesh_self_intersections<Eigen::Matrix<double, -1, 3, 0, -1, 3>, Eigen::Matrix<int, -1, 3, 0, -1, 3>, Eigen::Matrix<CGAL::Lazy_exact_nt<CGAL::Gmpq>, -1, 3, 0, -1, 3>, Eigen::Matrix<int, -1, 3, 0, -1, 3>, Eigen::Matrix<int, -1, 2, 0, -1, 2>, Eigen::Matrix<long, -1, 1, 0, -1, 1>, Eigen::Matrix<int, -1, 1, 0, -1, 1> >(Eigen::PlainObjectBase<Eigen::Matrix<double, -1, 3, 0, -1, 3> > const&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, 3, 0, -1, 3> > const&, igl::cgal::RemeshSelfIntersectionsParam const&, Eigen::PlainObjectBase<Eigen::Matrix<CGAL::Lazy_exact_nt<CGAL::Gmpq>, -1, 3, 0, -1, 3> >&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, 3, 0, -1, 3> >&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, 2, 0, -1, 2> >&, Eigen::PlainObjectBase<Eigen::Matrix<long, -1, 1, 0, -1, 1> >&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> >&);
+template void igl::cgal::remesh_self_intersections<Eigen::Matrix<double, -1, 3, 0, -1, 3>, Eigen::Matrix<int, -1, 3, 0, -1, 3>, Eigen::Matrix<CGAL::Lazy_exact_nt<CGAL::Gmpq>, -1, 3, 0, -1, 3>, Eigen::Matrix<int, -1, 3, 0, -1, 3>, Eigen::Matrix<int, -1, 2, 0, -1, 2>, Eigen::Matrix<int, -1, 1, 0, -1, 1>, Eigen::Matrix<int, -1, 1, 0, -1, 1> >(Eigen::PlainObjectBase<Eigen::Matrix<double, -1, 3, 0, -1, 3> > const&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, 3, 0, -1, 3> > const&, igl::cgal::RemeshSelfIntersectionsParam const&, Eigen::PlainObjectBase<Eigen::Matrix<CGAL::Lazy_exact_nt<CGAL::Gmpq>, -1, 3, 0, -1, 3> >&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, 3, 0, -1, 3> >&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, 2, 0, -1, 2> >&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> >&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> >&);
 #endif

+ 7 - 6
include/igl/readOBJ.cpp

@@ -218,12 +218,12 @@ IGL_INLINE bool igl::readOBJ(
 template <typename DerivedV, typename DerivedF, typename DerivedT>
 IGL_INLINE bool igl::readOBJ(
   const std::string str,
-  Eigen::PlainObjectBase<DerivedV>& V,
-  Eigen::PlainObjectBase<DerivedF>& F,
-  Eigen::PlainObjectBase<DerivedV>& CN,
-  Eigen::PlainObjectBase<DerivedF>& FN,
-  Eigen::PlainObjectBase<DerivedT>& TC,
-  Eigen::PlainObjectBase<DerivedF>& FTC)
+    Eigen::PlainObjectBase<DerivedV>& V,
+    Eigen::PlainObjectBase<DerivedT>& TC,
+    Eigen::PlainObjectBase<DerivedV>& CN,
+    Eigen::PlainObjectBase<DerivedF>& F,
+    Eigen::PlainObjectBase<DerivedF>& FTC,
+    Eigen::PlainObjectBase<DerivedF>& FN)
 {
   std::vector<std::vector<double> > vV,vTC,vN;
   std::vector<std::vector<int> > vF,vFTC,vFN;
@@ -324,4 +324,5 @@ IGL_INLINE bool igl::readOBJ(
 // generated by autoexplicit.sh
 template bool igl::readOBJ<Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<int, -1, -1, 0, -1, -1> >(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> >&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> >&);
 template bool igl::readOBJ<Eigen::Matrix<double, -1, 3, 0, -1, 3>, Eigen::Matrix<int, -1, 3, 0, -1, 3> >(std::string, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, 3, 0, -1, 3> >&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, 3, 0, -1, 3> >&);
+template bool igl::readOBJ<Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<int, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1> >(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> >&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> >&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> >&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> >&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> >&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> >&);
 #endif

+ 4 - 0
include/igl/sort_angles.cpp

@@ -97,3 +97,7 @@ IGL_INLINE void igl::sort_angles(
     };
     std::sort(R.data(), R.data() + num_rows, comp);
 }
+
+#ifdef IGL_STATIC_LIBRARY
+template void igl::sort_angles<Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<int, -1, 1, 0, -1, 1> >(Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> >&);
+#endif

+ 1 - 0
include/igl/triangle_triangle_adjacency.cpp

@@ -240,4 +240,5 @@ template void igl::triangle_triangle_adjacency<Eigen::Matrix<double, -1, -1, 0,
 template void igl::triangle_triangle_adjacency<Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<int, -1, -1, 0, -1, -1> >(Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> > const&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> >&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> >&);
 template void igl::triangle_triangle_adjacency<Eigen::Matrix<double, -1, 3, 0, -1, 3>, Eigen::Matrix<int, -1, 3, 0, -1, 3> >(Eigen::PlainObjectBase<Eigen::Matrix<double, -1, 3, 0, -1, 3> > const&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, 3, 0, -1, 3> > const&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, 3, 0, -1, 3> >&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, 3, 0, -1, 3> >&);
 template void igl::triangle_triangle_adjacency<Eigen::Matrix<int, -1, -1, 0, -1, -1>, Eigen::Matrix<int, -1, -1, 0, -1, -1>, Eigen::Matrix<int, -1, -1, 0, -1, -1> >(Eigen::PlainObjectBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> > const&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> >&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> >&);
+template void igl::triangle_triangle_adjacency<Eigen::Matrix<int, -1, 2, 0, -1, 2>, Eigen::Matrix<long, -1, 1, 0, -1, 1>, long, long, long>(Eigen::PlainObjectBase<Eigen::Matrix<int, -1, 2, 0, -1, 2> > const&, Eigen::PlainObjectBase<Eigen::Matrix<long, -1, 1, 0, -1, 1> > const&, std::vector<std::vector<long, std::allocator<long> >, std::allocator<std::vector<long, std::allocator<long> > > > const&, bool, std::vector<std::vector<std::vector<long, std::allocator<long> >, std::allocator<std::vector<long, std::allocator<long> > > >, std::allocator<std::vector<std::vector<long, std::allocator<long> >, std::allocator<std::vector<long, std::allocator<long> > > > > >&, std::vector<std::vector<std::vector<long, std::allocator<long> >, std::allocator<std::vector<long, std::allocator<long> > > >, std::allocator<std::vector<std::vector<long, std::allocator<long> >, std::allocator<std::vector<long, std::allocator<long> > > > > >&);
 #endif

+ 1 - 1
tutorial/102_DrawMesh/main.cpp

@@ -10,7 +10,7 @@ int main(int argc, char *argv[])
   igl::readOFF("../shared/bunny.off", V, F);
 
   // Plot the mesh
-  igl::Viewer viewer;
+  igl::viewer::Viewer viewer;
   viewer.data.set_mesh(V, F);
   viewer.launch();
 }

+ 2 - 2
tutorial/103_Events/main.cpp

@@ -5,7 +5,7 @@ Eigen::MatrixXd V1,V2;
 Eigen::MatrixXi F1,F2;
 
 // This function is called every time a keyboard button is pressed
-bool key_down(igl::Viewer& viewer, unsigned char key, int modifier)
+bool key_down(igl::viewer::Viewer& viewer, unsigned char key, int modifier)
 {
   if (key == '1')
   {
@@ -34,7 +34,7 @@ int main(int argc, char *argv[])
   igl::readOFF("../shared/bumpy.off", V1, F1);
   igl::readOFF("../shared/fertility.off", V2, F2);
 
-  igl::Viewer viewer;
+  igl::viewer::Viewer viewer;
   // Register a keyboard callback that allows to switch between
   // the two loaded meshes
   viewer.callback_key_down = &key_down;

+ 1 - 1
tutorial/104_Colors/main.cpp

@@ -12,7 +12,7 @@ int main(int argc, char *argv[])
   igl::readOFF("../shared/screwdriver.off", V, F);
 
   // Plot the mesh
-  igl::Viewer viewer;
+  igl::viewer::Viewer viewer;
   viewer.data.set_mesh(V, F);
 
   // Use the z coordinate as a scalar field over the surface

+ 1 - 1
tutorial/105_Overlays/main.cpp

@@ -43,7 +43,7 @@ int main(int argc, char *argv[])
   7 ,3;
 
   // Plot the mesh
-  igl::Viewer viewer;
+  igl::viewer::Viewer viewer;
   viewer.data.set_mesh(V, F);
 
   // Plot the corners of the bounding box as points

+ 2 - 2
tutorial/201_Normals/main.cpp

@@ -14,7 +14,7 @@ Eigen::MatrixXd N_corners;
 
 
 // This function is called every time a keyboard button is pressed
-bool key_down(igl::Viewer& viewer, unsigned char key, int modifier)
+bool key_down(igl::viewer::Viewer& viewer, unsigned char key, int modifier)
 {
   switch(key)
   {
@@ -47,7 +47,7 @@ int main(int argc, char *argv[])
   igl::per_corner_normals(V,F,20,N_corners);
 
   // Plot the mesh
-  igl::Viewer viewer;
+  igl::viewer::Viewer viewer;
   viewer.callback_key_down = &key_down;
   viewer.core.show_lines = false;
   viewer.data.set_mesh(V, F);

+ 2 - 2
tutorial/202_GaussianCurvature/main.cpp

@@ -1,6 +1,6 @@
+#include <igl/gaussian_curvature.h>
 #include <igl/readOFF.h>
 #include <igl/viewer/Viewer.h>
-#include <igl/gaussian_curvature.h>
 #include <igl/jet.h>
 
 int main(int argc, char *argv[])
@@ -19,7 +19,7 @@ int main(int argc, char *argv[])
   igl::jet(K,true,C);
 
   // Plot the mesh with pseudocolors
-  igl::Viewer viewer;
+  igl::viewer::Viewer viewer;
   viewer.data.set_mesh(V, F);
   viewer.data.set_colors(C);
   viewer.launch();

+ 9 - 9
tutorial/203_CurvatureDirections/main.cpp

@@ -1,14 +1,14 @@
-#include <igl/read_triangle_mesh.h>
-#include <igl/viewer/Viewer.h>
-#include <igl/per_vertex_normals.h>
-#include <igl/per_face_normals.h>
-#include <igl/per_corner_normals.h>
 #include <igl/avg_edge_length.h>
-#include <igl/principal_curvature.h>
-#include <igl/parula.h>
 #include <igl/cotmatrix.h>
-#include <igl/massmatrix.h>
 #include <igl/invert_diag.h>
+#include <igl/massmatrix.h>
+#include <igl/parula.h>
+#include <igl/per_corner_normals.h>
+#include <igl/per_face_normals.h>
+#include <igl/per_vertex_normals.h>
+#include <igl/principal_curvature.h>
+#include <igl/read_triangle_mesh.h>
+#include <igl/viewer/Viewer.h>
 
 Eigen::MatrixXd V;
 Eigen::MatrixXi F;
@@ -42,7 +42,7 @@ int main(int argc, char *argv[])
   // mean curvature
   H = 0.5*(PV1+PV2);
 
-  igl::Viewer viewer;
+  igl::viewer::Viewer viewer;
   viewer.data.set_mesh(V, F);
 
 

+ 5 - 5
tutorial/204_Gradient/main.cpp

@@ -1,9 +1,9 @@
-#include <igl/readOFF.h>
-#include <igl/readDMAT.h>
-#include <igl/grad.h>
 #include <igl/avg_edge_length.h>
-#include <igl/jet.h>
 #include <igl/barycenter.h>
+#include <igl/grad.h>
+#include <igl/jet.h>
+#include <igl/readDMAT.h>
+#include <igl/readOFF.h>
 #include <igl/viewer/Viewer.h>
 
 #include <iostream>
@@ -31,7 +31,7 @@ int main(int argc, char *argv[])
   // Compute gradient magnitude
   const VectorXd GU_mag = GU.rowwise().norm();
 
-  igl::Viewer viewer;
+  igl::viewer::Viewer viewer;
   viewer.data.set_mesh(V, F);
 
   // Compute pseudocolor for original function

+ 7 - 7
tutorial/205_Laplacian/main.cpp

@@ -1,13 +1,13 @@
-#include <igl/readOFF.h>
-#include <igl/readDMAT.h>
 #include <igl/barycenter.h>
 #include <igl/cotmatrix.h>
-#include <igl/massmatrix.h>
-#include <igl/grad.h>
 #include <igl/doublearea.h>
-#include <igl/repdiag.h>
+#include <igl/grad.h>
 #include <igl/jet.h>
+#include <igl/massmatrix.h>
 #include <igl/per_vertex_normals.h>
+#include <igl/readDMAT.h>
+#include <igl/readOFF.h>
+#include <igl/repdiag.h>
 #include <igl/viewer/Viewer.h>
 
 #include <iostream>
@@ -15,7 +15,7 @@
 Eigen::MatrixXd V,U;
 Eigen::MatrixXi F;
 Eigen::SparseMatrix<double> L;
-igl::Viewer viewer;
+igl::viewer::Viewer viewer;
 
 int main(int argc, char *argv[])
 {
@@ -42,7 +42,7 @@ int main(int argc, char *argv[])
   K = -G.transpose() * T * G;
   cout<<"|K-L|: "<<(K-L).norm()<<endl;
 
-  const auto &key_down = [](igl::Viewer &viewer,unsigned char key,int mod)->bool
+  const auto &key_down = [](igl::viewer::Viewer &viewer,unsigned char key,int mod)->bool
   {
     switch(key)
     {

+ 2 - 2
tutorial/301_Slice/main.cpp

@@ -1,6 +1,6 @@
+#include <igl/floor.h>
 #include <igl/readOFF.h>
 #include <igl/slice.h>
-#include <igl/floor.h>
 #include <igl/slice_into.h>
 #include <igl/viewer/Viewer.h>
 #include <iostream>
@@ -33,7 +33,7 @@ int main(int argc, char *argv[])
   igl::slice_into(R,K,1,C);
 
   // Plot the mesh with pseudocolors
-  igl::Viewer viewer;
+  igl::viewer::Viewer viewer;
   viewer.data.set_mesh(V, F);
   viewer.data.set_colors(C);
   viewer.launch();

+ 4 - 4
tutorial/302_Sort/main.cpp

@@ -1,9 +1,9 @@
+#include <igl/barycenter.h>
+#include <igl/colon.h>
+#include <igl/jet.h>
 #include <igl/readOFF.h>
 #include <igl/slice_into.h>
-#include <igl/colon.h>
 #include <igl/sortrows.h>
-#include <igl/barycenter.h>
-#include <igl/jet.h>
 #include <igl/viewer/Viewer.h>
 #include <iostream>
 
@@ -31,7 +31,7 @@ int main(int argc, char *argv[])
   igl::jet(J,true,C);
 
   // Plot the mesh with pseudocolors
-  igl::Viewer viewer;
+  igl::viewer::Viewer viewer;
   viewer.data.set_mesh(V, F);
   viewer.data.set_colors(C);
   viewer.launch();

+ 1 - 1
tutorial/303_LaplaceEquation/main.cpp

@@ -63,7 +63,7 @@ int main(int argc, char *argv[])
   igl::jet(Z,true,C);
 
   // Plot the mesh with pseudocolors
-  igl::Viewer viewer;
+  igl::viewer::Viewer viewer;
   viewer.data.set_mesh(V, F);
   viewer.core.show_lines = false;
   viewer.data.set_colors(C);

+ 2 - 2
tutorial/304_LinearEqualityConstraints/main.cpp

@@ -70,13 +70,13 @@ int main(int argc, char *argv[])
   igl::jet(Z_const,min_z,max_z,data.C_const);
 
   // Plot the mesh with pseudocolors
-  igl::Viewer viewer;
+  igl::viewer::Viewer viewer;
   viewer.data.set_mesh(V, F);
   viewer.core.show_lines = false;
   viewer.data.set_colors(data.C);
 
   viewer.callback_key_down = 
-    [](igl::Viewer& viewer,unsigned char key,int mod)->bool
+    [](igl::viewer::Viewer& viewer,unsigned char key,int mod)->bool
     {
       if(key == ' ')
       {

+ 3 - 3
tutorial/305_QuadraticProgramming/main.cpp

@@ -14,7 +14,7 @@ Eigen::VectorXi b;
 Eigen::VectorXd B,bc,lx,ux,Beq,Bieq,Z;
 Eigen::SparseMatrix<double> Q,Aeq,Aieq;
 
-void solve(igl::Viewer &viewer)
+void solve(igl::viewer::Viewer &viewer)
 {
   using namespace std;
   igl::active_set_params as;
@@ -26,7 +26,7 @@ void solve(igl::Viewer &viewer)
   viewer.data.set_colors(C);
 }
 
-bool key_down(igl::Viewer &viewer, unsigned char key, int mod)
+bool key_down(igl::viewer::Viewer &viewer, unsigned char key, int mod)
 {
   switch(key)
   {
@@ -56,7 +56,7 @@ int main(int argc, char *argv[])
   igl::readOFF("../shared/cheburashka.off",V,F);
 
   // Plot the mesh
-  igl::Viewer viewer;
+  igl::viewer::Viewer viewer;
   viewer.data.set_mesh(V, F);
   viewer.core.show_lines = false;
   viewer.callback_key_down = &key_down;

+ 3 - 3
tutorial/401_BiharmonicDeformation/main.cpp

@@ -14,7 +14,7 @@ Eigen::VectorXd Z;
 Eigen::MatrixXi F;
 Eigen::VectorXi b;
 
-bool pre_draw(igl::Viewer & viewer)
+bool pre_draw(igl::viewer::Viewer & viewer)
 {
   using namespace Eigen;
   // Determine boundary conditions
@@ -40,7 +40,7 @@ bool pre_draw(igl::Viewer & viewer)
   return false;
 }
 
-bool key_down(igl::Viewer &viewer, unsigned char key, int mods)
+bool key_down(igl::viewer::Viewer &viewer, unsigned char key, int mods)
 {
   switch(key)
   {
@@ -108,7 +108,7 @@ int main(int argc, char *argv[])
   }
 
   // Plot the mesh with pseudocolors
-  igl::Viewer viewer;
+  igl::viewer::Viewer viewer;
   viewer.data.set_mesh(U, F);
   viewer.core.show_lines = false;
   viewer.data.set_colors(C);

+ 3 - 3
tutorial/402_PolyharmonicDeformation/main.cpp

@@ -15,7 +15,7 @@ Eigen::MatrixXi F;
 Eigen::VectorXi b;
 Eigen::VectorXd bc;
 
-bool pre_draw(igl::Viewer & viewer)
+bool pre_draw(igl::viewer::Viewer & viewer)
 {
   using namespace Eigen;
   if(resolve)
@@ -34,7 +34,7 @@ bool pre_draw(igl::Viewer & viewer)
   return false;
 }
 
-bool key_down(igl::Viewer &viewer, unsigned char key, int mods)
+bool key_down(igl::viewer::Viewer &viewer, unsigned char key, int mods)
 {
   switch(key)
   {
@@ -92,7 +92,7 @@ int main(int argc, char *argv[])
   }
 
   // Plot the mesh with pseudocolors
-  igl::Viewer viewer;
+  igl::viewer::Viewer viewer;
   viewer.data.set_mesh(U, F);
   viewer.core.show_lines = false;
   viewer.data.set_colors(C);

+ 6 - 6
tutorial/403_BoundedBiharmonicWeights/main.cpp

@@ -43,7 +43,7 @@ RotationList pose;
 double anim_t = 1.0;
 double anim_t_dir = -0.03;
 
-bool pre_draw(igl::Viewer & viewer)
+bool pre_draw(igl::viewer::Viewer & viewer)
 {
   using namespace Eigen;
   using namespace std;
@@ -86,14 +86,14 @@ bool pre_draw(igl::Viewer & viewer)
   return false;
 }
 
-void set_color(igl::Viewer &viewer)
+void set_color(igl::viewer::Viewer &viewer)
 {
   Eigen::MatrixXd C;
   igl::jet(W.col(selected).eval(),true,C);
   viewer.data.set_colors(C);
 }
 
-bool key_down(igl::Viewer &viewer, unsigned char key, int mods)
+bool key_down(igl::viewer::Viewer &viewer, unsigned char key, int mods)
 {
   switch(key)
   {
@@ -137,11 +137,11 @@ int main(int argc, char *argv[])
   igl::boundary_conditions(V,T,C,VectorXi(),BE,MatrixXi(),b,bc);
 
   // compute BBW weights matrix
-  igl::BBWData bbw_data;
+  igl::bbw::BBWData bbw_data;
   // only a few iterations for sake of demo
   bbw_data.active_set_params.max_iter = 8;
   bbw_data.verbosity = 2;
-  if(!igl::bbw(V,T,b,bc,bbw_data,W))
+  if(!igl::bbw::bbw(V,T,b,bc,bbw_data,W))
   {
     return false;
   }
@@ -161,7 +161,7 @@ int main(int argc, char *argv[])
   igl::lbs_matrix(V,W,M);
 
   // Plot the mesh with pseudocolors
-  igl::Viewer viewer;
+  igl::viewer::Viewer viewer;
   viewer.data.set_mesh(U, F);
   set_color(viewer);
   viewer.data.set_edges(C,BE,sea_green);

+ 3 - 3
tutorial/404_DualQuaternionSkinning/main.cpp

@@ -30,7 +30,7 @@ double anim_t_dir = 0.015;
 bool use_dqs = false;
 bool recompute = true;
 
-bool pre_draw(igl::Viewer & viewer)
+bool pre_draw(igl::viewer::Viewer & viewer)
 {
   using namespace Eigen;
   using namespace std;
@@ -90,7 +90,7 @@ bool pre_draw(igl::Viewer & viewer)
   return false;
 }
 
-bool key_down(igl::Viewer &viewer, unsigned char key, int mods)
+bool key_down(igl::viewer::Viewer &viewer, unsigned char key, int mods)
 {
   recompute = true;
   switch(key)
@@ -128,7 +128,7 @@ int main(int argc, char *argv[])
   igl::lbs_matrix(V,W,M);
 
   // Plot the mesh with pseudocolors
-  igl::Viewer viewer;
+  igl::viewer::Viewer viewer;
   viewer.data.set_mesh(U, F);
   viewer.data.set_edges(C,BE,sea_green);
   viewer.core.show_lines = false;

+ 4 - 4
tutorial/405_AsRigidAsPossible/main.cpp

@@ -8,7 +8,7 @@
 #include <igl/dqs.h>
 #include <igl/readDMAT.h>
 #include <igl/readOFF.h>
-#include <igl/svd3x3/arap.h>
+#include <igl/arap.h>
 #include <igl/viewer/Viewer.h>
 
 #include <Eigen/Geometry>
@@ -30,7 +30,7 @@ double anim_t = 0.0;
 double anim_t_dir = 0.03;
 igl::ARAPData arap_data;
 
-bool pre_draw(igl::Viewer & viewer)
+bool pre_draw(igl::viewer::Viewer & viewer)
 {
   using namespace Eigen;
   using namespace std;
@@ -75,7 +75,7 @@ bool pre_draw(igl::Viewer & viewer)
   return false;
 }
 
-bool key_down(igl::Viewer &viewer, unsigned char key, int mods)
+bool key_down(igl::viewer::Viewer &viewer, unsigned char key, int mods)
 {
   switch(key)
   {
@@ -120,7 +120,7 @@ int main(int argc, char *argv[])
   }
 
   // Plot the mesh with pseudocolors
-  igl::Viewer viewer;
+  igl::viewer::Viewer viewer;
   viewer.data.set_mesh(U, F);
   viewer.data.set_colors(C);
   viewer.callback_pre_draw = &pre_draw;

+ 5 - 5
tutorial/406_FastAutomaticSkinningTransformations/main.cpp

@@ -13,8 +13,8 @@
 #include <igl/columnize.h>
 #include <igl/readDMAT.h>
 #include <igl/readOBJ.h>
-#include <igl/svd3x3/arap.h>
-#include <igl/svd3x3/arap_dof.h>
+#include <igl/arap.h>
+#include <igl/arap_dof.h>
 #include <igl/viewer/Viewer.h>
 
 #include <Eigen/Geometry>
@@ -49,7 +49,7 @@ enum ModeType
   NUM_MODE_TYPES = 4
 } mode = MODE_TYPE_ARAP;
 
-bool pre_draw(igl::Viewer & viewer)
+bool pre_draw(igl::viewer::Viewer & viewer)
 {
   using namespace Eigen;
   using namespace std;
@@ -111,7 +111,7 @@ bool pre_draw(igl::Viewer & viewer)
   return false;
 }
 
-bool key_down(igl::Viewer &viewer, unsigned char key, int mods)
+bool key_down(igl::viewer::Viewer &viewer, unsigned char key, int mods)
 {
   switch(key)
   {
@@ -202,7 +202,7 @@ int main(int argc, char *argv[])
   bbd = (V.colwise().maxCoeff()- V.colwise().minCoeff()).norm();
 
   // Plot the mesh with pseudocolors
-  igl::Viewer viewer;
+  igl::viewer::Viewer viewer;
   viewer.data.set_mesh(U, F);
   viewer.data.add_points(igl::slice(V,b,1),sea_green);
   viewer.core.show_lines = false;

+ 5 - 5
tutorial/501_HarmonicParam/main.cpp

@@ -1,14 +1,14 @@
-#include <igl/readOFF.h>
-#include <igl/viewer/Viewer.h>
 #include <igl/boundary_loop.h>
-#include <igl/map_vertices_to_circle.h>
 #include <igl/harmonic.h>
+#include <igl/map_vertices_to_circle.h>
+#include <igl/readOFF.h>
+#include <igl/viewer/Viewer.h>
 
 Eigen::MatrixXd V;
 Eigen::MatrixXi F;
 Eigen::MatrixXd V_uv;
 
-bool key_down(igl::Viewer& viewer, unsigned char key, int modifier)
+bool key_down(igl::viewer::Viewer& viewer, unsigned char key, int modifier)
 {
   if (key == '1')
   {
@@ -48,7 +48,7 @@ int main(int argc, char *argv[])
   V_uv *= 5;
 
   // Plot the mesh
-  igl::Viewer viewer;
+  igl::viewer::Viewer viewer;
   viewer.data.set_mesh(V, F);
   viewer.data.set_uv(V_uv);
   viewer.callback_key_down = &key_down;

+ 3 - 3
tutorial/502_LSCMParam/main.cpp

@@ -1,6 +1,6 @@
+#include <igl/boundary_loop.h>
 #include <igl/readOFF.h>
 #include <igl/viewer/Viewer.h>
-#include <igl/boundary_loop.h>
 
 #include <igl/lscm.h>
 
@@ -8,7 +8,7 @@ Eigen::MatrixXd V;
 Eigen::MatrixXi F;
 Eigen::MatrixXd V_uv;
 
-bool key_down(igl::Viewer& viewer, unsigned char key, int modifier)
+bool key_down(igl::viewer::Viewer& viewer, unsigned char key, int modifier)
 {
 
   if (key == '1')
@@ -52,7 +52,7 @@ int main(int argc, char *argv[])
   V_uv *= 5;
 
   // Plot the mesh
-  igl::Viewer viewer;
+  igl::viewer::Viewer viewer;
   viewer.data.set_mesh(V, F);
   viewer.data.set_uv(V_uv);
   viewer.callback_key_down = &key_down;

+ 6 - 6
tutorial/503_ARAPParam/main.cpp

@@ -1,9 +1,9 @@
-#include <igl/readOFF.h>
-#include <igl/viewer/Viewer.h>
+#include <igl/arap.h>
 #include <igl/boundary_loop.h>
-#include <igl/map_vertices_to_circle.h>
 #include <igl/harmonic.h>
-#include <igl/svd3x3/arap.h>
+#include <igl/map_vertices_to_circle.h>
+#include <igl/readOFF.h>
+#include <igl/viewer/Viewer.h>
 
 Eigen::MatrixXd V;
 Eigen::MatrixXi F;
@@ -12,7 +12,7 @@ Eigen::MatrixXd initial_guess;
 
 bool show_uv = false;
 
-bool key_down(igl::Viewer& viewer, unsigned char key, int modifier)
+bool key_down(igl::viewer::Viewer& viewer, unsigned char key, int modifier)
 {
   if (key == '1')
     show_uv = false;
@@ -74,7 +74,7 @@ int main(int argc, char *argv[])
   V_uv *= 20;
 
   // Plot the mesh
-  igl::Viewer viewer;
+  igl::viewer::Viewer viewer;
   viewer.data.set_mesh(V, F);
   viewer.data.set_uv(V_uv);
   viewer.callback_key_down = &key_down;

+ 27 - 11
tutorial/504_NRosyDesign/main.cpp

@@ -1,12 +1,10 @@
-#include <igl/readOFF.h>
-#include <igl/viewer/Viewer.h>
-#include <igl/local_basis.h>
-#include <igl/barycenter.h>
 #include <igl/avg_edge_length.h>
+#include <igl/barycenter.h>
+#include <igl/local_basis.h>
+#include <igl/readOFF.h>
 #include <igl/comiso/nrosy.h>
+#include <igl/viewer/Viewer.h>
 
-using namespace Eigen;
-using namespace std;
 
 // Mesh
 Eigen::MatrixXd V;
@@ -23,8 +21,15 @@ int N = 4;
 
 // Converts a representative vector per face in the full set of vectors that describe
 // an N-RoSy field
-void representative_to_nrosy(const MatrixXd& V, const MatrixXi& F, const MatrixXd& R, const int N, MatrixXd& Y)
+void representative_to_nrosy(
+  const Eigen::MatrixXd& V, 
+  const Eigen::MatrixXi& F, 
+  const Eigen::MatrixXd& R, 
+  const int N, 
+  Eigen::MatrixXd& Y)
 {
+  using namespace Eigen;
+  using namespace std;
   MatrixXd B1, B2, B3;
 
   igl::local_basis(V,F,B1,B2,B3);
@@ -48,8 +53,17 @@ void representative_to_nrosy(const MatrixXd& V, const MatrixXi& F, const MatrixX
 
 // Plots the mesh with an N-RoSy field and its singularities on top
 // The constrained faces (b) are colored in red.
-void plot_mesh_nrosy(igl::Viewer& viewer, MatrixXd& V, MatrixXi& F, int N, MatrixXd& PD1, VectorXd& S, VectorXi& b)
+void plot_mesh_nrosy(
+  igl::viewer::Viewer& viewer, 
+  Eigen::MatrixXd& V, 
+  Eigen::MatrixXi& F, 
+  int N, 
+  Eigen::MatrixXd& PD1, 
+  Eigen::VectorXd& S, 
+  Eigen::VectorXi& b)
 {
+  using namespace Eigen;
+  using namespace std;
   // Clear the mesh
   viewer.data.clear();
   viewer.data.set_mesh(V,F);
@@ -86,15 +100,17 @@ void plot_mesh_nrosy(igl::Viewer& viewer, MatrixXd& V, MatrixXi& F, int N, Matri
 }
 
   // It allows to change the degree of the field when a number is pressed
-bool key_down(igl::Viewer& viewer, unsigned char key, int modifier)
+bool key_down(igl::viewer::Viewer& viewer, unsigned char key, int modifier)
 {
+  using namespace Eigen;
+  using namespace std;
   if (key >= '1' && key <= '9')
     N = key - '0';
 
   MatrixXd R;
   VectorXd S;
 
-  igl::nrosy(V,F,b,bc,VectorXi(),VectorXd(),MatrixXd(),N,0.5,R,S);
+  igl::comiso::nrosy(V,F,b,bc,VectorXi(),VectorXd(),MatrixXd(),N,0.5,R,S);
   plot_mesh_nrosy(viewer,V,F,N,R,S,b);
 
   return false;
@@ -114,7 +130,7 @@ int main(int argc, char *argv[])
   bc.resize(1,3);
   bc << 1,1,1;
 
-  igl::Viewer viewer;
+  igl::viewer::Viewer viewer;
 
   // Interpolate the field and plot
   key_down(viewer, '4', 0);

+ 14 - 15
tutorial/505_MIQ/main.cpp

@@ -1,19 +1,18 @@
-#include <igl/readOFF.h>
-#include <igl/viewer/Viewer.h>
-#include <igl/comiso/miq.h>
-#include <igl/barycenter.h>
 #include <igl/avg_edge_length.h>
-#include <igl/comiso/nrosy.h>
-#include <sstream>
-#include <igl/rotate_vectors.h>
-#include <igl/local_basis.h>
-#include <igl/compute_frame_field_bisectors.h>
+#include <igl/barycenter.h>
 #include <igl/comb_cross_field.h>
+#include <igl/comb_frame_field.h>
+#include <igl/comiso/miq.h>
+#include <igl/compute_frame_field_bisectors.h>
 #include <igl/cross_field_missmatch.h>
-#include <igl/find_cross_field_singularities.h>
 #include <igl/cut_mesh_from_singularities.h>
-#include <igl/comb_frame_field.h>
-#include <igl/comb_cross_field.h>
+#include <igl/find_cross_field_singularities.h>
+#include <igl/local_basis.h>
+#include <igl/readOFF.h>
+#include <igl/rotate_vectors.h>
+#include <igl/comiso/nrosy.h>
+#include <igl/viewer/Viewer.h>
+#include <sstream>
 
 // Input mesh
 Eigen::MatrixXd V;
@@ -77,7 +76,7 @@ void line_texture(Eigen::Matrix<unsigned char,Eigen::Dynamic,Eigen::Dynamic> &te
     texture_B = texture_R;
   }
 
-bool key_down(igl::Viewer& viewer, unsigned char key, int modifier)
+bool key_down(igl::viewer::Viewer& viewer, unsigned char key, int modifier)
 {
   if (key == 'E')
   {
@@ -247,7 +246,7 @@ int main(int argc, char *argv[])
 
   // Create a smooth 4-RoSy field
   VectorXd S;
-  igl::nrosy(V,F,b,bc,VectorXi(),VectorXd(),MatrixXd(),4,0.5,X1,S);
+  igl::comiso::nrosy(V,F,b,bc,VectorXi(),VectorXd(),MatrixXd(),4,0.5,X1,S);
 
   // Find the the orthogonal vector
   MatrixXd B1,B2,B3;
@@ -312,7 +311,7 @@ igl::miq(V,
          false);
 
   // Plot the mesh
-  igl::Viewer viewer;
+  igl::viewer::Viewer viewer;
 
   // Plot the original mesh with a texture parametrization
   key_down(viewer,'7',0);

+ 18 - 16
tutorial/506_FrameField/main.cpp

@@ -1,16 +1,16 @@
-#include <igl/readOBJ.h>
-#include <igl/readDMAT.h>
-#include <igl/viewer/Viewer.h>
-#include <igl/barycenter.h>
 #include <igl/avg_edge_length.h>
-#include <igl/comiso/nrosy.h>
-#include <igl/comiso/miq.h>
-#include <igl/comiso/frame_field.h>
+#include <igl/barycenter.h>
 #include <igl/frame_field_deformer.h>
-#include <igl/jet.h>
 #include <igl/frame_to_cross_field.h>
+#include <igl/jet.h>
 #include <igl/local_basis.h>
+#include <igl/readDMAT.h>
+#include <igl/readOBJ.h>
 #include <igl/rotate_vectors.h>
+#include <igl/comiso/nrosy.h>
+#include <igl/comiso/miq.h>
+#include <igl/comiso/frame_field.h>
+#include <igl/viewer/Viewer.h>
 
 // Input mesh
 Eigen::MatrixXd V;
@@ -66,7 +66,7 @@ void line_texture(Eigen::Matrix<unsigned char,Eigen::Dynamic,Eigen::Dynamic> &te
   texture_B = texture_R;
 }
 
-bool key_down(igl::Viewer& viewer, unsigned char key, int modifier)
+bool key_down(igl::viewer::Viewer& viewer, unsigned char key, int modifier)
 {
   using namespace std;
   using namespace Eigen;
@@ -194,16 +194,17 @@ int main(int argc, char *argv[])
   bc2 = temp.block(0,4,temp.rows(),3);
 
   // Interpolate the frame field
-  igl::frame_field(V, F, b, bc1, bc2, FF1, FF2);
+  igl::comiso::frame_field(V, F, b, bc1, bc2, FF1, FF2);
 
   // Deform the mesh to transform the frame field in a cross field
-  igl::frame_field_deformer(V,F,FF1,FF2,V_deformed,FF1_deformed,FF2_deformed);
+  igl::comiso::frame_field_deformer(
+    V,F,FF1,FF2,V_deformed,FF1_deformed,FF2_deformed);
 
   // Compute face barycenters deformed mesh
   igl::barycenter(V_deformed, F, B_deformed);
 
   // Find the closest crossfield to the deformed frame field
-igl::frame_to_cross_field(V_deformed,F,FF1_deformed,FF2_deformed,X1_deformed);
+  igl::frame_to_cross_field(V_deformed,F,FF1_deformed,FF2_deformed,X1_deformed);
 
   // Find a smooth crossfield that interpolates the deformed constraints
   MatrixXd bc_x(b.size(),3);
@@ -211,7 +212,7 @@ igl::frame_to_cross_field(V_deformed,F,FF1_deformed,FF2_deformed,X1_deformed);
     bc_x.row(i) = X1_deformed.row(b(i));
 
   VectorXd S;
-  igl::nrosy(
+  igl::comiso::nrosy(
              V,
              F,
              b,
@@ -227,10 +228,11 @@ igl::frame_to_cross_field(V_deformed,F,FF1_deformed,FF2_deformed,X1_deformed);
   // The other representative of the cross field is simply rotated by 90 degrees
   MatrixXd B1,B2,B3;
   igl::local_basis(V_deformed,F,B1,B2,B3);
-  X2_deformed = igl::rotate_vectors(X1_deformed, VectorXd::Constant(1,M_PI/2), B1, B2);
+  X2_deformed = 
+    igl::rotate_vectors(X1_deformed, VectorXd::Constant(1,M_PI/2), B1, B2);
 
   // Global seamless parametrization
-  igl::miq(V_deformed,
+  igl::comiso::miq(V_deformed,
            F,
            X1_deformed,
            X2_deformed,
@@ -241,7 +243,7 @@ igl::frame_to_cross_field(V_deformed,F,FF1_deformed,FF2_deformed,X1_deformed);
            false,
            2);
 
-  igl::Viewer viewer;
+  igl::viewer::Viewer viewer;
   // Plot the original mesh with a texture parametrization
   key_down(viewer,'6',0);
 

+ 10 - 10
tutorial/507_PolyVectorField/main.cpp

@@ -1,14 +1,14 @@
-#include <igl/readOBJ.h>
-#include <igl/readDMAT.h>
-#include <igl/viewer/Viewer.h>
-#include <igl/barycenter.h>
 #include <igl/avg_edge_length.h>
-#include <vector>
-#include <igl/n_polyvector.h>
-#include <igl/local_basis.h>
-#include <stdlib.h>
+#include <igl/barycenter.h>
 #include <igl/jet.h>
+#include <igl/local_basis.h>
+#include <igl/n_polyvector.h>
+#include <igl/readDMAT.h>
+#include <igl/readOBJ.h>
+#include <igl/viewer/Viewer.h>
+#include <cstdlib>
 #include <iostream>
+#include <vector>
 
 // Input mesh
 Eigen::MatrixXd V;
@@ -68,7 +68,7 @@ Eigen::VectorXd random_constraints(const
   return r;
 }
 
-bool key_down(igl::Viewer& viewer, unsigned char key, int modifier)
+bool key_down(igl::viewer::Viewer& viewer, unsigned char key, int modifier)
 {
   using namespace std;
   using namespace Eigen;
@@ -142,7 +142,7 @@ int main(int argc, char *argv[])
   // Make the example deterministic
   srand(0);
 
-  igl::Viewer viewer;
+  igl::viewer::Viewer viewer;
   viewer.data.set_mesh(V, F);
   viewer.callback_key_down = &key_down;
   viewer.core.show_lines = false;

+ 10 - 15
tutorial/508_ConjugateField/main.cpp

@@ -1,20 +1,15 @@
-#undef IGL_STATIC_LIBRARY
-#include <igl/readOBJ.h>
-#include <igl/readDMAT.h>
-#include <igl/writeDMAT.h>
-#include <igl/viewer/Viewer.h>
-#include <igl/barycenter.h>
 #include <igl/avg_edge_length.h>
-#include <vector>
-#include <igl/n_polyvector.h>
+#include <igl/barycenter.h>
 #include <igl/conjugate_frame_fields.h>
-#include <stdlib.h>
-#include <igl/readOFF.h>
-#include <igl/jet.h>
-#include <igl/quad_planarity.h>
-#include <igl/planarize_quad_mesh.h>
 #include <igl/dot_row.h>
+#include <igl/jet.h>
 #include <igl/local_basis.h>
+#include <igl/n_polyvector.h>
+#include <igl/readDMAT.h>
+#include <igl/readOBJ.h>
+#include <igl/viewer/Viewer.h>
+#include <vector>
+#include <cstdlib>
 
 
 // Input mesh
@@ -39,7 +34,7 @@ Eigen::VectorXd conjugacy_c;
 igl::ConjugateFFSolverData<Eigen::MatrixXd, Eigen::MatrixXi> *csdata;
 
 
-bool key_down(igl::Viewer& viewer, unsigned char key, int modifier)
+bool key_down(igl::viewer::Viewer& viewer, unsigned char key, int modifier)
 {
   using namespace std;
   using namespace Eigen;
@@ -179,7 +174,7 @@ int main(int argc, char *argv[])
   pvV << igl::dot_row(Vc,B1), igl::dot_row(Vc,B2);
   csdata->evaluateConjugacy(pvU, pvV, conjugacy_c);
   // Launch the viewer
-  igl::Viewer viewer;
+  igl::viewer::Viewer viewer;
   viewer.core.invert_normals = true;
   viewer.core.show_lines = false;
   viewer.core.show_texture = false;

+ 9 - 9
tutorial/509_Planarization/main.cpp

@@ -1,14 +1,14 @@
-#include <igl/readOFF.h>
-#include <igl/readDMAT.h>
-#include <igl/viewer/Viewer.h>
-#include <igl/barycenter.h>
 #include <igl/avg_edge_length.h>
-#include <vector>
-#include <stdlib.h>
+#include <igl/barycenter.h>
 #include <igl/jet.h>
-#include <igl/quad_planarity.h>
 #include <igl/planarize_quad_mesh.h>
+#include <igl/quad_planarity.h>
+#include <igl/readDMAT.h>
+#include <igl/readOFF.h>
 #include <igl/slice.h>
+#include <igl/viewer/Viewer.h>
+#include <vector>
+#include <cstdlib>
 
 // Quad mesh generated from conjugate field
 Eigen::MatrixXd VQC;
@@ -26,7 +26,7 @@ Eigen::MatrixXd PQC0plan, PQC1plan, PQC2plan, PQC3plan;
 double global_scale;
 
 
-bool key_down(igl::Viewer& viewer, unsigned char key, int modifier)
+bool key_down(igl::viewer::Viewer& viewer, unsigned char key, int modifier)
 {
   using namespace std;
   using namespace Eigen;
@@ -105,7 +105,7 @@ int main(int argc, char *argv[])
   igl::slice( VQCplan, FQC.col(3), 1, PQC3plan);
 
   // Launch the viewer
-  igl::Viewer viewer;
+  igl::viewer::Viewer viewer;
   key_down(viewer,'2',0);
   viewer.core.invert_normals = true;
   viewer.core.show_lines = false;

+ 5 - 6
tutorial/601_Serialization/main.cpp

@@ -1,8 +1,7 @@
 #include <igl/readOFF.h>
-#include <iostream>
-
 #include <igl/serialize.h>
 #include <igl/xml/serialize_xml.h>
+#include <iostream>
 
 Eigen::MatrixXd V;
 Eigen::MatrixXi F;
@@ -84,9 +83,9 @@ int main(int argc, char *argv[])
   // XML serialization
   
   // binary = false, overwrite = true
-  igl::serialize_xml(vec,"VectorXML",xmlFile,false,true);
+  igl::xml::serialize_xml(vec,"VectorXML",xmlFile,false,true);
   // binary = true, overwrite = false
-  igl::serialize_xml(vec,"VectorBin",xmlFile,true,false);
-  igl::deserialize_xml(vec,"VectorXML",xmlFile);
-  igl::deserialize_xml(vec,"VectorBin",xmlFile);
+  igl::xml::serialize_xml(vec,"VectorBin",xmlFile,true,false);
+  igl::xml::deserialize_xml(vec,"VectorXML",xmlFile);
+  igl::xml::deserialize_xml(vec,"VectorBin",xmlFile);
 }

+ 11 - 11
tutorial/602_Matlab/main.cpp

@@ -1,8 +1,8 @@
+#include <igl/jet.h>
 #include <igl/readOFF.h>
+#include <igl/cotmatrix.h>
 #include <igl/matlab/matlabinterface.h>
 #include <igl/viewer/Viewer.h>
-#include <igl/jet.h>
-#include <igl/cotmatrix.h>
 #include <iostream>
 
 // Base mesh
@@ -15,7 +15,7 @@ Engine* engine;
 // Eigenvectors of the laplacian
 Eigen::MatrixXd EV;
 
-void plotEV(igl::Viewer& viewer, int id)
+void plotEV(igl::viewer::Viewer& viewer, int id)
 {
   Eigen::VectorXd v = EV.col(id);
   v = v.array() - v.minCoeff();
@@ -34,7 +34,7 @@ void plotEV(igl::Viewer& viewer, int id)
 }
 
 // This function is called every time a keyboard button is pressed
-bool key_down(igl::Viewer& viewer, unsigned char key, int modifier)
+bool key_down(igl::viewer::Viewer& viewer, unsigned char key, int modifier)
 {
   if (key >= '1' && key <= '9')
     plotEV(viewer,(key - '1') + 1);
@@ -48,29 +48,29 @@ int main(int argc, char *argv[])
   igl::readOFF("../shared/3holes.off", V, F);
 
   // Launch MATLAB
-  igl::mlinit(&engine);
+  igl::matlab::mlinit(&engine);
 
   // Compute the discrete Laplacian operator
   Eigen::SparseMatrix<double> L;
   igl::cotmatrix(V,F,L);
 
   // Send Laplacian matrix to matlab
-  igl::mlsetmatrix(&engine,"L",L);
+  igl::matlab::mlsetmatrix(&engine,"L",L);
 
   // Plot the laplacian matrix using matlab spy
-  igl::mleval(&engine,"spy(L)");
+  igl::matlab::mleval(&engine,"spy(L)");
 
   // Extract the first 10 eigenvectors
-  igl::mleval(&engine,"[EV,~] = eigs(-L,10,'sm')");
+  igl::matlab::mleval(&engine,"[EV,~] = eigs(-L,10,'sm')");
 
   // Plot the size of EV (only for demostration purposes)
-  std::cerr << igl::mleval(&engine,"size(EV)") << std::endl;
+  std::cerr << igl::matlab::mleval(&engine,"size(EV)") << std::endl;
 
   // Retrieve the result
-  igl::mlgetmatrix(&engine,"EV",EV);
+  igl::matlab::mlgetmatrix(&engine,"EV",EV);
 
   // Plot the mesh
-  igl::Viewer viewer;
+  igl::viewer::Viewer viewer;
   viewer.callback_key_down = &key_down;
   viewer.data.set_mesh(V, F);
 

+ 2 - 2
tutorial/604_Triangle/main.cpp

@@ -28,10 +28,10 @@ int main(int argc, char *argv[])
   H << 0,0;
 
   // Triangulate the interior
-  igl::triangulate(V,E,H,"a0.005q",V2,F2);
+  igl::triangle::triangulate(V,E,H,"a0.005q",V2,F2);
 
   // Plot the generated mesh
-  igl::Viewer viewer;
+  igl::viewer::Viewer viewer;
   viewer.data.set_mesh(V2,F2);
   viewer.launch();
 }

+ 3 - 3
tutorial/605_Tetgen/main.cpp

@@ -14,7 +14,7 @@ Eigen::MatrixXi TT;
 Eigen::MatrixXi TF;
 
 // This function is called every time a keyboard button is pressed
-bool key_down(igl::Viewer& viewer, unsigned char key, int modifier)
+bool key_down(igl::viewer::Viewer& viewer, unsigned char key, int modifier)
 {
   using namespace std;
   using namespace Eigen;
@@ -65,13 +65,13 @@ int main(int argc, char *argv[])
   igl::readOFF("../shared/fertility.off",V,F);
 
   // Tetrahedralize the interior
-  igl::tetrahedralize(V,F,"pq1.414Y", TV,TT,TF);
+  igl::tetgen::tetrahedralize(V,F,"pq1.414Y", TV,TT,TF);
 
   // Compute barycenters
   igl::barycenter(TV,TT,B);
 
   // Plot the generated mesh
-  igl::Viewer viewer;
+  igl::viewer::Viewer viewer;
   viewer.callback_key_down = &key_down;
   key_down(viewer,'5',0);
   viewer.launch();

+ 10 - 10
tutorial/606_AmbientOcclusion/main.cpp

@@ -1,22 +1,22 @@
-#include <igl/readOFF.h>
-#include <igl/viewer/Viewer.h>
-#include <igl/per_vertex_normals.h>
 #include <igl/avg_edge_length.h>
+#include <igl/per_vertex_normals.h>
+#include <igl/readOFF.h>
 #include <igl/embree/ambient_occlusion.h>
+#include <igl/viewer/Viewer.h>
 #include <iostream>
 
-using namespace Eigen;
-using namespace std;
 
 // Mesh
 Eigen::MatrixXd V;
 Eigen::MatrixXi F;
 
-VectorXd AO;
+Eigen::VectorXd AO;
 
-  // It allows to change the degree of the field when a number is pressed
-bool key_down(igl::Viewer& viewer, unsigned char key, int modifier)
+// It allows to change the degree of the field when a number is pressed
+bool key_down(igl::viewer::Viewer& viewer, unsigned char key, int modifier)
 {
+  using namespace Eigen;
+  using namespace std;
   const RowVector3d color(0.9,0.85,0.9);
   switch(key)
   {
@@ -64,11 +64,11 @@ int main(int argc, char *argv[])
   igl::per_vertex_normals(V,F,N);
 
   // Compute ambient occlusion factor using embree
-  igl::ambient_occlusion(V,F,V,N,500,AO);
+  igl::embree::ambient_occlusion(V,F,V,N,500,AO);
   AO = 1.0 - AO.array();
 
   // Show mesh
-  igl::Viewer viewer;
+  igl::viewer::Viewer viewer;
   viewer.data.set_mesh(V, F);
   viewer.callback_key_down = &key_down;
   key_down(viewer,'2',0);

+ 13 - 10
tutorial/607_Picking/main.cpp

@@ -5,29 +5,29 @@
 
 #include <algorithm>
 
-using namespace Eigen;
-using namespace std;
-
 // Mesh
 Eigen::MatrixXd V;
 Eigen::MatrixXi F;
 
 // Per-vertex color
-MatrixXd C;
+Eigen::MatrixXd C;
 
-igl::EmbreeIntersector* ei;
+igl::embree::EmbreeIntersector* ei;
 
-vector<int> picked_vertices;
+std::vector<int> picked_vertices;
 
-bool mouse_down(igl::Viewer& viewer, int button, int modifier)
+bool mouse_down(igl::viewer::Viewer& viewer, int button, int modifier)
 {
 
+  using namespace Eigen;
+  using namespace std;
+
   int vid, fid;
 
   // Cast a ray in the view direction starting from the mouse position
   double x = viewer.current_mouse_x;
   double y = viewer.core.viewport(3) - viewer.current_mouse_y;
-  bool hit = igl::unproject_onto_mesh(Vector2f(x,y),
+  bool hit = igl::embree::unproject_onto_mesh(Vector2f(x,y),
                                 F,
                                 viewer.core.view * viewer.core.model,
                                 viewer.core.proj,
@@ -50,18 +50,21 @@ bool mouse_down(igl::Viewer& viewer, int button, int modifier)
 
 int main(int argc, char *argv[])
 {
+
+  using namespace Eigen;
+  using namespace std;
   // Load a mesh in OFF format
   igl::readOFF("../shared/fertility.off", V, F);
 
   // Create a BVH for raycasting
-  ei = new igl::EmbreeIntersector();
+  ei = new igl::embree::EmbreeIntersector();
   ei->init(V.cast<float>(),F);
 
   // Initialize the colors to white for all vertices
   C = MatrixXd::Constant(V.rows(),3,1);
 
   // Show mesh
-  igl::Viewer viewer;
+  igl::viewer::Viewer viewer;
   viewer.data.set_mesh(V, F);
   viewer.callback_mouse_down = &mouse_down;
   viewer.data.set_colors(C);

+ 12 - 11
tutorial/608_LIM/main.cpp

@@ -1,20 +1,17 @@
+#include <igl/avg_edge_length.h>
+#include <igl/per_vertex_normals.h>
 #include <igl/readOFF.h>
+#include <igl/lim/lim.h>
 #include <igl/viewer/Viewer.h>
-#include <igl/per_vertex_normals.h>
-#include <igl/avg_edge_length.h>
 #include <iostream>
 
-#include "igl/lim/lim.h"
-
-using namespace Eigen;
-using namespace std;
 
 // Mesh
 Eigen::MatrixX3d V0;
 Eigen::MatrixX3d V1;
 Eigen::MatrixXi F;
 
-SparseMatrix<double> C;
+Eigen::SparseMatrix<double> C;
 Eigen::VectorXd b;
 
 int energyType;
@@ -22,7 +19,7 @@ bool barriersEnabled;
 
 // This function is called every time a keyboard button is pressed
 // keys: 0:Original Mesh / 1:Harmonic / 2:Biharmonic / 3:Green / 4:ARAP
-bool key_down(igl::Viewer& viewer,unsigned char key,int modifier)
+bool key_down(igl::viewer::Viewer& viewer,unsigned char key,int modifier)
 {
   using namespace std;
   using namespace Eigen;
@@ -45,7 +42,10 @@ bool key_down(igl::Viewer& viewer,unsigned char key,int modifier)
     }
 
     if(key != '0')
-      igl::lim(V1,V0,F,C,b,energyType,1e-8,100,true,true,barriersEnabled,true,-1,-1);
+    {
+      igl::lim::lim(
+          V1,V0,F,C,b,energyType,1e-8,100,true,true,barriersEnabled,true,-1,-1);
+    }
 
     // set mesh
     viewer.data.set_vertices(V1);
@@ -101,10 +101,11 @@ int main(int argc, char *argv[])
   b(2*fixedVertices.size()+1) = 0.2;
 
   // compute locally injective map
-  igl::lim(V1,V0,F,C,b,energyType,1e-8,100,true,true,barriersEnabled,true,-1,-1);
+  igl::lim::lim(
+    V1,V0,F,C,b,energyType,1e-8,100,true,true,barriersEnabled,true,-1,-1);
 
   // Show mesh
-  igl::Viewer viewer;
+  igl::viewer::Viewer viewer;
   viewer.callback_key_down = &key_down;
   viewer.data.set_mesh(V1, F);
   viewer.core.show_lines = true;

+ 0 - 4
tutorial/609_Boolean/CMakeLists.txt

@@ -5,10 +5,6 @@ find_package(CGAL REQUIRED)
 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.
-# http://stackoverflow.com/a/18234926/148668
-macro(remove_cxx_flag flag)
-  string(REPLACE "${flag}" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
-endmacro()
 remove_cxx_flag("-stdlib=libc++")
 
 # This is absolutely necessary for Exact Construction

+ 12 - 11
tutorial/609_Boolean/main.cpp

@@ -9,7 +9,8 @@
 Eigen::MatrixXd VA,VB,VC;
 Eigen::VectorXi J;
 Eigen::MatrixXi FA,FB,FC;
-igl::MeshBooleanType boolean_type(igl::MESH_BOOLEAN_TYPE_UNION);
+igl::boolean::MeshBooleanType boolean_type(
+  igl::boolean::MESH_BOOLEAN_TYPE_UNION);
 
 const char * MESH_BOOLEAN_TYPE_NAMES[] = 
 {
@@ -20,9 +21,9 @@ const char * MESH_BOOLEAN_TYPE_NAMES[] =
   "Resolve",
 };
 
-void update(igl::Viewer &viewer)
+void update(igl::viewer::Viewer &viewer)
 {
-  igl::mesh_boolean(VA,FA,VB,FB,boolean_type,VC,FC,J);
+  igl::boolean::mesh_boolean(VA,FA,VB,FB,boolean_type,VC,FC,J);
   Eigen::MatrixXd C(FC.rows(),3);
   for(size_t f = 0;f<C.rows();f++)
   {
@@ -39,7 +40,7 @@ void update(igl::Viewer &viewer)
   viewer.data.set_colors(C);
 }
 
-bool key_down(igl::Viewer &viewer, unsigned char key, int mods)
+bool key_down(igl::viewer::Viewer &viewer, unsigned char key, int mods)
 {
   switch(key)
   {
@@ -47,14 +48,14 @@ bool key_down(igl::Viewer &viewer, unsigned char key, int mods)
       return false;
     case '.':
       boolean_type = 
-        static_cast<igl::MeshBooleanType>(
-          (boolean_type+1)% igl::NUM_MESH_BOOLEAN_TYPES);
+        static_cast<igl::boolean::MeshBooleanType>(
+          (boolean_type+1)% igl::boolean::NUM_MESH_BOOLEAN_TYPES);
       break;
     case ',':
       boolean_type = 
-        static_cast<igl::MeshBooleanType>(
-          (boolean_type+igl::NUM_MESH_BOOLEAN_TYPES-1)%
-          igl::NUM_MESH_BOOLEAN_TYPES);
+        static_cast<igl::boolean::MeshBooleanType>(
+          (boolean_type+igl::boolean::NUM_MESH_BOOLEAN_TYPES-1)%
+          igl::boolean::NUM_MESH_BOOLEAN_TYPES);
       break;
     case '[':
       viewer.core.camera_dnear -= 0.1;
@@ -64,7 +65,7 @@ bool key_down(igl::Viewer &viewer, unsigned char key, int mods)
       return true;
   }
   std::cout<<"A "<<MESH_BOOLEAN_TYPE_NAMES[boolean_type]<<" B."<<std::endl;
-  igl::mesh_boolean(VA,FA,VB,FB,boolean_type,VC,FC);
+  igl::boolean::mesh_boolean(VA,FA,VB,FB,boolean_type,VC,FC);
   update(viewer);
   return true;
 }
@@ -76,7 +77,7 @@ int main(int argc, char *argv[])
   igl::readOFF("../shared/cheburashka.off",VA,FA);
   igl::readOFF("../shared/decimated-knight.off",VB,FB);
   // Plot the mesh with pseudocolors
-  igl::Viewer viewer;
+  igl::viewer::Viewer viewer;
 
   // Initialize
   update(viewer);

+ 12 - 10
tutorial/701_Statistics/main.cpp

@@ -1,12 +1,10 @@
+#include <igl/doublearea.h>
+#include <igl/internal_angles.h>
+#include <igl/is_irregular_vertex.h>
 #include <igl/readOBJ.h>
-
 #include <Eigen/Core>
 #include <iostream>
 
-#include <igl/is_irregular_vertex.h>
-#include <igl/doublearea.h>
-#include <igl/internal_angles.h>
-
 int main(int argc, char *argv[])
 {
   using namespace Eigen;
@@ -21,10 +19,12 @@ int main(int argc, char *argv[])
   vector<bool> irregular = igl::is_irregular_vertex(V,F);
 
   int vertex_count = V.rows();
-  int irregular_vertex_count = std::count(irregular.begin(),irregular.end(),true);
+  int irregular_vertex_count = 
+    std::count(irregular.begin(),irregular.end(),true);
   double irregular_ratio = double(irregular_vertex_count)/vertex_count;
 
-  printf("Irregular vertices: \n%d/%d (%.2f%%)\n",irregular_vertex_count,vertex_count, irregular_ratio*100);
+  printf("Irregular vertices: \n%d/%d (%.2f%%)\n",
+    irregular_vertex_count,vertex_count, irregular_ratio*100);
 
   // Compute areas, min, max and standard deviation
   VectorXd area;
@@ -34,9 +34,10 @@ int main(int argc, char *argv[])
   double area_avg   = area.mean();
   double area_min   = area.minCoeff() / area_avg;
   double area_max   = area.maxCoeff() / area_avg;
-  double area_sigma = sqrt( ((area.array()-area_avg)/area_avg).square().mean() );
+  double area_sigma = sqrt(((area.array()-area_avg)/area_avg).square().mean());
 
-  printf("Areas (Min/Max)/Avg_Area Sigma: \n%.2f/%.2f (%.2f)\n",area_min,area_max,area_sigma);
+  printf("Areas (Min/Max)/Avg_Area Sigma: \n%.2f/%.2f (%.2f)\n",
+    area_min,area_max,area_sigma);
 
   // Compute per face angles, min, max and standard deviation
   MatrixXd angles;
@@ -48,6 +49,7 @@ int main(int argc, char *argv[])
   double angle_max   = angles.maxCoeff();
   double angle_sigma = sqrt( (angles.array()-angle_avg).square().mean() );
 
-  printf("Angles in degrees (Min/Max) Sigma: \n%.2f/%.2f (%.2f)\n",angle_min,angle_max,angle_sigma);
+  printf("Angles in degrees (Min/Max) Sigma: \n%.2f/%.2f (%.2f)\n",
+    angle_min,angle_max,angle_sigma);
 
 }

+ 6 - 6
tutorial/702_WindingNumber/main.cpp

@@ -1,10 +1,10 @@
-#include <igl/readMESH.h>
-#include <igl/winding_number.h>
 #include <igl/barycenter.h>
 #include <igl/boundary_facets.h>
 #include <igl/parula.h>
-#include <igl/slice_tets.h>
+#include <igl/readMESH.h>
 #include <igl/slice.h>
+#include <igl/slice_tets.h>
+#include <igl/winding_number.h>
 #include <igl/viewer/Viewer.h>
 #include <Eigen/Sparse>
 #include <iostream>
@@ -21,7 +21,7 @@ enum OverLayType
   NUM_OVERLAY = 3,
 } overlay = OVERLAY_NONE;
 
-void update_visualization(igl::Viewer & viewer)
+void update_visualization(igl::viewer::Viewer & viewer)
 {
   using namespace Eigen;
   using namespace std;
@@ -68,7 +68,7 @@ void update_visualization(igl::Viewer & viewer)
   viewer.data.set_face_based(true);
 }
 
-bool key_down(igl::Viewer& viewer, unsigned char key, int mod)
+bool key_down(igl::viewer::Viewer& viewer, unsigned char key, int mod)
 {
   switch(key)
   {
@@ -132,7 +132,7 @@ int main(int argc, char *argv[])
   W = (W.array() - W.minCoeff())/(W.maxCoeff()-W.minCoeff());
 
   // Plot the generated mesh
-  igl::Viewer viewer;
+  igl::viewer::Viewer viewer;
   update_visualization(viewer);
   viewer.callback_key_down = &key_down;
   viewer.launch();

+ 4 - 4
tutorial/703_Decimation/main.cpp

@@ -1,7 +1,7 @@
+#include <igl/circulation.h>
 #include <igl/collapse_edge.h>
 #include <igl/edge_flaps.h>
 #include <igl/read_triangle_mesh.h>
-#include <igl/circulation.h>
 #include <igl/Viewer/viewer.h>
 #include <Eigen/Core>
 #include <iostream>
@@ -25,7 +25,7 @@ int main(int argc, char * argv[])
   MatrixXi F,OF;
   read_triangle_mesh(filename,OV,OF);
 
-  igl::Viewer viewer;
+  igl::viewer::Viewer viewer;
 
   // Prepare array-based edge data structures and priority queue
   VectorXi EMAP;
@@ -79,7 +79,7 @@ int main(int argc, char * argv[])
     viewer.data.set_face_based(true);
   };
 
-  const auto &pre_draw = [&](igl::Viewer & viewer)->bool
+  const auto &pre_draw = [&](igl::viewer::Viewer & viewer)->bool
   {
     // If animating then collapse 10% of edges
     if(viewer.core.is_animating && !Q.empty())
@@ -108,7 +108,7 @@ int main(int argc, char * argv[])
   };
 
   const auto &key_down = 
-    [&](igl::Viewer &viewer,unsigned char key,int mod)->bool
+    [&](igl::viewer::Viewer &viewer,unsigned char key,int mod)->bool
   {
     switch(key)
     {

+ 3 - 3
tutorial/704_SignedDistance/main.cpp

@@ -25,7 +25,7 @@ double max_distance = 1;
 double slice_z = 0.5;
 bool overlay = false;
 
-void update_visualization(igl::Viewer & viewer)
+void update_visualization(igl::viewer::Viewer & viewer)
 {
   using namespace Eigen;
   using namespace std;
@@ -95,7 +95,7 @@ void update_visualization(igl::Viewer & viewer)
   viewer.core.lighting_factor = overlay;
 }
 
-bool key_down(igl::Viewer& viewer, unsigned char key, int mod)
+bool key_down(igl::viewer::Viewer& viewer, unsigned char key, int mod)
 {
   switch(key)
   {
@@ -149,7 +149,7 @@ int main(int argc, char *argv[])
     V,F,igl::PER_EDGE_NORMALS_WEIGHTING_TYPE_UNIFORM,FN,EN,E,EMAP);
 
   // Plot the generated mesh
-  igl::Viewer viewer;
+  igl::viewer::Viewer viewer;
   update_visualization(viewer);
   viewer.callback_key_down = &key_down;
   viewer.core.show_lines = false;

+ 7 - 0
tutorial/CMakeLists.shared

@@ -1,3 +1,10 @@
+# http://stackoverflow.com/a/18234926/148668
+# -stdlib=libc++ breaks gcc (for clang, the correct stdlib will be used with
+# -std=c++11 anyway)
+macro(remove_cxx_flag flag)
+  string(REPLACE "${flag}" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
+endmacro()
+remove_cxx_flag("-stdlib=libc++")
 if(NOT CMAKELISTS_SHARED_INCLUDED)
 set(CMAKELISTS_SHARED_INCLUDED TRUE)
 SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")

+ 3 - 0
tutorial/CMakeLists.txt

@@ -17,6 +17,7 @@ find_package(CGAL QUIET)
 ## Check for mosek
 find_package(MOSEK QUIET)
 
+message(STATUS "CMAKE_CXX_FLAGS: ${CMAKE_CXX_FLAGS}")
 include("CMakeLists.shared")
 
 # Chapter 1
@@ -73,7 +74,9 @@ 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")
 endif()

+ 36 - 30
tutorial/cmake/FindLIBIGL.cmake

@@ -8,19 +8,19 @@
 if(NOT LIBIGL_FOUND)
 
 FIND_PATH(LIBIGL_INCLUDE_DIR igl/readOBJ.h
-   /usr/include
-   /usr/local/include
-   /usr/local/igl/libigl/include
+   ${PROJECT_SOURCE_DIR}/../../include
+   ${PROJECT_SOURCE_DIR}/../include
+   ${PROJECT_SOURCE_DIR}/include
+   ${PROJECT_SOURCE_DIR}/../libigl/include
+   ${PROJECT_SOURCE_DIR}/../../libigl/include
    $ENV{LIBIGL}/include
    $ENV{LIBIGLROOT}/include
    $ENV{LIBIGL_ROOT}/include
    $ENV{LIBIGL_DIR}/include
    $ENV{LIBIGL_DIR}/inc
-   ${PROJECT_SOURCE_DIR}/../libigl/include
-   ${PROJECT_SOURCE_DIR}/../../libigl/include
-   ${PROJECT_SOURCE_DIR}/../../include
-   ${PROJECT_SOURCE_DIR}/include
-   ${PROJECT_SOURCE_DIR}/../include
+   /usr/include
+   /usr/local/include
+   /usr/local/igl/libigl/include
 )
 
 
@@ -35,15 +35,17 @@ endif(LIBIGL_INCLUDE_DIR)
 if(LIBIGL_USE_STATIC_LIBRARY)
   add_definitions(-DIGL_STATIC_LIBRARY)
   set(LIBIGL_LIB_DIRS
-   /usr/lib
-   /usr/local/lib
+   ${PROJECT_SOURCE_DIR}/../../lib
+   ${PROJECT_SOURCE_DIR}/../lib
+   ${PROJECT_SOURCE_DIR}/lib
+   ${PROJECT_SOURCE_DIR}/../../libigl/lib
+   ${PROJECT_SOURCE_DIR}/../libigl/lib
    $ENV{LIBIGL}/lib
    $ENV{LIBIGLROOT}/lib
    $ENV{LIBIGL_ROOT}/lib
    $ENV{LIBIGL_DIR}/lib
-   ${PROJECT_SOURCE_DIR}/../libigl/lib
-   ${PROJECT_SOURCE_DIR}/../../libigl/lib
-   ${PROJECT_SOURCE_DIR}/../../lib)
+   /usr/lib
+   /usr/local/lib)
   FIND_LIBRARY( LIBIGL_LIBRARY NAMES igl PATHS ${LIBIGL_LIB_DIRS})
   if(NOT LIBIGL_LIBRARY)
     set(LIBIGL_FOUND FALSE)
@@ -57,19 +59,21 @@ if(LIBIGL_USE_STATIC_LIBRARY)
     message(FATAL_ERROR "could NOT find libiglbbw")
   endif(NOT LIBIGLBBW_LIBRARY)
   set(LIBIGL_LIBRARIES ${LIBIGL_LIBRARIES}  ${LIBIGLBBW_LIBRARY})
-#  FIND_LIBRARY( LIBIGLMOSEK_LIBRARY NAMES iglmosek PATHS ${LIBIGL_LIB_DIRS})
-#  if(NOT LIBIGLMOSEK_LIBRARY)
-#    set(LIBIGL_FOUND FALSE)
-#    message(FATAL_ERROR "could NOT find libiglmosek")
-#  endif(NOT LIBIGLMOSEK_LIBRARY)
-#  set(LIBIGL_LIBRARIES ${LIBIGL_LIBRARIES}  ${LIBIGLMOSEK_LIBRARY})
-#if(MOSEK_FOUND)
-#    set(LIBIGL_INCLUDE_DIRS ${LIBIGL_INCLUDE_DIRS}  ${MOSEK_INCLUDE_DIR})
-#    set(LIBIGL_LIBRARIES ${LIBIGL_LIBRARIES}  ${MOSEK_LIBRARIES})
-#  else(MOSEK_FOUND)
-#    set(LIBIGL_FOUND FALSE)
-#    message(FATAL_ERROR "could NOT find mosek")
-#  endif(MOSEK_FOUND)
+  # WARNING: PLEASE FIND A BETTER WAY OF DEALING WITH MOSEK THAN COMMENTING OUT
+  # THIS ENTIRE SECTION... OR AT LEAST DEFINE IGL_NO_MOSEK...
+  FIND_LIBRARY( LIBIGLMOSEK_LIBRARY NAMES iglmosek PATHS ${LIBIGL_LIB_DIRS})
+  if(NOT LIBIGLMOSEK_LIBRARY)
+    set(LIBIGL_FOUND FALSE)
+    message(FATAL_ERROR "could NOT find libiglmosek")
+  endif(NOT LIBIGLMOSEK_LIBRARY)
+  set(LIBIGL_LIBRARIES ${LIBIGL_LIBRARIES}  ${LIBIGLMOSEK_LIBRARY})
+  if(MOSEK_FOUND)
+    set(LIBIGL_INCLUDE_DIRS ${LIBIGL_INCLUDE_DIRS}  ${MOSEK_INCLUDE_DIR})
+    set(LIBIGL_LIBRARIES ${LIBIGL_LIBRARIES}  ${MOSEK_LIBRARIES})
+  else(MOSEK_FOUND)
+    set(LIBIGL_FOUND FALSE)
+    message(FATAL_ERROR "could NOT find mosek")
+  endif(MOSEK_FOUND)
 
   FIND_LIBRARY( LIBIGLCGAL_LIBRARY NAMES iglcgal PATHS ${LIBIGL_LIB_DIRS})
   if(NOT LIBIGLCGAL_LIBRARY)
@@ -95,8 +99,9 @@ if(LIBIGL_USE_STATIC_LIBRARY)
 
   FIND_LIBRARY( LIBIGLLIM_LIBRARY NAMES igllim PATHS ${LIBIGL_LIB_DIRS})
   if(NOT LIBIGLLIM_LIBRARY)
-    set(LIBIGL_FOUND FALSE)
-    message(FATAL_ERROR "could NOT find libigllim")
+    #set(LIBIGL_FOUND FALSE)
+    message(WARNING "could NOT find libigllim")
+    set(LIBIGLLIM_LIBRARY "")
   endif(NOT LIBIGLLIM_LIBRARY)
   set(LIBIGL_LIBRARIES ${LIBIGL_LIBRARIES}  ${LIBIGLLIM_LIBRARY})
 
@@ -151,8 +156,9 @@ if(LIBIGL_USE_STATIC_LIBRARY)
 
   FIND_LIBRARY( LIBIGLCOMISO_LIBRARY NAMES iglcomiso PATHS ${LIBIGL_LIB_DIRS})
   if(NOT LIBIGLCOMISO_LIBRARY)
-    set(LIBIGL_FOUND FALSE)
-    message(FATAL_ERROR "could NOT find libiglcomiso")
+    #set(LIBIGL_FOUND FALSE)
+    set(LIBIGLCOMISO_LIBRARY "")
+    message(WARNING "could NOT find libiglcomiso")
   endif(NOT LIBIGLCOMISO_LIBRARY)
   set(LIBIGL_LIBRARIES ${LIBIGL_LIBRARIES}  ${LIBIGLCOMISO_LIBRARY})