MeshLib C++ Docs
Loading...
Searching...
No Matches
MRMeshDelone.h
Go to the documentation of this file.
1#pragma once
2
3#include "MRMeshFwd.h"
5#include <cfloat>
6
7namespace MR
8{
9
11{
13 float maxDeviationAfterFlip = FLT_MAX;
14
16 float maxAngleChange = FLT_MAX;
17
20 float criticalTriAspectRatio = FLT_MAX;
21
23 const FaceBitSet* region = nullptr;
24
26 const UndirectedEdgeBitSet* notFlippable = nullptr;
27
29 const VertBitSet* vertRegion = nullptr;
30};
31
36
42[[nodiscard]] MRMESH_API bool checkDeloneQuadrangle( const Vector3d& a, const Vector3d& b, const Vector3d& c, const Vector3d& d, double maxAngleChange = DBL_MAX );
44[[nodiscard]] MRMESH_API bool checkDeloneQuadrangle( const Vector3f& a, const Vector3f& b, const Vector3f& c, const Vector3f& d, float maxAngleChange = FLT_MAX );
45
46enum class FlipEdge : int
47{
48 Can,
49 Cannot,
50 Must
51};
52
54[[nodiscard]] MRMESH_API FlipEdge canFlipEdge( const MeshTopology & topology, EdgeId edge,
55 const FaceBitSet* region = nullptr,
56 const UndirectedEdgeBitSet* notFlippable = nullptr,
57 const VertBitSet* vertRegion = nullptr );
58
62[[nodiscard]] MRMESH_API bool checkDeloneQuadrangleInMesh( const Mesh & mesh, EdgeId edge, const DeloneSettings& settings = {},
63 float * deviationSqAfterFlip = nullptr );
64[[nodiscard]] MRMESH_API bool checkDeloneQuadrangleInMesh( const MeshTopology & topology, const VertCoords & points, EdgeId edge, const DeloneSettings& settings = {},
65 float * deviationSqAfterFlip = nullptr );
66
70[[nodiscard]] MRMESH_API bool bestQuadrangleDiagonal( const Vector3f& a, const Vector3f& b, const Vector3f& c, const Vector3f& d );
71
73MRMESH_API void makeDeloneOriginRing( Mesh & mesh, EdgeId e, const DeloneSettings& settings = {} );
74MRMESH_API void makeDeloneOriginRing( MeshTopology& topology, const VertCoords& points, EdgeId e, const DeloneSettings& settings = {} );
75
81MRMESH_API int makeDeloneEdgeFlips( Mesh & mesh, const DeloneSettings& settings = {}, int numIters = 1, const ProgressCallback& progressCallback = {} );
82MRMESH_API int makeDeloneEdgeFlips( MeshTopology& topology, const VertCoords& points, const DeloneSettings& settings = {}, int numIters = 1, const ProgressCallback& progressCallback = {} );
83
85{
88 float threshold = 0;
89
91 const FaceBitSet* region = nullptr;
92
94 const UndirectedEdgeBitSet* notFlippable = nullptr;
95
97 const VertBitSet* vertRegion = nullptr;
98};
99
106MRMESH_API int makeDeloneEdgeFlips( EdgeLengthMesh & mesh, const IntrinsicDeloneSettings& settings = {}, int numIters = 1, const ProgressCallback& progressCallback = {} );
107
109
110} // namespace MR
#define MRMESH_API
Definition MRMesh/MRMeshFwd.h:79
Definition MRMesh/MRMeshTopology.h:18
std::function< bool(float)> ProgressCallback
Definition MRMesh/MRMeshFwd.h:641
MRMESH_API FlipEdge canFlipEdge(const MeshTopology &topology, EdgeId edge, const FaceBitSet *region=nullptr, const UndirectedEdgeBitSet *notFlippable=nullptr, const VertBitSet *vertRegion=nullptr)
consider topology and constraints to decide about flip possibility
MRMESH_API bool checkDeloneQuadrangleInMesh(const Mesh &mesh, EdgeId edge, const DeloneSettings &settings={}, float *deviationSqAfterFlip=nullptr)
squared surface deviation after flip is written here (at least when the function returns false)
MRMESH_API bool checkDeloneQuadrangle(const Vector3d &a, const Vector3d &b, const Vector3d &c, const Vector3d &d, double maxAngleChange=DBL_MAX)
MRMESH_API bool bestQuadrangleDiagonal(const Vector3f &a, const Vector3f &b, const Vector3f &c, const Vector3f &d)
FlipEdge
Definition MRMeshDelone.h:47
MRMESH_API void makeDeloneOriginRing(Mesh &mesh, EdgeId e, const DeloneSettings &settings={})
improves mesh triangulation in a ring of vertices with common origin and represented by edge e
MRMESH_API int makeDeloneEdgeFlips(Mesh &mesh, const DeloneSettings &settings={}, int numIters=1, const ProgressCallback &progressCallback={})
@ Cannot
edge flipping is prohibited by topology or by constraints
@ Must
edge flipping is required to solve some topology issue
@ Can
edge flipping is possible
Definition MRMeshDelone.h:11
const FaceBitSet * region
Only edges with left and right faces in this set can be flipped.
Definition MRMeshDelone.h:23
float maxAngleChange
Maximal allowed dihedral angle change (in radians) over the flipped edge.
Definition MRMeshDelone.h:16
const UndirectedEdgeBitSet * notFlippable
Edges specified by this bit-set will never be flipped.
Definition MRMeshDelone.h:26
const VertBitSet * vertRegion
Only edges with origin or destination in this set before or after flip can be flipped.
Definition MRMeshDelone.h:29
float criticalTriAspectRatio
Definition MRMeshDelone.h:20
float maxDeviationAfterFlip
Maximal allowed surface deviation during every individual flip.
Definition MRMeshDelone.h:13
Definition MREdgeLengthMesh.h:13
Definition MRMeshDelone.h:85
float threshold
Definition MRMeshDelone.h:88
const FaceBitSet * region
Only edges with left and right faces in this set can be flipped.
Definition MRMeshDelone.h:91
const UndirectedEdgeBitSet * notFlippable
Edges specified by this bit-set will never be flipped.
Definition MRMeshDelone.h:94
const VertBitSet * vertRegion
Only edges with origin or destination in this set before or after flip can be flipped.
Definition MRMeshDelone.h:97
Definition MRMesh/MRMesh.h:22