From 5b438efca7448b6ee7b0bfbe7f17a01d97adb5b3 Mon Sep 17 00:00:00 2001 From: Thomas Fischer <thomas.fischer@ufz.de> Date: Mon, 8 Jun 2020 17:16:46 +0200 Subject: [PATCH] [A / MeL / T] Add switch to addLayerToMesh(). --- .../DataExplorer/DataView/MeshView.cpp | 8 ++-- Applications/Utils/MeshEdit/AddTopLayer.cpp | 12 ++++- MeshLib/MeshGenerators/MeshGenerator.cpp | 4 +- Tests/MeshLib/TestAddLayerToMesh.cpp | 46 ++++++++++++++----- 4 files changed, 53 insertions(+), 17 deletions(-) diff --git a/Applications/DataExplorer/DataView/MeshView.cpp b/Applications/DataExplorer/DataView/MeshView.cpp index 3259e2a1595..8515b5656ee 100644 --- a/Applications/DataExplorer/DataView/MeshView.cpp +++ b/Applications/DataExplorer/DataView/MeshView.cpp @@ -287,9 +287,11 @@ void MeshView::openAddLayerDialog() return; } - double const thickness (dlg.getThickness()); - std::unique_ptr<MeshLib::Mesh> result(MeshLib::addLayerToMesh( - *mesh, thickness, dlg.getName(), dlg.isTopLayer())); + bool const copy_material_ids = false; + double const thickness(dlg.getThickness()); + std::unique_ptr<MeshLib::Mesh> result( + MeshLib::addLayerToMesh(*mesh, thickness, dlg.getName(), + dlg.isTopLayer(), copy_material_ids)); if (result) { diff --git a/Applications/Utils/MeshEdit/AddTopLayer.cpp b/Applications/Utils/MeshEdit/AddTopLayer.cpp index 3c2b38651d5..24f287488e9 100644 --- a/Applications/Utils/MeshEdit/AddTopLayer.cpp +++ b/Applications/Utils/MeshEdit/AddTopLayer.cpp @@ -46,6 +46,15 @@ int main (int argc, char* argv[]) "the thickness of the new layer", false, 10, "floating point value"); cmd.add(layer_thickness_arg); + TCLAP::ValueArg<bool> copy_material_ids_arg( + "", "copy_material_ids", + "copy the existing material distribution of the layer which is to " + "be extented ", + false, false, + "bool value: either true for copying or false for adding new " + "material ID"); + cmd.add(copy_material_ids_arg); + cmd.parse(argc, argv); INFO("Reading mesh '{:s}' ... ", mesh_arg.getValue()); @@ -58,7 +67,8 @@ int main (int argc, char* argv[]) INFO("done."); std::unique_ptr<MeshLib::Mesh> result(MeshLib::addTopLayerToMesh( - *subsfc_mesh, layer_thickness_arg.getValue(), mesh_out_arg.getValue())); + *subsfc_mesh, layer_thickness_arg.getValue(), mesh_out_arg.getValue(), + copy_material_ids_arg.getValue())); if (!result) { ERR("Failure while adding top layer."); return EXIT_FAILURE; diff --git a/MeshLib/MeshGenerators/MeshGenerator.cpp b/MeshLib/MeshGenerators/MeshGenerator.cpp index a3e730983c1..61467561405 100644 --- a/MeshLib/MeshGenerators/MeshGenerator.cpp +++ b/MeshLib/MeshGenerators/MeshGenerator.cpp @@ -588,9 +588,11 @@ Mesh* MeshGenerator::generateRegularPrismMesh( std::unique_ptr<MeshLib::Mesh> mesh ( generateRegularTriMesh(n_x_cells, n_y_cells, cell_size_x, cell_size_y, origin, mesh_name)); std::size_t const n_tris (mesh->getNumberOfElements()); + bool const copy_material_ids = false; for (std::size_t i = 0; i < n_z_cells; ++i) { - mesh.reset(MeshLib::addTopLayerToMesh(*mesh, cell_size_z, mesh_name)); + mesh.reset(MeshLib::addTopLayerToMesh(*mesh, cell_size_z, mesh_name, + copy_material_ids)); } std::vector<std::size_t> elem_ids (n_tris); std::iota(elem_ids.begin(), elem_ids.end(), 0); diff --git a/Tests/MeshLib/TestAddLayerToMesh.cpp b/Tests/MeshLib/TestAddLayerToMesh.cpp index d0a0e610d37..77a30369335 100644 --- a/Tests/MeshLib/TestAddLayerToMesh.cpp +++ b/Tests/MeshLib/TestAddLayerToMesh.cpp @@ -66,7 +66,9 @@ TEST(MeshLib, AddTopLayerToLineMesh) { std::unique_ptr<MeshLib::Mesh> const mesh (MeshLib::MeshGenerator::generateLineMesh(1.0, 5)); double const height (1); - std::unique_ptr<MeshLib::Mesh> const result (MeshLib::addLayerToMesh(*mesh, height, "mesh", true)); + constexpr bool const copy_material_ids = false; + std::unique_ptr<MeshLib::Mesh> const result(MeshLib::addLayerToMesh( + *mesh, height, "mesh", true, copy_material_ids)); ASSERT_EQ(2*mesh->getNumberOfNodes(), result->getNumberOfNodes()); ASSERT_EQ(2*mesh->getNumberOfElements(), result->getNumberOfElements()); @@ -84,7 +86,9 @@ TEST(MeshLib, AddBottomLayerToLineMesh) { std::unique_ptr<MeshLib::Mesh> const mesh (MeshLib::MeshGenerator::generateLineMesh(1.0, 5)); double const height (1); - std::unique_ptr<MeshLib::Mesh> const result (MeshLib::addLayerToMesh(*mesh, height, "mesh", false)); + constexpr bool const copy_material_ids = false; + std::unique_ptr<MeshLib::Mesh> const result(MeshLib::addLayerToMesh( + *mesh, height, "mesh", false, copy_material_ids)); ASSERT_EQ(2*mesh->getNumberOfNodes(), result->getNumberOfNodes()); ASSERT_EQ(2*mesh->getNumberOfElements(), result->getNumberOfElements()); @@ -116,7 +120,9 @@ TEST(MeshLib, AddTopLayerToTriMesh) } ASSERT_EQ(2, mesh->getProperties().getPropertyVectorNames().size()); double const height (1); - std::unique_ptr<MeshLib::Mesh> const result (MeshLib::addLayerToMesh(*mesh, height, "mesh", true)); + constexpr bool copy_material_ids = false; + std::unique_ptr<MeshLib::Mesh> const result (MeshLib::addLayerToMesh(*mesh, + height, "mesh", true, copy_material_ids)); ASSERT_EQ(2*mesh->getNumberOfNodes(), result->getNumberOfNodes()); ASSERT_EQ(2*mesh->getNumberOfElements(), result->getNumberOfElements()); @@ -142,7 +148,9 @@ TEST(MeshLib, AddBottomLayerToTriMesh) { std::unique_ptr<MeshLib::Mesh> const mesh (MeshLib::MeshGenerator::generateRegularTriMesh(5, 5)); double const height (1); - std::unique_ptr<MeshLib::Mesh> const result (MeshLib::addLayerToMesh(*mesh, height, "mesh", false)); + constexpr bool copy_material_ids = false; + std::unique_ptr<MeshLib::Mesh> const result(MeshLib::addLayerToMesh( + *mesh, height, "mesh", false, copy_material_ids)); ASSERT_EQ(2*mesh->getNumberOfNodes(), result->getNumberOfNodes()); ASSERT_EQ(2*mesh->getNumberOfElements(), result->getNumberOfElements()); @@ -160,7 +168,9 @@ TEST(MeshLib, AddTopLayerToQuadMesh) { std::unique_ptr<MeshLib::Mesh> const mesh (MeshLib::MeshGenerator::generateRegularQuadMesh(5, 5)); double const height (1); - std::unique_ptr<MeshLib::Mesh> const result (MeshLib::addLayerToMesh(*mesh, height, "mesh", true)); + constexpr bool copy_material_ids = false; + std::unique_ptr<MeshLib::Mesh> const result(MeshLib::addLayerToMesh( + *mesh, height, "mesh", true, copy_material_ids)); ASSERT_EQ(2*mesh->getNumberOfNodes(), result->getNumberOfNodes()); ASSERT_EQ(2*mesh->getNumberOfElements(), result->getNumberOfElements()); @@ -178,7 +188,9 @@ TEST(MeshLib, AddBottomLayerToQuadMesh) { std::unique_ptr<MeshLib::Mesh> const mesh (MeshLib::MeshGenerator::generateRegularQuadMesh(5, 5)); double const height (1); - std::unique_ptr<MeshLib::Mesh> const result (MeshLib::addLayerToMesh(*mesh, height, "mesh", false)); + constexpr bool copy_material_ids = false; + std::unique_ptr<MeshLib::Mesh> const result(MeshLib::addLayerToMesh( + *mesh, height, "mesh", false, copy_material_ids)); ASSERT_EQ(2*mesh->getNumberOfNodes(), result->getNumberOfNodes()); ASSERT_EQ(2*mesh->getNumberOfElements(), result->getNumberOfElements()); @@ -196,7 +208,9 @@ TEST(MeshLib, AddTopLayerToHexMesh) { std::unique_ptr<MeshLib::Mesh> const mesh (MeshLib::MeshGenerator::generateRegularHexMesh(5, 5)); double const height (1); - std::unique_ptr<MeshLib::Mesh> const result (MeshLib::addLayerToMesh(*mesh, height, "mesh", true)); + constexpr bool copy_material_ids = false; + std::unique_ptr<MeshLib::Mesh> const result(MeshLib::addLayerToMesh( + *mesh, height, "mesh", true, copy_material_ids)); ASSERT_EQ(mesh->getNumberOfNodes(), result->getNumberOfNodes()-36); ASSERT_EQ(mesh->getNumberOfElements(), result->getNumberOfElements()-25); @@ -218,7 +232,9 @@ TEST(MeshLib, AddBottomLayerToHexMesh) { std::unique_ptr<MeshLib::Mesh> const mesh (MeshLib::MeshGenerator::generateRegularHexMesh(5, 5)); double const height (1); - std::unique_ptr<MeshLib::Mesh> const result (MeshLib::addLayerToMesh(*mesh, height, "mesh", false)); + constexpr bool copy_material_ids = false; + std::unique_ptr<MeshLib::Mesh> const result(MeshLib::addLayerToMesh( + *mesh, height, "mesh", false, copy_material_ids)); ASSERT_EQ(mesh->getNumberOfNodes(), result->getNumberOfNodes()-36); ASSERT_EQ(mesh->getNumberOfElements(), result->getNumberOfElements()-25); @@ -239,9 +255,12 @@ TEST(MeshLib, AddBottomLayerToHexMesh) TEST(MeshLib, AddTopLayerToPrismMesh) { std::unique_ptr<MeshLib::Mesh> const mesh (MeshLib::MeshGenerator::generateRegularTriMesh(5, 5)); - std::unique_ptr<MeshLib::Mesh> const mesh2 (MeshLib::addLayerToMesh(*mesh, 5, "mesh", true)); + constexpr bool copy_material_ids = false; + std::unique_ptr<MeshLib::Mesh> const mesh2(MeshLib::addLayerToMesh( + *mesh, 5, "mesh", true, copy_material_ids)); double const height (1); - std::unique_ptr<MeshLib::Mesh> const result (MeshLib::addLayerToMesh(*mesh2, height, "mesh", true)); + std::unique_ptr<MeshLib::Mesh> const result(MeshLib::addLayerToMesh( + *mesh2, height, "mesh", true, copy_material_ids)); ASSERT_EQ(mesh2->getNumberOfNodes()/2.0 * 3, result->getNumberOfNodes()); ASSERT_EQ(mesh2->getNumberOfElements()/2.0 * 3, result->getNumberOfElements()); @@ -263,7 +282,9 @@ TEST(MeshLib, AddTopLayerToPrismMesh) TEST(MeshLib, AddBottomLayerToPrismMesh) { std::unique_ptr<MeshLib::Mesh> const mesh (MeshLib::MeshGenerator::generateRegularTriMesh(5, 5)); - std::unique_ptr<MeshLib::Mesh> const mesh2 (MeshLib::addLayerToMesh(*mesh, 5, "mesh", true)); + constexpr bool copy_material_ids = false; + std::unique_ptr<MeshLib::Mesh> const mesh2(MeshLib::addLayerToMesh( + *mesh, 5, "mesh", true, copy_material_ids)); double const height (1); std::string const& mat_name ("MaterialIDs"); auto* const mats = mesh2->getProperties().createNewPropertyVector<int>( @@ -273,7 +294,8 @@ TEST(MeshLib, AddBottomLayerToPrismMesh) mats->resize(mesh2->getNumberOfElements(), 0); } - std::unique_ptr<MeshLib::Mesh> const result (MeshLib::addLayerToMesh(*mesh2, height, "mesh", false)); + std::unique_ptr<MeshLib::Mesh> const result(MeshLib::addLayerToMesh( + *mesh2, height, "mesh", false, copy_material_ids)); ASSERT_EQ(mesh2->getNumberOfNodes()/2.0 * 3, result->getNumberOfNodes()); ASSERT_EQ(mesh2->getNumberOfElements()/2.0 * 3, result->getNumberOfElements()); -- GitLab