OGS
MeshNodesAlongPolyline.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
5
6#include <algorithm>
7
8#include "BaseLib/quicksort.h"
9#include "GeoLib/Polyline.h"
10#include "MathLib/MathTools.h"
11#include "MeshLib/Mesh.h"
12#include "MeshLib/Node.h"
13
14namespace MeshGeoToolsLib
15{
17 GeoLib::Polyline const& ply,
18 double epsilon_radius,
19 SearchAllNodes search_all_nodes)
20 : _mesh(mesh), _ply(ply)
21{
22 assert(epsilon_radius > 0);
23 const std::size_t n_nodes(search_all_nodes == SearchAllNodes::Yes
24 ? _mesh.getNumberOfNodes()
25 : _mesh.computeNumberOfBaseNodes());
26 auto& mesh_nodes = _mesh.getNodes();
27 // loop over all nodes
28 for (std::size_t i = 0; i < n_nodes; i++)
29 {
30 double dist =
31 _ply.getDistanceAlongPolyline(*mesh_nodes[i], epsilon_radius);
32 if (dist >= 0.0)
33 {
34 _msh_node_ids.push_back(mesh_nodes[i]->getID());
36 }
37 }
38
39 // sort the nodes along the polyline according to their distances
43}
44
46{
47 return _mesh;
48}
49
50std::vector<std::size_t> const& MeshNodesAlongPolyline::getNodeIDs() const
51{
52 return _msh_node_ids;
53}
54
59} // end namespace MeshGeoToolsLib
Class Polyline consists mainly of a reference to a point vector and a vector that stores the indices ...
Definition Polyline.h:29
std::vector< std::size_t > const & getNodeIDs() const
GeoLib::Polyline const & getPolyline() const
MeshLib::Mesh const & getMesh() const
return the mesh object
MeshNodesAlongPolyline(MeshLib::Mesh const &mesh, GeoLib::Polyline const &ply, double epsilon_radius, SearchAllNodes search_all_nodes)
void quicksort(It1 first1, It1 last1, It2 first2, Comparator compare)
Definition quicksort.h:17