MeshLib Documentation
Loading...
Searching...
No Matches
Mesh export

Export example of points and triangles from mesh (e.g. for rendering)

  • C++
    #include <MRMesh/MRCube.h>
    #include <MRMesh/MRMesh.h>
    int main()
    {
    // create some mesh
    // all vertices of valid triangles
    const std::vector<std::array<MR::VertId, 3>> triangles = mesh.topology.getAllTriVerts();
    // all point coordinates
    const std::vector<MR::Vector3f> & points = mesh.points.vec_;
    // triangle vertices as tripples of ints (pointing to elements in points vector)
    const int * vertexTripples = reinterpret_cast<const int*>( triangles.data() );
    return 0;
    }
    MRMESH_API std::vector< ThreeVertIds > getAllTriVerts() const
    MRMESH_API Mesh makeCube(const Vector3f &size=Vector3f::diagonal(1.0f), const Vector3f &base=Vector3f::diagonal(-0.5f))
    MeshTopology topology
    VertCoords points
  • Python See a more relevant example Numpy support
  • C
    #include <MRMeshC/MRMesh.h>
    #include <MRMeshC/MRVector3.h>
    #include <MRMeshC/MRCube.h>
    #include <MRMeshC/MRMeshTopology.h>
    #include <MRMeshC/MRString.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    int main( int argc, char* argv[] )
    {
    // error messages will be stored here
    MRString* errorString = NULL;
    // Create mesh
    MRVector3f base = mrVector3fDiagonal( -0.5f );
    MRMesh* mesh = mrMakeCube( &size, &base );
    // extract vertices
    const MRVector3f* vertices = mrMeshPoints( mesh );
    size_t verticesNum = mrMeshPointsNum( mesh );
    // you can access coordinates via struct fields...
    printf( "Vertices coordinates:\n" );
    for ( size_t i = 0; i < verticesNum; ++i )
    printf( "Vertex %d coordinates: %f; %f; %f\n", (int)i, vertices[i].x, vertices[i].y, vertices[i].z );
    // ...or cast them to a row-major float array
    float* vertexData = malloc( sizeof( float ) * 3 * verticesNum );
    memcpy( vertexData, vertices, sizeof( MRVector3f ) * verticesNum );
    // extract faces
    MRTriangulation* t = mrMeshGetTriangulation( mesh );
    const MRThreeVertIds* faces = t->data;
    size_t facesNum = t->size;
    // faces are stored as vertex id triples...
    printf( "Face's vertex ids:\n" );
    for ( size_t i = 0; i < verticesNum; ++i )
    printf( "Face %d vertex ids: %d, %d, %d\n", (int)i, faces[i][0].id, faces[i][1].id, faces[i][2].id );
    // ...and can also be cast to an integer array
    int* faceData = malloc( sizeof( int ) * 3 * facesNum );
    memcpy( faceData, faces, sizeof( MRThreeVertIds ) * facesNum );
    mrMeshFree( mesh );
    free( vertexData );
    mrTriangulationFree( t );
    free( faceData );
    return EXIT_SUCCESS;
    }
    MR_EXTERN_C_BEGIN MRMESHC_API MRMesh * mrMakeCube(const MRVector3f *size, const MRVector3f *base)
    MRVertId MRThreeVertIds[3]
    struct MRMesh MRMesh
    typedefMR_EXTERN_C_BEGIN struct MRString MRString
    MRMESHC_API const MRVector3f * mrMeshPoints(const MRMesh *mesh)
    MRMESHC_API MRTriangulation * mrMeshGetTriangulation(const MRMesh *mesh)
    MRMESHC_API size_t mrMeshPointsNum(const MRMesh *mesh)
    MRMESHC_API void mrMeshFree(MRMesh *mesh)
    MRMESHC_API MRVector3f mrVector3fDiagonal(float a)
    size_t size() const