From a8ad8918c26a882db655c5ad44d3cc5bfe20e851 Mon Sep 17 00:00:00 2001
From: Karsten Rink <karsten.rink@ufz.de>
Date: Tue, 15 Oct 2013 18:26:25 +0200
Subject: [PATCH] placed removeMeshNodes() outside of new class again, does not
 fit anymore

---
 Gui/DataView/MshLayerMapper.cpp            |  2 +-
 MeshLib/MeshEditing/removeMeshEntities.cpp | 33 -------------
 MeshLib/MeshEditing/removeMeshEntities.h   |  3 --
 MeshLib/MeshEditing/removeMeshNodes.cpp    | 57 ++++++++++++++++++++++
 MeshLib/MeshEditing/removeMeshNodes.h      | 30 ++++++++++++
 Utils/MeshEdit/removeMeshNodes.cpp         |  2 +-
 6 files changed, 89 insertions(+), 38 deletions(-)
 create mode 100644 MeshLib/MeshEditing/removeMeshNodes.cpp
 create mode 100644 MeshLib/MeshEditing/removeMeshNodes.h

diff --git a/Gui/DataView/MshLayerMapper.cpp b/Gui/DataView/MshLayerMapper.cpp
index e699dc1fd7a..7a1bd056bb3 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 c7e56397230..86c5dfcf16a 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 b82cd103e18..29819fc5e7b 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 00000000000..98b494015fd
--- /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 00000000000..d1ecde3c986
--- /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 06f6b10267c..d4b46edd386 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[])
 {
-- 
GitLab