#include //#undef IGL_STATIC_LIBRARY #include #include #include #include Eigen::MatrixXd VA,VB,VC; Eigen::VectorXi J,I; Eigen::MatrixXi FA,FB,FC; igl::MeshBooleanType boolean_type( igl::MESH_BOOLEAN_TYPE_UNION); const char * MESH_BOOLEAN_TYPE_NAMES[] = { "Union", "Intersect", "Minus", "XOR", "Resolve", }; void update(igl::opengl::glfw::Viewer &viewer) { igl::copyleft::cgal::mesh_boolean(VA,FA,VB,FB,boolean_type,VC,FC,J); Eigen::MatrixXd C(FC.rows(),3); for(size_t f = 0;f( (boolean_type+1)% igl::NUM_MESH_BOOLEAN_TYPES); break; case ',': boolean_type = static_cast( (boolean_type+igl::NUM_MESH_BOOLEAN_TYPES-1)% igl::NUM_MESH_BOOLEAN_TYPES); break; case '[': viewer.core().camera_dnear -= 0.1; return true; case ']': viewer.core().camera_dnear += 0.1; return true; } update(viewer); return true; } int main(int argc, char *argv[]) { using namespace Eigen; using namespace std; igl::readOFF(TUTORIAL_SHARED_PATH "/cheburashka.off",VA,FA); igl::readOFF(TUTORIAL_SHARED_PATH "/decimated-knight.off",VB,FB); // Plot the mesh with pseudocolors igl::opengl::glfw::Viewer viewer; // Initialize update(viewer); viewer.data().show_lines = true; viewer.callback_key_down = &key_down; viewer.core().camera_dnear = 3.9; cout<< "Press '.' to switch to next boolean operation type."<