From a235baf418f2456017422a356020e6bc28d467e6 Mon Sep 17 00:00:00 2001 From: PavelMikus Date: Thu, 19 May 2022 17:06:38 +0200 Subject: [PATCH] some experimets with params but even the convex hull does not work --- src/slic3r/Utils/FixModelByTetrahedrons.cpp | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/src/slic3r/Utils/FixModelByTetrahedrons.cpp b/src/slic3r/Utils/FixModelByTetrahedrons.cpp index a437015cea..bcbebec0a8 100644 --- a/src/slic3r/Utils/FixModelByTetrahedrons.cpp +++ b/src/slic3r/Utils/FixModelByTetrahedrons.cpp @@ -21,7 +21,7 @@ namespace detail { indexed_triangle_set fix_model_volume_mesh(const TriangleMesh &mesh) { //first compute convex hull - Eigen::MatrixXf hull_v; + Eigen::MatrixXd hull_v; Eigen::MatrixXi hull_f; { Eigen::MatrixXf vertices(mesh.its.vertices.size(), 3); @@ -35,8 +35,6 @@ indexed_triangle_set fix_model_volume_mesh(const TriangleMesh &mesh) { faces.row(v) = mesh.its.indices[v]; } - Eigen::MatrixXf hull_v; - Eigen::MatrixXi hull_f; Eigen::VectorXi J; Eigen::VectorXi flip; @@ -53,14 +51,15 @@ indexed_triangle_set fix_model_volume_mesh(const TriangleMesh &mesh) { Eigen::MatrixXf tets_v; Eigen::MatrixXi tets_t; Eigen::MatrixXi tets_f; - int result = igl::copyleft::tetgen::tetrahedralize(hull_v, hull_f, "", tets_v, tets_t, tets_f); + int result = igl::copyleft::tetgen::tetrahedralize(hull_v, hull_f, "pA", tets_v, tets_t, tets_f); if (result != 0) { std::cout << "Tetrahedronization failed " << std::endl; return mesh.its; } - Eigen::MatrixXf barycenters; + Eigen::MatrixXd barycenters; // Compute barycenters of all tets + std::cout << "Computing barucenters " << std::endl; igl::barycenter(hull_v, tets_t, barycenters); // Compute generalized winding number at all barycenters @@ -92,14 +91,14 @@ indexed_triangle_set fix_model_volume_mesh(const TriangleMesh &mesh) { indexed_triangle_set fixed_mesh; fixed_mesh.vertices.resize(hull_v.rows()); - fixed_mesh.indices.resize(new_faces.rows()); + fixed_mesh.indices.resize(hull_f.rows()); for (int v = 0; v < hull_v.rows(); ++v) { - fixed_mesh.vertices[v] = hull_v.row(v); + fixed_mesh.vertices[v] = hull_v.row(v).cast(); } - for (int f = 0; f < new_faces.rows(); ++f) { - fixed_mesh.indices[f] = new_faces.row(f); + for (int f = 0; f < hull_f.rows(); ++f) { + fixed_mesh.indices[f] = hull_f.row(f); } std::cout << "returning fixed mesh " << std::endl;