32#include "MeshKernel/Constants.hpp"
33#include "MeshKernel/Definitions.hpp"
34#include "MeshKernel/Exceptions.hpp"
35#include "MeshKernel/Point.hpp"
50 using Edge = std::pair<UInt, UInt>;
53 static bool IsValid(
const UInt value)
55 return value != constants::missing::uintValue;
58 static bool IsValidEdge(
const Edge& edge)
60 return IsValid(edge.first) && IsValid(edge.second);
69 return edge[0] == elementId ? edge[1] : edge[0];
78 return node == edge.first ? edge.second : edge.first;
84 static UInt EdgeNodeIndex(
const Edge& edge,
UInt position)
90 else if (position == 1)
96 throw ConstraintError(
"Position out of bounds: {} not in [0 .. 1]", position);
104 double value = constants::missing::doubleValue;
122 const double** samplesYCoordinate,
123 const double** samplesValue)
126 std::vector<Sample> samples(numSamples);
127 for (
UInt i = 0; i < samples.size(); ++i)
129 samples[i].x = (*samplesXCoordinate)[i];
130 samples[i].y = (*samplesYCoordinate)[i];
131 samples[i].value = (*samplesValue)[i];
137 [[nodiscard]]
bool IsValid(
const double missingValue = constants::missing::doubleValue)
const
139 bool isInvalid =
IsEqual(
x, missingValue) ||
137 [[nodiscard]]
bool IsValid(
const double missingValue = constants::missing::doubleValue)
const {
…}
147 static std::vector<Edge> ConvertToEdgeNodesVector(
int numEdges,
const int*
const edge_nodes)
149 std::vector<Edge> edges(numEdges);
152 for (
auto e = 0; e < numEdges; e++)
154 edges[e].first = edge_nodes[ei];
156 edges[e].second = edge_nodes[ei];
163 static std::vector<Point> ConvertToNodesVector(
int numNodes,
164 const double*
const node_x,
165 const double*
const node_y)
167 std::vector<Point> nodes(numNodes);
168 for (
auto n = 0; n < numNodes; n++)
170 nodes[n].x = node_x[n];
171 nodes[n].y = node_y[n];
177 static std::tuple<int, double*, double*> ConvertFromNodesVector(
const std::vector<Point>& nodes);
180 static std::vector<Point> ConvertToFaceCentersVector(
int numFaces,
181 const double*
const facex,
182 const double*
const facey)
184 std::vector<Point> faceCenters(numFaces);
185 for (
auto n = 0; n < numFaces; n++)
187 faceCenters[n].x = facex[n];
188 faceCenters[n].y = facey[n];
194 static std::vector<std::vector<UInt>> ConvertToFaceNodesVector(
int num_faces,
195 const int*
const face_nodes,
196 const int*
const nodes_per_face)
198 std::vector<std::vector<UInt>> result;
199 result.reserve(num_faces);
201 std::vector<UInt> nodes;
203 for (
auto f = 0; f < num_faces; f++)
206 for (
auto n = 0; n < nodes_per_face[f]; n++)
208 nodes.emplace_back(
static_cast<UInt>(face_nodes[index]));
211 result.emplace_back(nodes);
A struct describing a point in a two-dimensional space.
Definition Point.hpp:41
double x
X-coordinate.
Definition Point.hpp:43
double y
Y-coordinate.
Definition Point.hpp:44
A struct describing a sample with two coordinates and a value.
Definition Entities.hpp:102
Sample()=default
Default constructor.
static auto ConvertToSamples(int numSamples, const double **samplesXCoordinate, const double **samplesYCoordinate, const double **samplesValue)
Convert double arrays to std::vector<Sample>
Definition Entities.hpp:121
Sample(double x, double y, double value)
Constructor taking coordinates and values.
Definition Entities.hpp:110
double value
Value.
Definition Entities.hpp:104
bool IsValid(const double missingValue=constants::missing::doubleValue) const
Determines if the sample instance has valid coordinates.
Definition Entities.hpp:137
Contains the logic of the C++ static library.
Definition AveragingInterpolation.hpp:37
std::pair< UInt, UInt > Edge
Describes an edge with two indices.
Definition Entities.hpp:50
bool IsEqual(const Point &p1, const Point &p2, const double epsilon)
Test points for equality upto a tolerance.
Definition Point.hpp:450
std::uint32_t UInt
Integer type used when indexing mesh graph entities.
Definition Definitions.hpp:39
std::array< UInt, 2 > EdgeFaces
Contains the ID's of elements either side of an edge.
Definition Entities.hpp:64