#include "isolines_colormap.h" #include "update.h" #include #include #include #include #include int main(int argc, char *argv[]) { Eigen::MatrixXi F; Eigen::MatrixXd V; igl::read_triangle_mesh( argc>1?argv[1]: TUTORIAL_SHARED_PATH "/beetle.off",V,F); double t = std::pow(igl::avg_edge_length(V,F),2); // Precomputation igl::HeatGeodesicsData data; const auto precompute = [&]() { if(!igl::heat_geodesics_precompute(V,F,t,data)) { std::cerr<<"Error: heat_geodesics_precompute failed."<bool { const double x = viewer.current_mouse_x; const double y = viewer.core().viewport(3) - viewer.current_mouse_y; Eigen::VectorXd D; if(::update( V,F,t,x,y, viewer.core().view,viewer.core().proj,viewer.core().viewport, data, D)) { viewer.data().set_data(D); return true; } return false; }; viewer.callback_mouse_down = [&](igl::opengl::glfw::Viewer& viewer, int, int)->bool { if(update()) { down_on_mesh = true; return true; } return false; }; viewer.callback_mouse_move = [&](igl::opengl::glfw::Viewer& viewer, int, int)->bool { if(down_on_mesh) { update(); return true; } return false; }; viewer.callback_mouse_up = [&down_on_mesh](igl::opengl::glfw::Viewer& viewer, int, int)->bool { down_on_mesh = false; return false; }; std::cout<bool { switch(key) { default: return false; case 'D': case 'd': data.use_intrinsic_delaunay = !data.use_intrinsic_delaunay; std::cout<<(data.use_intrinsic_delaunay?"":"not ")<< "using intrinsic delaunay..."<