#include #include #include #include #include #include "igl/lim/compute_lim.h" using namespace Eigen; using namespace std; // Mesh Eigen::MatrixX3d V0; Eigen::MatrixX3d V1; Eigen::MatrixXi F; SparseMatrix C; Eigen::VectorXd b; vector bv; // border vertices (don't need to be defined exept for LSCM) Eigen::VectorXd g; // gradients (don't need to be defined execpt for Poisson) // 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) { using namespace std; using namespace Eigen; if(key >= '0' && key <= '4') { // compute locally injective map int energy = key - 49; V1 = V0; if(energy >= 0) igl::compute_lim(V1,V0,F,bv,g,C,b,energy,1e-8,100,true); // set mesh viewer.set_mesh(V1,F); } return false; } int main(int argc, char *argv[]) { using namespace std; using namespace Eigen; // load a mesh in OFF format igl::readOFF("../shared/grid.off",V0,F); V1 = V0; // find bottom and left boundary vertices vector fixedVertices; for(int i=0;i