#include <MRMeshSubdivide.h>
Public Attributes | |
| float | maxEdgeLen = 0 |
| Subdivision is stopped when all edges inside or on the boundary of the region are not longer than this value. | |
| float | curvaturePriority = 0 |
| int | maxEdgeSplits = 1000 |
| Maximum number of edge splits allowed. | |
| float | maxDeviationAfterFlip = 1 |
| Improves local mesh triangulation by doing edge flips if it does not make too big surface deviation. | |
| float | maxAngleChangeAfterFlip = FLT_MAX |
| Improves local mesh triangulation by doing edge flips if it does not change dihedral angle more than on this value (in radians) | |
| float | criticalAspectRatioFlip = 1000.0f |
| FaceBitSet * | region = nullptr |
| Region on mesh to be subdivided, it is updated during the operation. | |
| FaceBitSet * | maintainRegion = nullptr |
| UndirectedEdgeBitSet * | notFlippable = nullptr |
| Edges specified by this bit-set will never be flipped, but they can be split so it is updated during the operation. | |
| VertBitSet * | newVerts = nullptr |
| New vertices appeared during subdivision will be added here. | |
| bool | subdivideBorder = true |
| float | maxTriAspectRatio = 0 |
| The subdivision stops as soon as all triangles (in the region) have aspect ratio below or equal to this value. | |
| float | maxSplittableTriAspectRatio = FLT_MAX |
| bool | smoothMode = false |
| float | minSharpDihedralAngle = PI_F / 6 |
| bool | projectOnOriginalMesh = false |
| 30 degrees | |
| std::function< bool(EdgeId e)> | beforeEdgeSplit |
| this function is called each time edge (e) is going to split, if it returns false then this split will be skipped | |
| std::function< void(VertId)> | onVertCreated |
| this function is called each time a new vertex has been created, but before the ring is made Delone | |
| 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 | |
| ProgressCallback | progressCallback |
| callback to report algorithm progress and cancel it by user request | |
| std::function<bool(EdgeId e)> MR::SubdivideSettings::beforeEdgeSplit |
this function is called each time edge (e) is going to split, if it returns false then this split will be skipped
| float MR::SubdivideSettings::criticalAspectRatioFlip = 1000.0f |
If this value is less than FLT_MAX then edge flips will ignore dihedral angle check if one of triangles has aspect ratio more than this value Unit: rad
| float MR::SubdivideSettings::curvaturePriority = 0 |
edge length will be magnified by the squared difference of normals at edge's ends times this factor, thus subdivision will be finer in the regions of high curvature compared to planar regions
| FaceBitSet* MR::SubdivideSettings::maintainRegion = nullptr |
Additional region to update during subdivision: if a face from here is split, it is replaced with new sub-faces; note that Subdivide can split faces even outside of main region, so it might be necessary to update another region
| float MR::SubdivideSettings::maxAngleChangeAfterFlip = FLT_MAX |
Improves local mesh triangulation by doing edge flips if it does not change dihedral angle more than on this value (in radians)
| float MR::SubdivideSettings::maxDeviationAfterFlip = 1 |
Improves local mesh triangulation by doing edge flips if it does not make too big surface deviation.
| float MR::SubdivideSettings::maxEdgeLen = 0 |
Subdivision is stopped when all edges inside or on the boundary of the region are not longer than this value.
| int MR::SubdivideSettings::maxEdgeSplits = 1000 |
Maximum number of edge splits allowed.
| float MR::SubdivideSettings::maxSplittableTriAspectRatio = FLT_MAX |
An edge is subdivided only if both its left and right triangles have aspect ratio below or equal to this value. So this is a maximum aspect ratio of a triangle that can be split on two before Delone optimization. Please set it to a smaller value only if subdivideBorder==false, otherwise many narrow triangles can appear near border
| float MR::SubdivideSettings::maxTriAspectRatio = 0 |
The subdivision stops as soon as all triangles (in the region) have aspect ratio below or equal to this value.
| float MR::SubdivideSettings::minSharpDihedralAngle = PI_F / 6 |
In case of activated smoothMode, the smoothness is locally deactivated at the edges having dihedral angle at least this value
| VertBitSet* MR::SubdivideSettings::newVerts = nullptr |
New vertices appeared during subdivision will be added here.
| UndirectedEdgeBitSet* MR::SubdivideSettings::notFlippable = nullptr |
Edges specified by this bit-set will never be flipped, but they can be split so it is updated during the operation.
| std::function<void(EdgeId e1, EdgeId e)> MR::SubdivideSettings::onEdgeSplit |
this function is called each time edge (e) is split into (e1->e), but before the ring is made Delone
| std::function<void(VertId)> MR::SubdivideSettings::onVertCreated |
this function is called each time a new vertex has been created, but before the ring is made Delone
| ProgressCallback MR::SubdivideSettings::progressCallback |
callback to report algorithm progress and cancel it by user request
| bool MR::SubdivideSettings::projectOnOriginalMesh = false |
30 degrees
if true, then every new vertex will be projected on the original mesh (before smoothing)
| FaceBitSet* MR::SubdivideSettings::region = nullptr |
Region on mesh to be subdivided, it is updated during the operation.
| bool MR::SubdivideSettings::smoothMode = false |
Puts new vertices so that they form a smooth surface together with existing vertices. This option works best for natural surfaces without sharp edges in between triangles
| bool MR::SubdivideSettings::subdivideBorder = true |
If false do not touch border edges (cannot subdivide lone faces)
use MR::findRegionOuterFaces to find boundary faces