49 [[nodiscard]]
static std::unique_ptr<meshkernel::UndoAction>
Compute(
Mesh2D& mesh);
64 [[nodiscard]]
static std::unique_ptr<meshkernel::UndoAction>
Compute(
Mesh2D& mesh,
66 const std::vector<double>& depthValues,
68 const double minimumDepthRefinement);
78 [[nodiscard]]
static std::unique_ptr<meshkernel::UndoAction>
Compute(
Mesh2D& mesh,
83 const double minimumDepthRefinement);
89 enum class NodeMask :
char
100 static constexpr UInt InitialEdgeArraySize = 100;
103 static constexpr UInt MaximumNumberOfNodesInNewlyCreatedElements = 4;
107 using EdgeNodes = std::array<UInt, 4>;
113 static void InitialiseBoundaryNodes(
const Mesh2D& mesh, std::vector<NodeMask>& nodeMask);
119 static void InitialiseCornerNodes(
const Mesh2D& mesh, std::vector<NodeMask>& nodeMask);
125 static void InitialiseFaceNodes(
const Mesh2D& mesh, std::vector<NodeMask>& nodeMask);
128 static void RegisterNodesInsidePolygon(
const Mesh2D& mesh,
130 std::vector<NodeMask>& nodeMask);
136 static std::vector<NodeMask> InitialiseNodeMask(
const Mesh2D& mesh,
const Polygons& polygon);
141 static std::vector<NodeMask> InitialiseDepthBasedNodeMask(
const Mesh2D& mesh,
143 const std::vector<double>& depthValues,
145 const double minimumDepthRefinement,
146 bool& refinementRequested);
149 static void RefineNodeMaskBasedOnDepths(
const Mesh2D& mesh,
150 const std::vector<double>& depthValues,
152 const double minimumDepthRefinement,
153 std::vector<NodeMask>& nodeMask,
154 bool& refinementRequested);
161 static void ComputeNewNodes(
Mesh2D& mesh, std::vector<EdgeNodes>& newNodes, std::vector<NodeMask>& nodeMask);
168 static void ConnectNodes(
Mesh2D& mesh,
const std::vector<EdgeNodes>& newNodes,
const UInt numEdges);
171 static std::vector<UInt> GetNodesToConnect(
const Mesh2D& mesh,
172 const std::vector<NodeMask>& nodeMask,
173 const std::vector<UInt>& newEdges,
174 const std::vector<EdgeNodes>& newNodes,
175 const UInt edgeCount,
176 const UInt nodeIndex);
179 static void ConnectNodes(
Mesh2D& mesh,
180 const NodeMask nodeMask,
181 const std::vector<UInt>& nodesToConnect,
182 const UInt edgeCount,
183 const UInt nodeIndex);
191 static void CreateMissingBoundaryEdges(
Mesh2D& mesh,
const UInt numNodes,
const std::vector<EdgeNodes>& newNodes, std::vector<NodeMask>& nodeMask);
198 static void ComputeNewFaceNodes(
Mesh2D& mesh, std::vector<EdgeNodes>& newNodes, std::vector<NodeMask>& nodeMask);
206 static void ComputeNewEdgeNodes(
Mesh2D& mesh,
const UInt numEdges, std::vector<EdgeNodes>& newNodes, std::vector<NodeMask>& nodeMask);
215 static void ConnectEdges(
Mesh2D& mesh,
216 const UInt currentNode,
217 const std::vector<EdgeNodes>& newNodes,
219 std::vector<UInt>& newEdges);
227 static void ConnectFaceNodes(
Mesh2D& mesh,
228 const UInt currentFace,
229 const std::vector<EdgeNodes>& newNodes,
230 std::vector<NodeMask>& nodeMask);
240 static void ConnectNewNodes(
Mesh2D& mesh,
const std::vector<EdgeNodes>& newNodes,
const UInt numNodes,
const UInt numEdges,
const UInt numFaces, std::vector<NodeMask>& nodeMask);
250 static void StoreNewNode(
const Mesh2D& mesh,
const UInt nodeId,
const UInt edge1Index,
const UInt edge2Index,
const UInt newNodeId, std::vector<EdgeNodes>& newNodes);
259 static void FindPatchIds(
const Mesh2D& mesh,
260 const UInt currentNode,
261 std::vector<UInt>& sharedFaces,
262 std::vector<UInt>& connectedNodes,
263 std::vector<std::vector<UInt>>& faceNodeMapping);
270 static void Administrate(
Mesh2D& mesh,
const UInt numNodes,
const std::vector<NodeMask>& nodeMask);
static std::unique_ptr< meshkernel::UndoAction > Compute(Mesh2D &mesh, const Polygons &polygon, const SampleInterpolator &interpolator, const int propertyId, const MeshRefinementParameters &refinementParameters, const double minimumDepthRefinement)
Compute the Casulli refinement for the part of the mesh inside the polygon.
static std::unique_ptr< meshkernel::UndoAction > Compute(Mesh2D &mesh, const Polygons &polygon, const std::vector< double > &depthValues, const MeshRefinementParameters &refinementParameters, const double minimumDepthRefinement)
Compute the Casulli refinement for the part of the mesh inside the polygon.