MeshLib C++ Docs
Loading...
Searching...
No Matches
MRMeshDelone.h
Go to the documentation of this file.
1#pragma once
2
3#include "MRMeshFwd.h"
4#include "MRBitSet.h"
6#include <cfloat>
7
8namespace MR
9{
10
15{
17 UndirectedEdgeBitSet flipCandidates, nextFlipCandidates;
18
20 UndirectedEdgeBitSet queuedEdges;
21 std::vector<UndirectedEdgeId> roundEdges, nextRoundEdges;
22};
23
25{
27 float maxDeviationAfterFlip = FLT_MAX;
28
30 float maxAngleChange = FLT_MAX;
31
34 float criticalTriAspectRatio = FLT_MAX;
35
37 const FaceBitSet* region = nullptr;
38
40 const UndirectedEdgeBitSet* notFlippable = nullptr;
41
43 const VertBitSet* vertRegion = nullptr;
44
48};
49
54
60[[nodiscard]] MRMESH_API bool checkDeloneQuadrangle( const Vector3d& a, const Vector3d& b, const Vector3d& c, const Vector3d& d, double maxAngleChange = DBL_MAX );
62[[nodiscard]] MRMESH_API bool checkDeloneQuadrangle( const Vector3f& a, const Vector3f& b, const Vector3f& c, const Vector3f& d, float maxAngleChange = FLT_MAX );
63
64enum class FlipEdge : int
65{
69};
70
72[[nodiscard]] MRMESH_API FlipEdge canFlipEdge( const MeshTopology & topology, EdgeId edge,
73 const FaceBitSet* region = nullptr,
74 const UndirectedEdgeBitSet* notFlippable = nullptr,
75 const VertBitSet* vertRegion = nullptr );
76
80[[nodiscard]] MRMESH_API bool checkDeloneQuadrangleInMesh( const Mesh & mesh, EdgeId edge, const DeloneSettings& settings = {},
81 float * deviationSqAfterFlip = nullptr );
82[[nodiscard]] MRMESH_API bool checkDeloneQuadrangleInMesh( const MeshTopology & topology, const VertCoords & points, EdgeId edge, const DeloneSettings& settings = {},
83 float * deviationSqAfterFlip = nullptr );
84
88[[nodiscard]] MRMESH_API bool bestQuadrangleDiagonal( const Vector3f& a, const Vector3f& b, const Vector3f& c, const Vector3f& d );
89
91MRMESH_API void makeDeloneOriginRing( Mesh & mesh, EdgeId e, const DeloneSettings& settings = {} );
92MRMESH_API void makeDeloneOriginRing( MeshTopology& topology, const VertCoords& points, EdgeId e, const DeloneSettings& settings = {} );
93
99MRMESH_API int makeDeloneEdgeFlips( Mesh & mesh, const DeloneSettings& settings = {}, int numIters = 1, const ProgressCallback& progressCallback = {} );
100MRMESH_API int makeDeloneEdgeFlips( MeshTopology& topology, const VertCoords& points, const DeloneSettings& settings = {}, int numIters = 1, const ProgressCallback& progressCallback = {} );
101
103{
106 float threshold = 0;
107
109 const FaceBitSet* region = nullptr;
110
112 const UndirectedEdgeBitSet* notFlippable = nullptr;
113
115 const VertBitSet* vertRegion = nullptr;
116};
117
124MRMESH_API int makeDeloneEdgeFlips( EdgeLengthMesh & mesh, const IntrinsicDeloneSettings& settings = {}, int numIters = 1, const ProgressCallback& progressCallback = {} );
125
127
128}
#define MRMESH_API
Definition MRMeshFwd.h:85
Definition MRMeshTopology.h:30
std::function< bool(float)> ProgressCallback
Definition MRMeshFwd.h:759
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
int makeDeloneEdgeFlips(Mesh &mesh, const DeloneSettings &settings={}, int numIters=1, const ProgressCallback &progressCallback={})
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
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)
bool checkDeloneQuadrangle(const Vector3d &a, const Vector3d &b, const Vector3d &c, const Vector3d &d, double maxAngleChange=DBL_MAX)
FlipEdge
Definition MRMeshDelone.h:65
bool bestQuadrangleDiagonal(const Vector3f &a, const Vector3f &b, const Vector3f &c, const Vector3f &d)
@ Cannot
edge flipping is prohibited by topology or by constraints
Definition MRMeshDelone.h:67
@ Must
edge flipping is required to solve some topology issue
Definition MRMeshDelone.h:68
@ Can
edge flipping is possible
Definition MRMeshDelone.h:66
only for bindings generation
Definition MRCameraOrientationPlugin.h:8
Definition MRMeshDelone.h:15
UndirectedEdgeBitSet queuedEdges
of the serial rounds (a smaller mesh): the edges already queued for the next round,...
Definition MRMeshDelone.h:20
UndirectedEdgeBitSet nextFlipCandidates
Definition MRMeshDelone.h:17
UndirectedEdgeBitSet flipCandidates
of the parallel passes (a mesh of 256 undirected edges or more)
Definition MRMeshDelone.h:17
std::vector< UndirectedEdgeId > nextRoundEdges
Definition MRMeshDelone.h:21
std::vector< UndirectedEdgeId > roundEdges
Definition MRMeshDelone.h:21
Definition MRMeshDelone.h:25
const FaceBitSet * region
Only edges with left and right faces in this set can be flipped.
Definition MRMeshDelone.h:37
float maxAngleChange
Maximal allowed dihedral angle change (in radians) over the flipped edge.
Definition MRMeshDelone.h:30
const UndirectedEdgeBitSet * notFlippable
Edges specified by this bit-set will never be flipped.
Definition MRMeshDelone.h:40
const VertBitSet * vertRegion
Only edges with origin or destination in this set before or after flip can be flipped.
Definition MRMeshDelone.h:43
DeloneFlipsCache * cache
Definition MRMeshDelone.h:47
float criticalTriAspectRatio
Definition MRMeshDelone.h:34
float maxDeviationAfterFlip
Maximal allowed surface deviation during every individual flip.
Definition MRMeshDelone.h:27
Definition MREdgeLengthMesh.h:16
Definition MRMeshDelone.h:103
float threshold
Definition MRMeshDelone.h:106
const FaceBitSet * region
Only edges with left and right faces in this set can be flipped.
Definition MRMeshDelone.h:109
const UndirectedEdgeBitSet * notFlippable
Edges specified by this bit-set will never be flipped.
Definition MRMeshDelone.h:112
const VertBitSet * vertRegion
Only edges with origin or destination in this set before or after flip can be flipped.
Definition MRMeshDelone.h:115
Definition MRMesh.h:24