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) ||
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);