diff --git a/MeshGeoToolsLib/MeshNodeSearcher.cpp b/MeshGeoToolsLib/MeshNodeSearcher.cpp index 916b9e88644fdabdfa53544eb71d48bb9e222d47..6e2af20e5ff95318962148d10b2eda1dec9dbf6b 100644 --- a/MeshGeoToolsLib/MeshNodeSearcher.cpp +++ b/MeshGeoToolsLib/MeshNodeSearcher.cpp @@ -9,6 +9,9 @@ */ #include "MeshNodeSearcher.h" + +#include <typeinfo> + #include "HeuristicSearchLength.h" #include "MeshNodesAlongPolyline.h" #include "MeshNodesAlongSurface.h" @@ -16,11 +19,9 @@ #include <logog/include/logog.hpp> -// GeoLib #include "GeoLib/Point.h" #include "GeoLib/Polyline.h" -// MeshLib #include "MeshLib/Elements/Element.h" #include "MeshLib/Mesh.h" #include "MeshLib/Node.h" @@ -30,7 +31,6 @@ namespace MeshGeoToolsLib std::vector<std::unique_ptr<MeshNodeSearcher>> MeshNodeSearcher::_mesh_node_searchers; - MeshNodeSearcher::MeshNodeSearcher( MeshLib::Mesh const& mesh, MeshGeoToolsLib::SearchLength&& search_length_algorithm, @@ -154,10 +154,26 @@ MeshNodeSearcher& MeshNodeSearcher::getMeshNodeSearcher( if (_mesh_node_searchers.size() < mesh_id+1) _mesh_node_searchers.resize(mesh_id+1); - if (!_mesh_node_searchers[mesh_id]) + if (_mesh_node_searchers[mesh_id]) + { + // recreate searcher if search length algorithm does not fit + if (typeid(_mesh_node_searchers[mesh_id]->_search_length_algorithm) != + typeid(search_length_algorithm) || + _mesh_node_searchers[mesh_id] + ->_search_length_algorithm.getSearchLength() != + search_length_algorithm.getSearchLength()) + { + _mesh_node_searchers[mesh_id].reset( + new MeshGeoToolsLib::MeshNodeSearcher( + mesh, std::move(search_length_algorithm))); + } + } + else + { _mesh_node_searchers[mesh_id].reset( - new MeshGeoToolsLib::MeshNodeSearcher(mesh, - search_length_algorithm)); + new MeshGeoToolsLib::MeshNodeSearcher( + mesh, std::move(search_length_algorithm))); + } return *_mesh_node_searchers[mesh_id]; }