From d01b4005b42270f445cc50a1b8fe6bf61844b242 Mon Sep 17 00:00:00 2001 From: Nuno Nobre Date: Wed, 2 Aug 2023 21:05:36 +0100 Subject: [PATCH] Include inner surfaces in the output msh Outer surfaces are tagged with 2^n where n is the respective triangle's surface tag. Inner surfaces are tagged with 2^n*3^m where n and m are the scalars from the current and opposite tets, respectively. --- src/MeshImprovement.cpp | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/src/MeshImprovement.cpp b/src/MeshImprovement.cpp index aef8e9d..6e843c1 100644 --- a/src/MeshImprovement.cpp +++ b/src/MeshImprovement.cpp @@ -2629,17 +2629,28 @@ void floatTetWild::get_surface(const Mesh& mesh, std::vector& b_faces, if (faces.empty()) return; // + #define NL i > 0 + #define NU i < faces.size() - 1 + #define OB(n) std::make_tuple(faces[i ][0], faces[i ][1], faces[i ][2]) != \ + std::make_tuple(faces[i + n][0], faces[i + n][1], faces[i + n][2]) + #define IB(n) tets[faces[i][3]].scalar != tets[faces[i + n][3]].scalar bool is_boundary = true; for (int i = 0; i < faces.size(); i++) { - if (i < faces.size() - 1 && - std::make_tuple(faces[i][0], faces[i][1], faces[i][2]) - == std::make_tuple(faces[i + 1][0], faces[i + 1][1], faces[i + 1][2])) { + if ((NU) && !(OB(+1)) && !(IB(+1))) { is_boundary = false; } else { if (is_boundary) { b_colors.push_back(tets[faces[i][3]].quality); - b_tags.push_back(tets[faces[i][3]].surface_tags[faces[i][4]]); b_faces.push_back(Vector3i(faces[i][0], faces[i][1], faces[i][2])); + if ((NL) && !(OB(-1)) && (IB(-1))) + b_tags.push_back(std::pow(2, tets[faces[i ][3]].scalar) * + std::pow(3, tets[faces[i - 1][3]].scalar)); + else if ((NU) && !(OB(+1)) && (IB(+1))) + b_tags.push_back(std::pow(2, tets[faces[i ][3]].scalar) * + std::pow(3, tets[faces[i + 1][3]].scalar)); + else + b_tags.push_back(std::pow(2, tets[faces[i ][3]].surface_tags[faces[i][4]]) * + std::pow(3, 0) ); bool is_inv = is_inverted(tet_vertices[tets[faces[i][3]][faces[i][4]]], tet_vertices[faces[i][0]], tet_vertices[faces[i][1]],