diff --git a/Applications/DataExplorer/DataView/DirectConditionGenerator.cpp b/Applications/DataExplorer/DataView/DirectConditionGenerator.cpp index 81d7428537a36087b0b79e623ac217c189ddea5a..34e9b4ddbd0b7ca0d221e8a05bfbb3048b00f995 100644 --- a/Applications/DataExplorer/DataView/DirectConditionGenerator.cpp +++ b/Applications/DataExplorer/DataView/DirectConditionGenerator.cpp @@ -30,36 +30,45 @@ #include <cmath> #include <limits> -const std::vector< std::pair<std::size_t,double> >& DirectConditionGenerator::directToSurfaceNodes(const MeshLib::Mesh &mesh, const std::string &filename) +const std::vector<std::pair<std::size_t, double>>& +DirectConditionGenerator::directToSurfaceNodes(const MeshLib::Mesh& mesh, + const std::string& filename) { if (_direct_values.empty()) { - GeoLib::Raster* raster (GeoLib::IO::AsciiRasterInterface::readRaster(filename)); - if (! raster) { - ERR("Error in DirectConditionGenerator::directToSurfaceNodes() - could not load raster file."); + GeoLib::Raster* raster( + GeoLib::IO::AsciiRasterInterface::readRaster(filename)); + if (!raster) + { + ERR("Error in DirectConditionGenerator::directToSurfaceNodes() - " + "could not load raster file."); return _direct_values; } - const MathLib::Vector3 dir(0,0,-1); - const std::vector<GeoLib::Point*> surface_nodes(MeshLib::MeshSurfaceExtraction::getSurfaceNodes(mesh, dir, 90) ); - const std::size_t nNodes(surface_nodes.size()); - const double no_data (raster->getHeader().no_data); - _direct_values.reserve(nNodes); - for (std::size_t i=0; i<nNodes; i++) + const MathLib::Vector3 dir(0, 0, -1); + const std::vector<MeshLib::Node*> surface_nodes( + MeshLib::MeshSurfaceExtraction::getSurfaceNodes(mesh, dir, 90)); + const double no_data(raster->getHeader().no_data); + _direct_values.reserve(surface_nodes.size()); + for (auto const* surface_node : surface_nodes) { - double val (raster->getValueAtPoint(*surface_nodes[i])); + double val(raster->getValueAtPoint(*surface_node)); val = (val == no_data) ? 0 : val; - _direct_values.push_back (std::pair<std::size_t, double>(surface_nodes[i]->getID(), val)); + _direct_values.push_back( + std::make_pair(surface_node->getID(), val)); } delete raster; + + std::for_each(surface_nodes.begin(), surface_nodes.end(), + std::default_delete<MeshLib::Node>()); } else - ERR("Error in DirectConditionGenerator::directToSurfaceNodes() - Data vector contains outdated values."); + ERR("Error in DirectConditionGenerator::directToSurfaceNodes() - Data " + "vector contains outdated values."); return _direct_values; } - const std::vector< std::pair<std::size_t,double> >& DirectConditionGenerator::directWithSurfaceIntegration(MeshLib::Mesh &mesh, const std::string &filename, double scaling) { if (!_direct_values.empty()) { diff --git a/Applications/Utils/MeshGeoTools/ComputeSurfaceNodeIDsInPolygonalRegion.cpp b/Applications/Utils/MeshGeoTools/ComputeSurfaceNodeIDsInPolygonalRegion.cpp index 75db24be21a13347bf068ec8e378a0b4f87f54f4..5359216727013cedd8cecb021d96a914517cbe9e 100644 --- a/Applications/Utils/MeshGeoTools/ComputeSurfaceNodeIDsInPolygonalRegion.cpp +++ b/Applications/Utils/MeshGeoTools/ComputeSurfaceNodeIDsInPolygonalRegion.cpp @@ -110,11 +110,12 @@ int main (int argc, char* argv[]) }; std::vector<double> areas(computeElementTopSurfaceAreas(*mesh, dir, angle)); - std::vector<GeoLib::Point*> all_sfc_pnts( + std::vector<MeshLib::Node*> all_sfc_nodes( MeshLib::MeshSurfaceExtraction::getSurfaceNodes(*mesh, dir, angle) ); - std::for_each(all_sfc_pnts.begin(), all_sfc_pnts.end(), [](GeoLib::Point* p) { (*p)[2] = 0.0; }); + std::for_each(all_sfc_nodes.begin(), all_sfc_nodes.end(), + [](MeshLib::Node* p) { (*p)[2] = 0.0; }); std::vector<MeshLib::Node*> const& mesh_nodes(mesh->getNodes()); GeoLib::PolylineVec const* ply_vec( @@ -134,9 +135,9 @@ int main (int argc, char* argv[]) GeoLib::Polygon const& polygon(*(plys[j])); // ids of mesh nodes on surface that are within the given polygon std::vector<std::pair<std::size_t, double>> ids_and_areas; - for (std::size_t k(0); k<all_sfc_pnts.size(); k++) { - GeoLib::Point const& pnt(*(all_sfc_pnts[k])); - if (polygon.isPntInPolygon(pnt)) { + for (std::size_t k(0); k<all_sfc_nodes.size(); k++) { + MeshLib::Node const& pnt(*(all_sfc_nodes[k])); + if (polygon.isPntInPolygon(pnt[0], pnt[1], pnt[2])) { ids_and_areas.push_back(std::make_pair(pnt.getID(), areas[k])); } } @@ -161,7 +162,8 @@ int main (int argc, char* argv[]) writeToFile(id_and_area_fname, csv_fname, ids_and_areas, mesh_nodes); } - std::for_each(all_sfc_pnts.begin(), all_sfc_pnts.end(), std::default_delete<GeoLib::Point>()); + std::for_each(all_sfc_nodes.begin(), all_sfc_nodes.end(), + std::default_delete<MeshLib::Node>()); return 0; } diff --git a/MeshLib/MeshSurfaceExtraction.cpp b/MeshLib/MeshSurfaceExtraction.cpp index 57a8f6373ebac78a8bdd89b7d62f0d24f41bf168..4f87902f17f0ad0d372d6bed90bfa52225b97d8a 100644 --- a/MeshLib/MeshSurfaceExtraction.cpp +++ b/MeshLib/MeshSurfaceExtraction.cpp @@ -18,8 +18,6 @@ #include "logog/include/logog.hpp" -#include "GeoLib/Point.h" - #include "MeshLib/Mesh.h" #include "MeshLib/Elements/Line.h" #include "MeshLib/Elements/Tri.h" @@ -223,51 +221,48 @@ void MeshSurfaceExtraction::get2DSurfaceElements(const std::vector<MeshLib::Elem } } -void MeshSurfaceExtraction::get2DSurfaceNodes(std::vector<MeshLib::Node*> &sfc_nodes, std::size_t n_all_nodes, const std::vector<MeshLib::Element*> &sfc_elements, std::vector<std::size_t> &node_id_map) +void MeshSurfaceExtraction::get2DSurfaceNodes( + std::vector<MeshLib::Node*>& sfc_nodes, std::size_t n_all_nodes, + const std::vector<MeshLib::Element*>& sfc_elements, + std::vector<std::size_t>& node_id_map) { - const std::size_t nNewElements (sfc_elements.size()); std::vector<const MeshLib::Node*> tmp_nodes(n_all_nodes, nullptr); - for (std::size_t i=0; i<nNewElements; ++i) + for (auto const* elem : sfc_elements) { - const MeshLib::Element* elem (sfc_elements[i]); - for (unsigned j=0; j<elem->getNumberOfBaseNodes(); ++j) + for (unsigned j = 0; j < elem->getNumberOfBaseNodes(); ++j) { - const MeshLib::Node* node (elem->getNode(j)); + const MeshLib::Node* node(elem->getNode(j)); tmp_nodes[node->getID()] = node; } } - const std::size_t nNodes (tmp_nodes.size()); - for (unsigned i=0; i<nNodes; ++i) + const std::size_t nNodes(tmp_nodes.size()); + for (unsigned i = 0; i < nNodes; ++i) { if (tmp_nodes[i]) { node_id_map[i] = sfc_nodes.size(); - sfc_nodes.push_back(new MeshLib::Node(tmp_nodes[i]->getCoords(), tmp_nodes[i]->getID())); + sfc_nodes.push_back(new MeshLib::Node(*tmp_nodes[i])); } } } -std::vector<GeoLib::Point*> MeshSurfaceExtraction::getSurfaceNodes(const MeshLib::Mesh &mesh, const MathLib::Vector3 &dir, double angle) +std::vector<MeshLib::Node*> MeshSurfaceExtraction::getSurfaceNodes( + const MeshLib::Mesh& mesh, const MathLib::Vector3& dir, double angle) { INFO ("Extracting surface nodes..."); std::vector<MeshLib::Element*> sfc_elements; - get2DSurfaceElements(mesh.getElements(), sfc_elements, dir, angle, mesh.getDimension()); + get2DSurfaceElements(mesh.getElements(), sfc_elements, dir, angle, + mesh.getDimension()); std::vector<MeshLib::Node*> sfc_nodes; std::vector<std::size_t> node_id_map(mesh.getNumberOfNodes()); - get2DSurfaceNodes(sfc_nodes, mesh.getNumberOfNodes(), sfc_elements, node_id_map); + get2DSurfaceNodes(sfc_nodes, mesh.getNumberOfNodes(), sfc_elements, + node_id_map); for (auto e : sfc_elements) delete e; - const std::size_t nNodes (sfc_nodes.size()); - std::vector<GeoLib::Point*> surface_pnts(nNodes); - for (std::size_t i=0; i<nNodes; ++i) - { - surface_pnts[i] = new GeoLib::Point(*(sfc_nodes[i]), sfc_nodes[i]->getID()); - delete sfc_nodes[i]; - } - return surface_pnts; + return sfc_nodes; } } // end namespace MeshLib diff --git a/MeshLib/MeshSurfaceExtraction.h b/MeshLib/MeshSurfaceExtraction.h index 3a213a6810c068b2fd6ee8937e57401b9b7031f0..d22ec59145b60a21328da14f93bbe2df5e24cf1a 100644 --- a/MeshLib/MeshSurfaceExtraction.h +++ b/MeshLib/MeshSurfaceExtraction.h @@ -20,10 +20,6 @@ #include "MathLib/Vector3.h" -namespace GeoLib { - class Point; -} - namespace MeshLib { // forward declarations class Mesh; @@ -40,7 +36,8 @@ public: static std::vector<double> getSurfaceAreaForNodes(const MeshLib::Mesh &mesh); /// Returns the surface nodes of a mesh. - static std::vector<GeoLib::Point*> getSurfaceNodes(const MeshLib::Mesh &mesh, const MathLib::Vector3 &dir, double angle); + static std::vector<MeshLib::Node*> getSurfaceNodes( + const MeshLib::Mesh& mesh, const MathLib::Vector3& dir, double angle); /** * Returns the 2d-element mesh representing the surface of the given mesh. @@ -72,10 +69,19 @@ public: private: /// Functionality needed for getSurfaceNodes() and getMeshSurface() - static void get2DSurfaceElements(const std::vector<MeshLib::Element*> &all_elements, std::vector<MeshLib::Element*> &sfc_elements, const MathLib::Vector3 &dir, double angle, unsigned mesh_dimension); + static void get2DSurfaceElements( + const std::vector<MeshLib::Element*>& all_elements, + std::vector<MeshLib::Element*>& sfc_elements, + const MathLib::Vector3& dir, + double angle, + unsigned mesh_dimension); /// Functionality needed for getSurfaceNodes() and getMeshSurface() - static void get2DSurfaceNodes(std::vector<MeshLib::Node*> &sfc_nodes, std::size_t n_all_nodes, const std::vector<MeshLib::Element*> &sfc_elements, std::vector<std::size_t> &node_id_map); + static void get2DSurfaceNodes( + std::vector<MeshLib::Node*>& sfc_nodes, + std::size_t n_all_nodes, + const std::vector<MeshLib::Element*>& sfc_elements, + std::vector<std::size_t>& node_id_map); }; } // end namespace MeshLib