Loading [MathJax]/extensions/tex2jax.js
MeshKernel
All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator Pages Concepts
FlipEdges.hpp
1//---- GPL ---------------------------------------------------------------------
2//
3// Copyright (C) Stichting Deltares, 2011-2021.
4//
5// This program is free software: you can redistribute it and/or modify
6// it under the terms of the GNU General Public License as published by
7// the Free Software Foundation version 3.
8//
9// This program is distributed in the hope that it will be useful,
10// but WITHOUT ANY WARRANTY; without even the implied warranty of
11// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12// GNU General Public License for more details.
13//
14// You should have received a copy of the GNU General Public License
15// along with this program. If not, see <http://www.gnu.org/licenses/>.
16//
17// contact: delft3d.support@deltares.nl
18// Stichting Deltares
19// P.O. Box 177
20// 2600 MH Delft, The Netherlands
21//
22// All indications and logos of, and references to, "Delft3D" and "Deltares"
23// are registered trademarks of Stichting Deltares, and remain the property of
24// Stichting Deltares. All rights reserved.
25//
26//------------------------------------------------------------------------------
27
28#pragma once
29
30#include <memory>
31
32#include "MeshKernel/Constants.hpp"
33#include "MeshKernel/Polygons.hpp"
34#include "MeshKernel/UndoActions/UndoAction.hpp"
35
36namespace meshkernel
37{
38 // Forward declarations
39 class Mesh2D;
40 class LandBoundaries;
41
49 {
50 public:
57 LandBoundaries& landBoundary,
58 bool triangulateFaces,
59 bool projectToLandBoundary);
60
62 [[nodiscard]] std::unique_ptr<UndoAction> Compute() const;
63
65 [[nodiscard]] std::unique_ptr<UndoAction> Compute(const Polygons& polygon) const;
66
67 private:
73 int ComputeTopologyFunctional(UInt edge,
74 UInt& nodeLeft,
75 UInt& nodeRight) const;
76
80 [[nodiscard]] UInt OptimalNumberOfConnectedNodes(UInt nodeIndex) const;
81
85 [[nodiscard]] int DifferenceFromOptimum(UInt nodeIndex, UInt firstNode, UInt secondNode) const;
86
90 void DeleteEdgeFromNode(UInt edgeIndex, UInt nodeIndex) const;
91
92 Mesh2D& m_mesh;
93 LandBoundaries& m_landBoundaries;
94
95 bool m_triangulateFaces = false;
96 bool m_projectToLandBoundary = false;
97 };
98
99} // namespace meshkernel
A class used to improve mesh connectivity.
Definition FlipEdges.hpp:49
std::unique_ptr< UndoAction > Compute() const
Flip the edges.
FlipEdges(Mesh2D &mesh, LandBoundaries &landBoundary, bool triangulateFaces, bool projectToLandBoundary)
Constructor.
std::unique_ptr< UndoAction > Compute(const Polygons &polygon) const
Flip the edges inside a polygon.
A class describing land boundaries. These are used to visualise the land-water interface.
Definition LandBoundaries.hpp:50
A class derived from Mesh, which describes unstructures 2d meshes.
Definition Mesh2D.hpp:58
A class containing a list of polygonaly enclosed regions.
Definition Polygons.hpp:45
Contains the logic of the C++ static library.
Definition AveragingInterpolation.hpp:37
std::uint32_t UInt
Integer type used when indexing mesh graph entities.
Definition Definitions.hpp:39