#include <MRMeshDecimate.h>
| Public Attributes | |
| float | targetEdgeLen = 0.001f | 
| int | maxEdgeSplits = 10'000'000 | 
| Maximum number of edge splits allowed during subdivision. | |
| float | maxAngleChangeAfterFlip = 30 * PI_F / 180.0f | 
| Improves local mesh triangulation by doing edge flips if it does not change dihedral angle more than on this value. | |
| float | maxBdShift = FLT_MAX | 
| Maximal shift of a boundary during one edge collapse. | |
| bool | useCurvature = false | 
| int | finalRelaxIters = 0 | 
| bool | finalRelaxNoShrinkage = false | 
| if true prevents the surface from shrinkage after many iterations | |
| FaceBitSet * | region = nullptr | 
| Region on mesh to be changed, it is updated during the operation. | |
| UndirectedEdgeBitSet * | notFlippable = nullptr | 
| bool | packMesh = false | 
| whether to pack mesh at the end | |
| bool | projectOnOriginalMesh = false | 
| std::function< void(EdgeId e1, EdgeId e)> | onEdgeSplit | 
| this function is called each time edge (e) is split into (e1->e), but before the ring is made Delone | |
| std::function< void(EdgeId e, EdgeId e1)> | onEdgeDel | 
| if valid (e1) is given then dest(e) = dest(e1) and their origins are in different ends of collapsing edge, e1 shall take the place of e | |
| std::function< bool(EdgeId edgeToCollapse, const Vector3f &newEdgeOrgPos)> | preCollapse | 
| The user can provide this optional callback that is invoked immediately before edge collapse;. | |
| ProgressCallback | progressCallback | 
| callback to report algorithm progress and cancel it by user request | |
| int MR::RemeshSettings::finalRelaxIters = 0 | 
the number of iterations of final relaxation of mesh vertices; few iterations can give almost perfect uniformity of the vertices and edge lengths but deviate from the original surface
| bool MR::RemeshSettings::finalRelaxNoShrinkage = false | 
if true prevents the surface from shrinkage after many iterations
| float MR::RemeshSettings::maxAngleChangeAfterFlip = 30 * PI_F / 180.0f | 
Improves local mesh triangulation by doing edge flips if it does not change dihedral angle more than on this value.
| float MR::RemeshSettings::maxBdShift = FLT_MAX | 
Maximal shift of a boundary during one edge collapse.
| int MR::RemeshSettings::maxEdgeSplits = 10'000'000 | 
Maximum number of edge splits allowed during subdivision.
| UndirectedEdgeBitSet* MR::RemeshSettings::notFlippable = nullptr | 
Edges specified by this bit-set will never be flipped or collapsed, but they can be replaced during collapse of nearby edges so it is updated during the operation; also the vertices incident to these edges are excluded from relaxation
| std::function<void(EdgeId e, EdgeId e1)> MR::RemeshSettings::onEdgeDel | 
if valid (e1) is given then dest(e) = dest(e1) and their origins are in different ends of collapsing edge, e1 shall take the place of e
| std::function<void(EdgeId e1, EdgeId e)> MR::RemeshSettings::onEdgeSplit | 
this function is called each time edge (e) is split into (e1->e), but before the ring is made Delone
| bool MR::RemeshSettings::packMesh = false | 
whether to pack mesh at the end
| std::function<bool( EdgeId edgeToCollapse, const Vector3f& newEdgeOrgPos )> MR::RemeshSettings::preCollapse | 
The user can provide this optional callback that is invoked immediately before edge collapse;.
It receives the edge being collapsed: its destination vertex will disappear, and its origin vertex will get new position (provided as the second argument) after collapse; If the callback returns false, then the collapse is prohibited
| ProgressCallback MR::RemeshSettings::progressCallback | 
callback to report algorithm progress and cancel it by user request
| bool MR::RemeshSettings::projectOnOriginalMesh = false | 
if true, then every new vertex after subdivision will be projected on the original mesh (before smoothing); this does not affect the vertices moved on other stages of the processing
| FaceBitSet* MR::RemeshSettings::region = nullptr | 
Region on mesh to be changed, it is updated during the operation.
| float MR::RemeshSettings::targetEdgeLen = 0.001f | 
the algorithm will try to keep the length of all edges close to this value, splitting the edges longer than targetEdgeLen, and then eliminating the edges shorter than targetEdgeLen
| bool MR::RemeshSettings::useCurvature = false | 
This option in subdivision works best for natural surfaces, where all triangles are close to equilateral and have similar area, and no sharp edges in between