34 #include "MeshKernel/Mesh2D.hpp"
35 #include "MeshKernel/Parameters.hpp"
36 #include "MeshKernel/Polygons.hpp"
37 #include "MeshKernel/UndoActions/UndoAction.hpp"
48 [[nodiscard]]
static std::unique_ptr<meshkernel::UndoAction>
Compute(
Mesh2D& mesh);
54 [[nodiscard]]
static std::unique_ptr<meshkernel::UndoAction>
Compute(
Mesh2D& mesh,
const Polygons& polygon);
60 enum class NodeMask : char
71 static constexpr
UInt InitialEdgeArraySize = 100;
74 static constexpr
UInt MaximumNumberOfNodesInNewlyCreatedElements = 4;
78 using EdgeNodes = std::array<UInt, 4>;
84 static void InitialiseBoundaryNodes(
const Mesh2D& mesh, std::vector<NodeMask>& nodeMask);
90 static void InitialiseCornerNodes(
const Mesh2D& mesh, std::vector<NodeMask>& nodeMask);
96 static void InitialiseFaceNodes(
const Mesh2D& mesh, std::vector<NodeMask>& nodeMask);
99 static void RegisterNodesInsidePolygon(
const Mesh2D& mesh,
101 std::vector<NodeMask>& nodeMask);
107 static std::vector<NodeMask> InitialiseNodeMask(
const Mesh2D& mesh,
const Polygons& polygon);
114 static void ComputeNewNodes(
Mesh2D& mesh, std::vector<EdgeNodes>& newNodes, std::vector<NodeMask>& nodeMask);
121 static void ConnectNodes(
Mesh2D& mesh,
const std::vector<EdgeNodes>& newNodes,
const UInt numEdges);
124 static std::vector<UInt> GetNodesToConnect(
const Mesh2D& mesh,
125 const std::vector<NodeMask>& nodeMask,
126 const std::vector<UInt>& newEdges,
127 const std::vector<EdgeNodes>& newNodes,
128 const UInt edgeCount,
129 const UInt nodeIndex);
132 static void ConnectNodes(
Mesh2D& mesh,
133 const NodeMask nodeMask,
134 const std::vector<UInt>& nodesToConnect,
135 const UInt edgeCount,
136 const UInt nodeIndex);
144 static void CreateMissingBoundaryEdges(
Mesh2D& mesh,
const UInt numNodes,
const std::vector<EdgeNodes>& newNodes, std::vector<NodeMask>& nodeMask);
151 static void ComputeNewFaceNodes(
Mesh2D& mesh, std::vector<EdgeNodes>& newNodes, std::vector<NodeMask>& nodeMask);
159 static void ComputeNewEdgeNodes(
Mesh2D& mesh,
const UInt numEdges, std::vector<EdgeNodes>& newNodes, std::vector<NodeMask>& nodeMask);
168 static void ConnectEdges(
Mesh2D& mesh,
169 const UInt currentNode,
170 const std::vector<EdgeNodes>& newNodes,
172 std::vector<UInt>& newEdges);
180 static void ConnectFaceNodes(
Mesh2D& mesh,
181 const UInt currentFace,
182 const std::vector<EdgeNodes>& newNodes,
183 std::vector<NodeMask>& nodeMask);
193 static void ConnectNewNodes(
Mesh2D& mesh,
const std::vector<EdgeNodes>& newNodes,
const UInt numNodes,
const UInt numEdges,
const UInt numFaces, std::vector<NodeMask>& nodeMask);
203 static void StoreNewNode(
const Mesh2D& mesh,
const UInt nodeId,
const UInt edge1Index,
const UInt edge2Index,
const UInt newNodeId, std::vector<EdgeNodes>& newNodes);
212 static void FindPatchIds(
const Mesh2D& mesh,
213 const UInt currentNode,
214 std::vector<UInt>& sharedFaces,
215 std::vector<UInt>& connectedNodes,
216 std::vector<std::vector<UInt>>& faceNodeMapping);
223 static void Administrate(
Mesh2D& mesh,
const UInt numNodes,
const std::vector<NodeMask>& nodeMask);