You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
51 lines
1.7 KiB
51 lines
1.7 KiB
#include <igl/opengl/glfw/Viewer.h>
|
|
#include <igl/read_triangle_mesh.h>
|
|
#include <igl/material_colors.h>
|
|
#include <igl/isolines.h>
|
|
|
|
int main(int argc, char *argv[])
|
|
{
|
|
Eigen::MatrixXd V;
|
|
Eigen::MatrixXi F;
|
|
igl::read_triangle_mesh(
|
|
argc>1?argv[1]:TUTORIAL_SHARED_PATH "/fertility.off",V,F);
|
|
// Use y-coordinate as scalar field
|
|
Eigen::VectorXd f = V.col(1);
|
|
|
|
Eigen::MatrixXd iV;
|
|
Eigen::MatrixXi iE;
|
|
{
|
|
// How many isolines in the range (min,max)?
|
|
const int n = argc>2?atoi(argv[2]):128;
|
|
// This is actually unnecessary since isolines will not output degenerate
|
|
// segments.
|
|
//Eigen::VectorXd vals = Eigen::VectorXd::LinSpaced(n+2,f.minCoeff(),f.maxCoeff()).segment(1,n);
|
|
// Instead just use all n+2 and if the min-,max-value isolines are
|
|
// non-degneerate then we'll compute them, too.
|
|
Eigen::VectorXd vals = Eigen::VectorXd::LinSpaced(n+2,f.minCoeff(),f.maxCoeff());
|
|
{
|
|
Eigen::VectorXi I;
|
|
igl::isolines(V,F,f,vals,iV,iE,I);
|
|
}
|
|
}
|
|
|
|
// Plot the mesh
|
|
igl::opengl::glfw::Viewer viewer;
|
|
viewer.data().set_mesh(V, F);
|
|
viewer.data().label_size = 10;
|
|
viewer.data().set_face_based(true);
|
|
viewer.data().show_faces = true;
|
|
viewer.data().show_lines = false;
|
|
viewer.data().uniform_colors(
|
|
Eigen::Vector3d(0.94*viewer.core().background_color.head<3>().cast<double>()),
|
|
Eigen::Vector3d(0.05*viewer.core().background_color.head<3>().cast<double>()),
|
|
Eigen::Vector3d(0.01*viewer.core().background_color.head<3>().cast<double>()));
|
|
|
|
viewer.core().lighting_factor = 0.5;
|
|
viewer.data().set_edges(iV, iE,
|
|
Eigen::RowVector3d(igl::GOLD_DIFFUSE[0], igl::GOLD_DIFFUSE[1], igl::GOLD_DIFFUSE[2]));
|
|
viewer.data().line_width = 1;
|
|
|
|
viewer.launch();
|
|
}
|
|
|
|
|