1 #include <igl/avg_edge_length.h>
2 #include <igl/cotmatrix.h>
3 #include <igl/invert_diag.h>
4 #include <igl/massmatrix.h>
5 #include <igl/parula.h>
6 #include <igl/per_corner_normals.h>
7 #include <igl/per_face_normals.h>
8 #include <igl/per_vertex_normals.h>
9 #include <igl/principal_curvature.h>
10 #include <igl/read_triangle_mesh.h>
11 #include <igl/opengl/glfw/Viewer.h>
12 #include "tutorial_shared_path.h"
13 
14 Eigen::MatrixXd V;
15 Eigen::MatrixXi F;
16 
main(int argc,char * argv[])17 int main(int argc, char *argv[])
18 {
19   using namespace Eigen;
20   std::string filename = TUTORIAL_SHARED_PATH "/fertility.off";
21   if(argc>1)
22   {
23     filename = argv[1];
24   }
25   // Load a mesh in OFF format
26   igl::read_triangle_mesh(filename, V, F);
27 
28   // Alternative discrete mean curvature
29   MatrixXd HN;
30   SparseMatrix<double> L,M,Minv;
31   igl::cotmatrix(V,F,L);
32   igl::massmatrix(V,F,igl::MASSMATRIX_TYPE_VORONOI,M);
33   igl::invert_diag(M,Minv);
34   // Laplace-Beltrami of position
35   HN = -Minv*(L*V);
36   // Extract magnitude as mean curvature
37   VectorXd H = HN.rowwise().norm();
38 
39   // Compute curvature directions via quadric fitting
40   MatrixXd PD1,PD2;
41   VectorXd PV1,PV2;
42   igl::principal_curvature(V,F,PD1,PD2,PV1,PV2);
43   // mean curvature
44   H = 0.5*(PV1+PV2);
45 
46   igl::opengl::glfw::Viewer viewer;
47   viewer.data().set_mesh(V, F);
48 
49 
50   // Compute pseudocolor
51   MatrixXd C;
52   igl::parula(H,true,C);
53   viewer.data().set_colors(C);
54 
55   // Average edge length for sizing
56   const double avg = igl::avg_edge_length(V,F);
57 
58   // Draw a blue segment parallel to the minimal curvature direction
59   const RowVector3d red(0.8,0.2,0.2),blue(0.2,0.2,0.8);
60   viewer.data().add_edges(V + PD1*avg, V - PD1*avg, blue);
61 
62   // Draw a red segment parallel to the maximal curvature direction
63   viewer.data().add_edges(V + PD2*avg, V - PD2*avg, red);
64 
65   // Hide wireframe
66   viewer.data().show_lines = false;
67 
68   viewer.launch();
69 }
70