#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