OGS
MeshNodesOnPoint.cpp
Go to the documentation of this file.
1// SPDX-FileCopyrightText: Copyright (c) OpenGeoSys Community (opengeosys.org)
2// SPDX-License-Identifier: BSD-3-Clause
3
4#include "MeshNodesOnPoint.h"
5
6#include <range/v3/algorithm/copy_if.hpp>
7
8#include "MeshLib/Mesh.h"
9
10namespace MeshGeoToolsLib
11{
13 GeoLib::Grid<MeshLib::Node> const& mesh_grid,
14 GeoLib::Point const& pnt,
15 double epsilon_radius,
16 SearchAllNodes search_all_nodes)
17 : _mesh(mesh), _pnt(pnt)
18{
19 std::vector<std::size_t> vec_ids(
20 mesh_grid.getPointsInEpsilonEnvironment(pnt, epsilon_radius));
21 if (search_all_nodes == SearchAllNodes::Yes)
22 {
23 _msh_node_ids = vec_ids;
24 }
25 else
26 {
27 auto is_base_node = [this](std::size_t const id)
28 {
29 return MeshLib::isBaseNode(*_mesh.getNode(id),
30 _mesh.getElementsConnectedToNode(id));
31 };
32
33 ranges::copy_if(
34 vec_ids, std::back_inserter(_msh_node_ids), is_base_node);
35 }
36}
37
38} // end namespace MeshGeoToolsLib
std::vector< std::size_t > getPointsInEpsilonEnvironment(P const &pnt, double eps) const
Definition Grid.h:665
MeshNodesOnPoint(MeshLib::Mesh const &mesh, GeoLib::Grid< MeshLib::Node > const &mesh_grid, GeoLib::Point const &pnt, double epsilon_radius, SearchAllNodes search_all_nodes)
std::vector< std::size_t > _msh_node_ids
bool isBaseNode(Node const &node, std::vector< Element const * > const &elements_connected_to_node)
Definition Mesh.cpp:336