|
| new unsafe ref MR.DecimateStrategy | strategy [get] |
| new unsafe ref float | maxError [get] |
| | for DecimateStrategy.MinimizeError: stop the decimation as soon as the estimated distance deviation from the original mesh is more than this value for DecimateStrategy.ShortestEdgeFirst only: stop the decimation as soon as the shortest edge in the mesh is greater than this value
|
| new unsafe ref float | maxEdgeLen [get] |
| | Maximal possible edge length created during decimation.
|
| new unsafe ref float | maxBdShift [get] |
| | Maximal shift of a boundary during one edge collapse.
|
| new unsafe ref float | maxTriangleAspectRatio [get] |
| | Maximal possible aspect ratio of a triangle introduced during decimation.
|
| new unsafe ref float | criticalTriAspectRatio [get] |
| | the algorithm will ignore dihedral angle check if one of triangles had aspect ratio equal or more than this value; and the algorithm will permit temporary increase in aspect ratio after collapse, if before collapse one of the triangles had larger aspect ratio
|
| new unsafe ref float | tinyEdgeLength [get] |
| | edges not longer than this value will be collapsed even if it results in appearance of a triangle with high aspect ratio
|
| new unsafe ref float | stabilizer [get] |
| | Small stabilizer is important to achieve good results on completely planar mesh parts, if your mesh is not-planer everywhere, then you can set it to zero.
|
| new unsafe ref bool | angleWeightedDistToPlane [get] |
| | if false, then quadratic error metric is equal to the sum of distances to the planes of original mesh triangles; if true, then the sum is weighted, and the weight is equal to the angle of adjacent triangle at the vertex divided on PI (to get one after summing all 3 vertices of the triangle)
|
| new unsafe ref bool | optimizeVertexPos [get] |
| | if true then after each edge collapse the position of remaining vertex is optimized to minimize local shape change, if false then the edge is collapsed in one of its vertices, which keeps its position
|
| new unsafe ref int | maxDeletedVertices [get] |
| | Limit on the number of deleted vertices.
|
| new unsafe ref int | maxDeletedFaces [get] |
| | Limit on the number of deleted faces.
|
| new unsafe MR.? FaceBitSet | region [get, set] |
| | Region on mesh to be decimated, it is updated during the operation.
|
| new unsafe MR.? UndirectedEdgeBitSet | notFlippable [get, set] |
| | Edges specified by this bit-set will never be flipped, but they can be collapsed or replaced during collapse of nearby edges so it is updated during the operation.
|
| new unsafe ref bool | collapseNearNotFlippable [get] |
| | Whether to allow collapse of edges incident to notFlippable edges, which can move vertices of notFlippable edges unless they are fixed.
|
| new unsafe MR.? UndirectedEdgeBitSet | edgesToCollapse [get, set] |
| | If pointer is not null, then only edges from here can be collapsed (and some nearby edges can disappear); the algorithm updates this map during collapses, removing or replacing elements.
|
| new unsafe MR.Phmap.? FlatHashMap_MRUndirectedEdgeId_MRUndirectedEdgeId | twinMap [get, set] |
| | if an edge present as a key in this map is flipped or collapsed, then same happens to the value-edge (with same collapse position); the algorithm updates this map during collapses, removing or replacing elements
|
| new unsafe ref bool | touchNearBdEdges [get] |
| | Whether to allow collapsing or flipping edges having at least one vertex on (region) boundary.
|
| new unsafe ref bool | touchBdVerts [get] |
| | touchBdVerts=true: allow moving and eliminating boundary vertices during edge collapses; touchBdVerts=false: allow only collapsing an edge having only one boundary vertex in that vertex, so position and count of boundary vertices do not change; this setting is ignored if touchNearBdEdges=false
|
| new unsafe MR.? VertBitSet | bdVerts [get, set] |
| | if touchNearBdEdges=false or touchBdVerts=false then the algorithm needs to know about all boundary vertices; if the pointer is not null then boundary vertices detection is replaced with testing values in this bit-set; the algorithm updates this set if it packs the mesh
|
| new unsafe ref float | maxAngleChange [get] |
| | Permit edge flips (in addition to collapsing) to improve Delone quality of the mesh if it does not change dihedral angle more than on this value (negative value prohibits any edge flips)
|
| new unsafe MR.Std.Function_Bool_From_MREdgeId_ConstMRVector3fRef | preCollapse [get, protected set] |
| | The user can provide this optional callback that is invoked immediately before edge collapse;.
|
| new unsafe MR.Std.Function_Void_From_MRUndirectedEdgeId_FloatRef_MRVector3fRef | adjustCollapse [get, protected set] |
| | The user can provide this optional callback for adjusting error introduced by this edge collapse and the collapse position.
|
| new unsafe MR.Std.Function_Void_From_MREdgeId_MREdgeId | onEdgeDel [get, protected set] |
| | this function is called each time edge (del) is deleted; if valid (rem) is given then dest(del) = dest(rem) and their origins are in different ends of collapsing edge, (rem) shall take the place of (del)
|
| new unsafe MR.? Vector_MRQuadraticForm3f_MRVertId | vertForms [get, set] |
| | If not null, then vertex quadratic forms are stored there; if on input the vector is not empty then initialization is skipped in favor of values from there; on output: quadratic form for each remaining vertex is returned there.
|
| new unsafe ref bool | packMesh [get] |
| | whether to pack mesh at the end
|
| new unsafe MR.Std.Function_Bool_From_Float | progressCallback [get, protected set] |
| | callback to report algorithm progress and cancel it by user request
|
| new unsafe ref int | subdivideParts [get] |
| | If this value is more than 1, then virtually subdivides the mesh on given number of parts to process them in parallel (using many threads); IMPORTANT: please call mesh.packOptimally() before calling decimating with subdivideParts > 1, otherwise performance will be bad.
|
| new unsafe ref bool | decimateBetweenParts [get] |
| | After parallel decimation of all mesh parts is done, whether to perform final decimation of whole mesh region to eliminate small edges near the border of individual parts.
|
| new unsafe MR.Std.? Vector_MRFaceBitSet | partFaces [get, set] |
| | if not null, then it contains the faces of each subdivision part on input, which must not overlap, and after decimation of all parts, the region inside each part is put here; decimateBetweenParts=true or packMesh=true are not compatible with this option
|
| new unsafe ref int | minFacesInPart [get] |
| | minimum number of faces in one subdivision part for ( subdivideParts > 1 ) mode
|
| unsafe MR.DecimateStrategy | strategy [get] |
| unsafe float | maxError [get] |
| | for DecimateStrategy.MinimizeError: stop the decimation as soon as the estimated distance deviation from the original mesh is more than this value for DecimateStrategy.ShortestEdgeFirst only: stop the decimation as soon as the shortest edge in the mesh is greater than this value
|
| unsafe float | maxEdgeLen [get] |
| | Maximal possible edge length created during decimation.
|
| unsafe float | maxBdShift [get] |
| | Maximal shift of a boundary during one edge collapse.
|
| unsafe float | maxTriangleAspectRatio [get] |
| | Maximal possible aspect ratio of a triangle introduced during decimation.
|
| unsafe float | criticalTriAspectRatio [get] |
| | the algorithm will ignore dihedral angle check if one of triangles had aspect ratio equal or more than this value; and the algorithm will permit temporary increase in aspect ratio after collapse, if before collapse one of the triangles had larger aspect ratio
|
| unsafe float | tinyEdgeLength [get] |
| | edges not longer than this value will be collapsed even if it results in appearance of a triangle with high aspect ratio
|
| unsafe float | stabilizer [get] |
| | Small stabilizer is important to achieve good results on completely planar mesh parts, if your mesh is not-planer everywhere, then you can set it to zero.
|
| unsafe bool | angleWeightedDistToPlane [get] |
| | if false, then quadratic error metric is equal to the sum of distances to the planes of original mesh triangles; if true, then the sum is weighted, and the weight is equal to the angle of adjacent triangle at the vertex divided on PI (to get one after summing all 3 vertices of the triangle)
|
| unsafe bool | optimizeVertexPos [get] |
| | if true then after each edge collapse the position of remaining vertex is optimized to minimize local shape change, if false then the edge is collapsed in one of its vertices, which keeps its position
|
| unsafe int | maxDeletedVertices [get] |
| | Limit on the number of deleted vertices.
|
| unsafe int | maxDeletedFaces [get] |
| | Limit on the number of deleted faces.
|
| unsafe MR.? FaceBitSet | region [get] |
| | Region on mesh to be decimated, it is updated during the operation.
|
| unsafe MR.? UndirectedEdgeBitSet | notFlippable [get] |
| | Edges specified by this bit-set will never be flipped, but they can be collapsed or replaced during collapse of nearby edges so it is updated during the operation.
|
| unsafe bool | collapseNearNotFlippable [get] |
| | Whether to allow collapse of edges incident to notFlippable edges, which can move vertices of notFlippable edges unless they are fixed.
|
| unsafe MR.? UndirectedEdgeBitSet | edgesToCollapse [get] |
| | If pointer is not null, then only edges from here can be collapsed (and some nearby edges can disappear); the algorithm updates this map during collapses, removing or replacing elements.
|
| unsafe MR.Phmap.? FlatHashMap_MRUndirectedEdgeId_MRUndirectedEdgeId | twinMap [get] |
| | if an edge present as a key in this map is flipped or collapsed, then same happens to the value-edge (with same collapse position); the algorithm updates this map during collapses, removing or replacing elements
|
| unsafe bool | touchNearBdEdges [get] |
| | Whether to allow collapsing or flipping edges having at least one vertex on (region) boundary.
|
| unsafe bool | touchBdVerts [get] |
| | touchBdVerts=true: allow moving and eliminating boundary vertices during edge collapses; touchBdVerts=false: allow only collapsing an edge having only one boundary vertex in that vertex, so position and count of boundary vertices do not change; this setting is ignored if touchNearBdEdges=false
|
| unsafe MR.? VertBitSet | bdVerts [get] |
| | if touchNearBdEdges=false or touchBdVerts=false then the algorithm needs to know about all boundary vertices; if the pointer is not null then boundary vertices detection is replaced with testing values in this bit-set; the algorithm updates this set if it packs the mesh
|
| unsafe float | maxAngleChange [get] |
| | Permit edge flips (in addition to collapsing) to improve Delone quality of the mesh if it does not change dihedral angle more than on this value (negative value prohibits any edge flips)
|
| unsafe MR.Std.Const_Function_Bool_From_MREdgeId_ConstMRVector3fRef | preCollapse [get, protected set] |
| | The user can provide this optional callback that is invoked immediately before edge collapse;.
|
| unsafe MR.Std.Const_Function_Void_From_MRUndirectedEdgeId_FloatRef_MRVector3fRef | adjustCollapse [get, protected set] |
| | The user can provide this optional callback for adjusting error introduced by this edge collapse and the collapse position.
|
| unsafe MR.Std.Const_Function_Void_From_MREdgeId_MREdgeId | onEdgeDel [get, protected set] |
| | this function is called each time edge (del) is deleted; if valid (rem) is given then dest(del) = dest(rem) and their origins are in different ends of collapsing edge, (rem) shall take the place of (del)
|
| unsafe MR.? Vector_MRQuadraticForm3f_MRVertId | vertForms [get] |
| | If not null, then vertex quadratic forms are stored there; if on input the vector is not empty then initialization is skipped in favor of values from there; on output: quadratic form for each remaining vertex is returned there.
|
| unsafe bool | packMesh [get] |
| | whether to pack mesh at the end
|
| unsafe MR.Std.Const_Function_Bool_From_Float | progressCallback [get, protected set] |
| | callback to report algorithm progress and cancel it by user request
|
| unsafe int | subdivideParts [get] |
| | If this value is more than 1, then virtually subdivides the mesh on given number of parts to process them in parallel (using many threads); IMPORTANT: please call mesh.packOptimally() before calling decimating with subdivideParts > 1, otherwise performance will be bad.
|
| unsafe bool | decimateBetweenParts [get] |
| | After parallel decimation of all mesh parts is done, whether to perform final decimation of whole mesh region to eliminate small edges near the border of individual parts.
|
| unsafe MR.Std.? Vector_MRFaceBitSet | partFaces [get] |
| | if not null, then it contains the faces of each subdivision part on input, which must not overlap, and after decimation of all parts, the region inside each part is put here; decimateBetweenParts=true or packMesh=true are not compatible with this option
|
| unsafe int | minFacesInPart [get] |
| | minimum number of faces in one subdivision part for ( subdivideParts > 1 ) mode
|