Browse Source

updated conjugate example to show quad meshes and planarized conjugate mesh

Former-commit-id: e7939e4ba33d4a56d6e18a7db0675b08a4039c16
Olga Diamanti 11 years ago
parent
commit
c6661107f1

+ 86 - 13
tutorial/508_ConjugatePVF/main.cpp

@@ -8,6 +8,10 @@
 #include <igl/n_polyvector.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>
 
 // Input mesh
 Eigen::MatrixXd V;
@@ -16,6 +20,18 @@ Eigen::MatrixXi F;
 // Face barycenters
 Eigen::MatrixXd B;
 
+
+// Quad mesh generated from smooth field
+Eigen::MatrixXd VQS;
+Eigen::MatrixXi FQS;
+Eigen::MatrixXi FQStri;
+
+// Quad mesh generated from conjugate field
+Eigen::MatrixXd VQC;
+Eigen::MatrixXi FQC;
+Eigen::MatrixXi FQCtri;
+Eigen::MatrixXd VQCplan;
+
 // Scale for visualizing the fields
 double global_scale;
 
@@ -40,21 +56,22 @@ bool key_down(igl::Viewer& viewer, unsigned char key, int modifier)
   using namespace std;
   using namespace Eigen;
 
-  if (key <'1' || key >'3')
+  if (key <'1' || key >'6')
     return false;
 
   viewer.clear_mesh();
-  viewer.set_mesh(V, F);
   viewer.options.show_lines = false;
   viewer.options.show_texture = false;
-
-  // Highlight in red the constrained faces
-  MatrixXd C = MatrixXd::Constant(F.rows(),3,1);
-  for (unsigned i=0; i<F.rows();++i)
-    if (isConstrained[i])
-      C.row(i) << 1, 0, 0;
-  viewer.set_colors(C);
-
+  if (key <= '3')
+  {
+    viewer.set_mesh(V, F);
+    // Highlight in red the constrained faces
+    MatrixXd C = MatrixXd::Constant(F.rows(),3,1);
+    for (unsigned i=0; i<F.rows();++i)
+      if (isConstrained[i])
+        C.row(i) << 1, 0, 0;
+    viewer.set_colors(C);
+  }
 
   if (key == '1')
   {
@@ -69,7 +86,7 @@ bool key_down(igl::Viewer& viewer, unsigned char key, int modifier)
       }
     viewer.add_edges (B - global_scale*F1_t, B + global_scale*F1_t , Eigen::RowVector3d(0,0,1));
     viewer.add_edges (B - global_scale*F2_t, B + global_scale*F2_t , Eigen::RowVector3d(0,0,1));
-    
+
   }
   if (key == '2')
   {
@@ -80,7 +97,7 @@ bool key_down(igl::Viewer& viewer, unsigned char key, int modifier)
                       B + global_scale*smooth_pvf.block(0,3,F.rows(),3),
                       Eigen::RowVector3d(0,1,0));
   }
-  
+
   if (key == '3')
   {
     if (totalConjIter <50)
@@ -99,6 +116,48 @@ bool key_down(igl::Viewer& viewer, unsigned char key, int modifier)
                       Eigen::RowVector3d(0,1,0));
   }
 
+  if (key == '4')
+  {
+    viewer.set_mesh(VQS, FQStri);
+    
+    // show planarity
+    VectorXd planarity;
+    igl::quad_planarity( VQS, FQS, planarity);
+    MatrixXd Ct;
+    igl::jet(planarity, 0, 0.02, Ct);
+    MatrixXd C(FQStri.rows(),3);
+    C << Ct, Ct;
+    viewer.set_colors(C);
+  }
+  
+  if (key == '5')
+  {
+    viewer.set_mesh(VQC, FQCtri);
+    
+    // show planarity
+    VectorXd planarity;
+    igl::quad_planarity( VQC, FQC, planarity);
+    MatrixXd Ct;
+    igl::jet(planarity, 0, 0.02, Ct);
+    MatrixXd C(FQCtri.rows(),3);
+    C << Ct, Ct;
+    viewer.set_colors(C);
+  }
+  
+  if (key == '6')
+  {
+    igl ::planarize_quad_mesh(VQC, FQC, 50, 0.01, VQCplan);
+    viewer.set_mesh(VQCplan, FQCtri);
+
+    // show planarity
+    VectorXd planarity;
+    igl::quad_planarity( VQCplan, FQC, planarity);
+    MatrixXd Ct;
+    igl::jet(planarity, 0, 0.02, Ct);
+    MatrixXd C(FQCtri.rows(),3);
+    C << Ct, Ct;
+    viewer.set_colors(C);
+  }
 
   return false;
 }
@@ -128,7 +187,21 @@ int main(int argc, char *argv[])
   // Initialize conjugate field with smooth field
   csdata = new igl::ConjugateFFSolverData<Eigen::MatrixXd,Eigen::MatrixXi>(V,F);
   conjugate_pvf = smooth_pvf;
-  
+
+  // Load quad mesh generated by smooth field
+  igl::readOFF("../shared/inspired_mesh_quads_Smooth.off", VQS, FQS);
+  FQStri.resize(2*FQS.rows(), 3);
+  FQStri <<  FQS.col(0),FQS.col(1),FQS.col(2),
+             FQS.col(2),FQS.col(3),FQS.col(0);
+
+  // Load quad mesh generated by conjugate field
+  igl::readOFF("../shared/inspired_mesh_quads_Conjugate.off", VQC, FQC);
+  FQCtri.resize(2*FQC.rows(), 3);
+  FQCtri <<  FQC.col(0),FQC.col(1),FQC.col(2),
+             FQC.col(2),FQC.col(3),FQC.col(0);
+
+
+
   igl::Viewer viewer;
 
   // Plot the original mesh with a texture parametrization

+ 2 - 0
tutorial/cmake/FindLIBCOMISO.cmake

@@ -37,7 +37,9 @@ FIND_LIBRARY(LIBCOMISO_LIBRARY NAMES CoMISo
     ${PROJECT_SOURCE_DIR}/../../CoMISo/build/Build/lib/CoMISo/
     ${PROJECT_SOURCE_DIR}/../../../CoMISo/
     ${PROJECT_SOURCE_DIR}/../../../CoMISo/build/Build/lib/CoMISo/
+    /Users/olkido/Documents/igl/MIQ/src/CoMISo/Build
 )
+#message(STATUS "${LIBCOMISO_LIBRARY}")
 
 if(LIBCOMISO_INCLUDE_DIR AND LIBCOMISO_LIBRARY)
 

+ 1 - 0
tutorial/shared/inspired_mesh_quads_Conjugate.off.REMOVED.git-id

@@ -0,0 +1 @@
+634f371977a3419379f9b673b828f65232ab5c56

+ 1 - 0
tutorial/shared/inspired_mesh_quads_Smooth.off.REMOVED.git-id

@@ -0,0 +1 @@
+8cfb277e82f1e196a90bfd55e68a7f484d0b5275