MeshLib Documentation
Loading...
Searching...
No Matches
MRMesh.h File Reference
#include "MRMeshFwd.h"
#include "MRAffineXf.h"
#include "MRBox.h"
#include "MRId.h"
#include "MRMeshTopology.h"

Go to the source code of this file.

Classes

struct  MRMeshAddPartByMaskParameters
 optional parameters for mrMeshAddPartByMask More...
 

Typedefs

typedef struct MRMeshAddPartByMaskParameters MRMeshAddPartByMaskParameters
 optional parameters for mrMeshAddPartByMask
 

Functions

MR_EXTERN_C_BEGIN MRMESHC_API MRMeshmrMeshCopy (const MRMesh *mesh)
 creates a copy of a Mesh object
 
MRMESHC_API MRMeshmrMeshFromTriangles (const MRVector3f *vertexCoordinates, size_t vertexCoordinatesNum, const MRThreeVertIds *t, size_t tNum)
 constructs a mesh from vertex coordinates and a set of triangles with given ids
 
MRMESHC_API MRMeshmrMeshFromTrianglesDuplicatingNonManifoldVertices (const MRVector3f *vertexCoordinates, size_t vertexCoordinatesNum, const MRThreeVertIds *t, size_t tNum)
 
MRMESHC_API MRMeshmrMeshNewFromPointTriples (const MRTriangle3f *posTriangles, size_t posTrianglesNum, bool duplicateNonManifoldVertices)
 
MRMESHC_API const MRVector3fmrMeshPoints (const MRMesh *mesh)
 gets read-only access to the mesh vertex coordinates
 
MRMESHC_API MRVector3fmrMeshPointsRef (MRMesh *mesh)
 gets read-write access to the mesh vertex coordinates
 
MRMESHC_API size_t mrMeshPointsNum (const MRMesh *mesh)
 gets count of the mesh vertex coordinates
 
MRMESHC_API const MRMeshTopologymrMeshTopology (const MRMesh *mesh)
 gets read-only access to the mesh topology object
 
MRMESHC_API MRMeshTopologymrMeshTopologyRef (MRMesh *mesh)
 gets read-write access to the mesh topology object
 
MRMESHC_API MRBox3f mrMeshComputeBoundingBox (const MRMesh *mesh, const MRAffineXf3f *toWorld)
 
MRMESHC_API void mrMeshTransform (MRMesh *mesh, const MRAffineXf3f *xf, const MRVertBitSet *region)
 
MRMESHC_API MRVector3f mrMeshHoleDirArea (const MRMesh *mesh, MREdgeId e)
 
MRMESHC_API double mrMeshArea (const MRMesh *mesh, const MRFaceBitSet *region)
 computes the area of given face-region (or whole mesh if region is null)
 
MRMESHC_API float mrMeshEdgeLength (const MRMesh *mesh, MRUndirectedEdgeId e)
 returns Euclidean length of the edge
 
MRMESHC_API float mrMeshEdgeLengthSq (const MRMesh *mesh, MRUndirectedEdgeId e)
 returns squared Euclidean length of the edge (faster to compute than length)
 
MRMESHC_API void mrMeshDeleteFaces (MRMesh *mesh, const MRFaceBitSet *fs, const MRUndirectedEdgeBitSet *keepEdges)
 deletes multiple given faces, also deletes adjacent edges and vertices if they were not shared by remaining faces and not in
 
MRMESHC_API void mrMeshAddPartByMask (MRMesh *mesh, const MRMesh *from, const MRFaceBitSet *fromFaces, const MRMeshAddPartByMaskParameters *params)
 appends mesh (from) in addition to this mesh: creates new edges, faces, verts and points
 
MRMESHC_API void mrMeshPack (MRMesh *mesh, bool rearrangeTriangles)
 tightly packs all arrays eliminating lone edges and invalid face, verts and points
 
MRMESHC_API void mrMeshPackOptimally (MRMesh *mesh, bool preserveAABBTree)
 
MRMESHC_API double mrMeshVolume (const MRMesh *mesh, const MRFaceBitSet *region)
 
MRMESHC_API void mrMeshFree (MRMesh *mesh)
 deallocates a Mesh object
 
MRMESHC_API MRTriangulation * mrMeshGetTriangulation (const MRMesh *mesh)
 
MRMESHC_API MREdgePath * mrMeshFindHoleRepresentiveEdges (const MRMesh *mesh)
 

Typedef Documentation

◆ MRMeshAddPartByMaskParameters

typedef struct MRMeshAddPartByMaskParameters MRMeshAddPartByMaskParameters

optional parameters for mrMeshAddPartByMask

Function Documentation

◆ mrMeshAddPartByMask()

MRMESHC_API void mrMeshAddPartByMask ( MRMesh * mesh,
const MRMesh * from,
const MRFaceBitSet * fromFaces,
const MRMeshAddPartByMaskParameters * params )

appends mesh (from) in addition to this mesh: creates new edges, faces, verts and points

◆ mrMeshArea()

MRMESHC_API double mrMeshArea ( const MRMesh * mesh,
const MRFaceBitSet * region )

computes the area of given face-region (or whole mesh if region is null)

◆ mrMeshComputeBoundingBox()

MRMESHC_API MRBox3f mrMeshComputeBoundingBox ( const MRMesh * mesh,
const MRAffineXf3f * toWorld )

passes through all valid vertices and finds the minimal bounding box containing all of them; if toWorld transformation is given then returns minimal bounding box in world space

◆ mrMeshCopy()

MR_EXTERN_C_BEGIN MRMESHC_API MRMesh * mrMeshCopy ( const MRMesh * mesh)

creates a copy of a Mesh object

◆ mrMeshDeleteFaces()

MRMESHC_API void mrMeshDeleteFaces ( MRMesh * mesh,
const MRFaceBitSet * fs,
const MRUndirectedEdgeBitSet * keepEdges )

deletes multiple given faces, also deletes adjacent edges and vertices if they were not shared by remaining faces and not in

Parameters
keepEdges

◆ mrMeshEdgeLength()

MRMESHC_API float mrMeshEdgeLength ( const MRMesh * mesh,
MRUndirectedEdgeId e )

returns Euclidean length of the edge

◆ mrMeshEdgeLengthSq()

MRMESHC_API float mrMeshEdgeLengthSq ( const MRMesh * mesh,
MRUndirectedEdgeId e )

returns squared Euclidean length of the edge (faster to compute than length)

◆ mrMeshFindHoleRepresentiveEdges()

MRMESHC_API MREdgePath * mrMeshFindHoleRepresentiveEdges ( const MRMesh * mesh)

returns one edge with no valid left face for every boundary in the mesh NOTE: this is a shortcut for mrMeshTopologyFindHoleRepresentiveEdges( mrMeshTopology( mesh ) )

◆ mrMeshFree()

MRMESHC_API void mrMeshFree ( MRMesh * mesh)

deallocates a Mesh object

◆ mrMeshFromTriangles()

MRMESHC_API MRMesh * mrMeshFromTriangles ( const MRVector3f * vertexCoordinates,
size_t vertexCoordinatesNum,
const MRThreeVertIds * t,
size_t tNum )

constructs a mesh from vertex coordinates and a set of triangles with given ids

◆ mrMeshFromTrianglesDuplicatingNonManifoldVertices()

MRMESHC_API MRMesh * mrMeshFromTrianglesDuplicatingNonManifoldVertices ( const MRVector3f * vertexCoordinates,
size_t vertexCoordinatesNum,
const MRThreeVertIds * t,
size_t tNum )

constructs a mesh from vertex coordinates and a set of triangles with given ids; unlike simple mrMeshFromTriangles it tries to resolve non-manifold vertices by creating duplicate vertices

◆ mrMeshGetTriangulation()

MRMESHC_API MRTriangulation * mrMeshGetTriangulation ( const MRMesh * mesh)

returns three vertex ids for valid triangles (which can be accessed by FaceId), vertex ids for invalid triangles are undefined, and shall not be read NOTE: this is a shortcut for mrMeshTopologyGetTriangulation( mrMeshTopology( mesh ) )

◆ mrMeshHoleDirArea()

MRMESHC_API MRVector3f mrMeshHoleDirArea ( const MRMesh * mesh,
MREdgeId e )

computes directed area of the hole specified by one of its edges with no valid left face (left is hole); if the hole is planar then returned vector is orthogonal to the plane pointing outside and its magnitude is equal to hole area

◆ mrMeshNewFromPointTriples()

MRMESHC_API MRMesh * mrMeshNewFromPointTriples ( const MRTriangle3f * posTriangles,
size_t posTrianglesNum,
bool duplicateNonManifoldVertices )

constructs a mesh from point triples;

Parameters
duplicateNonManifoldVertices= false, all coinciding points are given the same VertId in the result;
duplicateNonManifoldVertices= true, it tries to avoid non-manifold vertices by creating duplicate vertices with same coordinates

◆ mrMeshPack()

MRMESHC_API void mrMeshPack ( MRMesh * mesh,
bool rearrangeTriangles )

tightly packs all arrays eliminating lone edges and invalid face, verts and points

◆ mrMeshPackOptimally()

MRMESHC_API void mrMeshPackOptimally ( MRMesh * mesh,
bool preserveAABBTree )

packs tightly and rearranges vertices, triangles and edges to put close in space elements in close indices

Parameters
preserveAABBTreewhether to keep valid mesh's AABB tree after return (it will take longer to compute and it will occupy more memory)

◆ mrMeshPoints()

MRMESHC_API const MRVector3f * mrMeshPoints ( const MRMesh * mesh)

gets read-only access to the mesh vertex coordinates

◆ mrMeshPointsNum()

MRMESHC_API size_t mrMeshPointsNum ( const MRMesh * mesh)

gets count of the mesh vertex coordinates

◆ mrMeshPointsRef()

MRMESHC_API MRVector3f * mrMeshPointsRef ( MRMesh * mesh)

gets read-write access to the mesh vertex coordinates

◆ mrMeshTopology()

MRMESHC_API const MRMeshTopology * mrMeshTopology ( const MRMesh * mesh)

gets read-only access to the mesh topology object

◆ mrMeshTopologyRef()

MRMESHC_API MRMeshTopology * mrMeshTopologyRef ( MRMesh * mesh)

gets read-write access to the mesh topology object

◆ mrMeshTransform()

MRMESHC_API void mrMeshTransform ( MRMesh * mesh,
const MRAffineXf3f * xf,
const MRVertBitSet * region )

applies given transformation to specified vertices if region is NULL, all valid mesh vertices are used

◆ mrMeshVolume()

MRMESHC_API double mrMeshVolume ( const MRMesh * mesh,
const MRFaceBitSet * region )

returns volume of closed mesh region, if region is not closed DBL_MAX is returned if region is NULL - whole mesh is region