#include #include #include #include #include #include #include #include #include #include #include #include #include #include "tutorial_shared_path.h" // Quad mesh loaded Eigen::MatrixXd VQC; Eigen::MatrixXi FQC; Eigen::MatrixXi E; Eigen::MatrixXi FQCtri; Eigen::MatrixXd PQC0, PQC1, PQC2, PQC3; // Euclidean-regular quad mesh Eigen::MatrixXd VQCregular; Eigen::MatrixXi FQCtriregular; Eigen::MatrixXd PQC0regular, PQC1regular, PQC2regular, PQC3regular; igl::ShapeupData su_data; // Scale for visualizing the fields double global_scale; //TODO: not used void quadAngleRegularity(const Eigen::MatrixXd& V, const Eigen::MatrixXi& Q, Eigen::VectorXd& angleRegularity) { angleRegularity.conservativeResize(Q.rows()); angleRegularity.setZero(); for (int i=0;i&, const Eigen::PlainObjectBase&, const Eigen::PlainObjectBase&, Eigen::PlainObjectBase&)> localFunction(igl::shapeup_regular_face_projection); su_data.maxIterations=200; shapeup_precomputation(VQC, array_of_fours,FQC,E,b,wShape, wSmooth,su_data); shapeup_solve(bc,localFunction, VQC,su_data, false,VQCregular); // Convert the planarized mesh to triangles igl::slice( VQCregular, FQC.col(0).eval(), 1, PQC0regular); igl::slice( VQCregular, FQC.col(1).eval(), 1, PQC1regular); igl::slice( VQCregular, FQC.col(2).eval(), 1, PQC2regular); igl::slice( VQCregular, FQC.col(3).eval(), 1, PQC3regular); // Launch the viewer igl::viewer::Viewer viewer; key_down(viewer,'1',0); viewer.core.invert_normals = true; viewer.core.show_lines = false; viewer.callback_key_down = &key_down; viewer.launch(); }