diff --git a/Gui/DataView/MshLayerMapper.cpp b/Gui/DataView/MshLayerMapper.cpp index e699dc1fd7a42a096d70176f010a81d81e910c77..7a1bd056bb3c6160ac0ca2e0c7f39092c1d68bc8 100644 --- a/Gui/DataView/MshLayerMapper.cpp +++ b/Gui/DataView/MshLayerMapper.cpp @@ -219,7 +219,7 @@ int MshLayerMapper::LayerMapping(MeshLib::Mesh* new_mesh, const std::string &ras if (noData_nodes.size() < (nNodes - 2)) { WARN("MshLayerMapper::LayerMapping(): Removing %d mesh nodes at NoData values.", noData_nodes.size()); - MeshLib::Mesh* red_mesh = MeshLib::removeMeshNodes(*new_mesh, noData_nodes); + MeshLib::Mesh* red_mesh = MeshLib::removeMeshNodes(new_mesh, noData_nodes); if (new_mesh->getNElements() == 0) { delete new_mesh; diff --git a/MeshLib/MeshEditing/removeMeshEntities.cpp b/MeshLib/MeshEditing/removeMeshEntities.cpp index c7e5639723040f69f8eeeef411fe138f58c4ef9f..86c5dfcf16aa3a8107b96a7a749772b4d345a6a6 100644 --- a/MeshLib/MeshEditing/removeMeshEntities.cpp +++ b/MeshLib/MeshEditing/removeMeshEntities.cpp @@ -144,39 +144,6 @@ void MeshElementRemoval::copyNodesElements( const std::vector<MeshLib::Node*> &s } -MeshLib::Mesh* removeMeshNodes(const MeshLib::Mesh &mesh, const std::vector<size_t> &nodes) -{ - MeshLib::Mesh* new_mesh (new MeshLib::Mesh(mesh)); - - // delete nodes and their connected elements and replace them with null pointers - const size_t delNodes = nodes.size(); - std::vector<MeshLib::Node*> mesh_nodes = new_mesh->getNodes(); - for (size_t i = 0; i < delNodes; ++i) - { - const MeshLib::Node* node = new_mesh->getNode(i); - std::vector<MeshLib::Element*> conn_elems = node->getElements(); - - for (size_t j = 0; j < conn_elems.size(); ++j) - { - delete conn_elems[j]; - conn_elems[j] = nullptr; - } - delete mesh_nodes[i]; - mesh_nodes[i] = nullptr; - } - - // erase null pointers from node- and element vectors - std::vector<MeshLib::Element*> elements = new_mesh->getElements(); - auto elem_vec_end = std::remove(elements.begin(), elements.end(), nullptr); - elements.erase(elem_vec_end, elements.end()); - - auto node_vec_end = std::remove(mesh_nodes.begin(), mesh_nodes.end(), nullptr); - mesh_nodes.erase(node_vec_end, mesh_nodes.end()); - - new_mesh->resetNodeIDs(); // after removing nodes set new node-IDs - - return new_mesh; -} diff --git a/MeshLib/MeshEditing/removeMeshEntities.h b/MeshLib/MeshEditing/removeMeshEntities.h index b82cd103e18f0d365a3a176898f09e18a99a6e42..29819fc5e7bb81b4ff17fd098c667752848cbe10 100644 --- a/MeshLib/MeshEditing/removeMeshEntities.h +++ b/MeshLib/MeshEditing/removeMeshEntities.h @@ -32,9 +32,6 @@ public: MeshElementRemoval::~MeshElementRemoval(); - /// Removes the mesh nodes (and connected elements) given in the nodes-list from the mesh. - MeshLib::Mesh* removeMeshNodes(const std::vector<std::size_t> &nodes) const; - /// Removes all mesh elements marked by search-methods. MeshLib::Mesh* removeMeshElements() const; diff --git a/MeshLib/MeshEditing/removeMeshNodes.cpp b/MeshLib/MeshEditing/removeMeshNodes.cpp new file mode 100644 index 0000000000000000000000000000000000000000..98b494015fd1d6190b789ed79725f6886d1e8714 --- /dev/null +++ b/MeshLib/MeshEditing/removeMeshNodes.cpp @@ -0,0 +1,57 @@ +/** + * \file + * \author Karsten Rink + * \date 2013-04-04 + * \brief Implementation of removeMeshNodes. + * + * \copyright + * Copyright (c) 2013, OpenGeoSys Community (http://www.opengeosys.org) + * Distributed under a Modified BSD License. + * See accompanying file LICENSE.txt or + * http://www.opengeosys.org/project/license + * + */ + +#include "removeMeshNodes.h" +#include "Mesh.h" +#include "Node.h" +#include "Elements/Element.h" + +namespace MeshLib { + +MeshLib::Mesh* removeMeshNodes(const MeshLib::Mesh &mesh, const std::vector<size_t> &nodes) +{ + MeshLib::Mesh* new_mesh (new MeshLib::Mesh(mesh)); + + // delete nodes and their connected elements and replace them with null pointers + const size_t delNodes = nodes.size(); + std::vector<MeshLib::Node*> mesh_nodes = new_mesh->getNodes(); + for (size_t i = 0; i < delNodes; ++i) + { + const MeshLib::Node* node = new_mesh->getNode(i); + std::vector<MeshLib::Element*> conn_elems = node->getElements(); + + for (size_t j = 0; j < conn_elems.size(); ++j) + { + delete conn_elems[j]; + conn_elems[j] = nullptr; + } + delete mesh_nodes[i]; + mesh_nodes[i] = nullptr; + } + + // erase null pointers from node- and element vectors + std::vector<MeshLib::Element*> elements = new_mesh->getElements(); + auto elem_vec_end = std::remove(elements.begin(), elements.end(), nullptr); + elements.erase(elem_vec_end, elements.end()); + + auto node_vec_end = std::remove(mesh_nodes.begin(), mesh_nodes.end(), nullptr); + mesh_nodes.erase(node_vec_end, mesh_nodes.end()); + + new_mesh->resetNodeIDs(); // after removing nodes set new node-IDs + + return new_mesh; +} + + +} // end namespace MeshLib diff --git a/MeshLib/MeshEditing/removeMeshNodes.h b/MeshLib/MeshEditing/removeMeshNodes.h new file mode 100644 index 0000000000000000000000000000000000000000..d1ecde3c98631abc83f3b0804ab7a72bc1245785 --- /dev/null +++ b/MeshLib/MeshEditing/removeMeshNodes.h @@ -0,0 +1,30 @@ +/** + * \file + * \author Karsten Rink + * \date 2013-04-04 + * \brief Definition of the removeMeshNodes + * + * \copyright + * Copyright (c) 2013, OpenGeoSys Community (http://www.opengeosys.org) + * Distributed under a Modified BSD License. + * See accompanying file LICENSE.txt or + * http://www.opengeosys.org/project/license + * + */ + +#ifndef REMOVEMESHNODES_H +#define REMOVEMESHNODES_H + +#include <vector> + +namespace MeshLib { + +// forward declarations +class Mesh; + + /// Removes the mesh nodes (and connected elements) given in the nodes-list from the mesh. + MeshLib::Mesh* removeMeshNodes(const MeshLib::Mesh &mesh, const std::vector<std::size_t> &nodes); + +} // end namespace MeshLib + +#endif //REMOVEMESHNODES_H diff --git a/Utils/MeshEdit/removeMeshNodes.cpp b/Utils/MeshEdit/removeMeshNodes.cpp index 06f6b10267ccd82a211cac5cbb37bbe27c36b79f..d4b46edd386c07df8dccf4e9b4203de3e1ac99d5 100644 --- a/Utils/MeshEdit/removeMeshNodes.cpp +++ b/Utils/MeshEdit/removeMeshNodes.cpp @@ -8,7 +8,7 @@ #include "Legacy/MeshIO.h" #include "Mesh.h" #include "Node.h" -#include "MeshEditing/removeMeshEntities.h" +#include "MeshEditing/removeMeshNodes.h" int main (int argc, char* argv[]) {