MeshLib Documentation
Loading...
Searching...
No Matches
Signed Distance

Example of usage to get signed distance from mesh to mesh

Note
Please note that unlike findSignedDistances, this function return minimal distance between two meshes
  • C++
    #include "MRMesh/MRMeshLoad.h"
    #include "MRMesh/MRMesh.h"
    #include "MRMesh/MRMeshMeshDistance.h"
    #include <iostream>
    int main()
    {
    auto mesh1Res = MR::MeshLoad::fromAnySupportedFormat( "mesh1.ctm" );
    if ( !mesh1Res.has_value() )
    {
    std::cerr << mesh1Res.error();
    return 1;
    }
    auto mesh2Res = MR::MeshLoad::fromAnySupportedFormat( "mesh2.ctm" );
    if ( !mesh2Res.has_value() )
    {
    std::cerr << mesh2Res.error();
    return 1;
    }
    auto dist = MR::findSignedDistance( *mesh1Res, *mesh2Res );
    std::cout << "Signed distance between meshes is " << dist.signedDist << "\n";
    return 0;
    }
    int main()
    Definition LaplacianDeformation.cpp:4
  • Python
    from meshlib import mrmeshpy
    mesh1 = mrmeshpy.loadMesh("mesh1.ctm")
    mesh2 = mrmeshpy.loadMesh("mesh2.ctm")
    a = mrmeshpy.findSignedDistance(mesh1, mesh2)
    print(f"Signed distance between meshes is {a.signedDist}")
  • C
    #include <MRCMesh/MRMesh.h>
    #include <MRCMesh/MRMeshPart.h>
    #include <MRCMesh/MRMeshLoad.h>
    #include <MRCMesh/MRMeshMeshDistance.h>
    #include <MRCMisc/std_string.h>
    #include <MRCMisc/expected_MR_Mesh_std_string.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    int main( void )
    {
    int rc = EXIT_FAILURE;
    // Load mesh.
    MR_expected_MR_Mesh_std_string* mesh1Res = MR_MeshLoad_fromAnySupportedFormat_2( "mesh1.ctm", NULL, NULL );
    MR_Mesh* mesh1 = MR_expected_MR_Mesh_std_string_value_mut( mesh1Res );
    if ( !mesh1 )
    {
    fprintf( stderr, "Failed to load mesh: %s\n", MR_std_string_data( MR_expected_MR_Mesh_std_string_error( mesh1Res ) ) );
    goto fail_load_1;
    }
    MR_expected_MR_Mesh_std_string* mesh2Res = MR_MeshLoad_fromAnySupportedFormat_2( "mesh2.ctm", NULL, NULL );
    MR_Mesh* mesh2 = MR_expected_MR_Mesh_std_string_value_mut( mesh2Res );
    if ( !mesh2 )
    {
    fprintf( stderr, "Failed to load mesh: %s\n", MR_std_string_data( MR_expected_MR_Mesh_std_string_error( mesh2Res ) ) );
    goto fail_load_2;
    }
    MR_MeshPart* mp1 = MR_MeshPart_Construct( mesh1, NULL );
    MR_MeshPart* mp2 = MR_MeshPart_Construct( mesh2, NULL );
    MR_MeshMeshSignedDistanceResult* res = MR_findSignedDistance_MR_MeshPart( mp1, mp2, NULL, NULL );
    const float* dist = MR_MeshMeshSignedDistanceResult_Get_signedDist( res );
    fprintf( stdout, "Signed distance between meshes is: %f\n", *dist );
    MR_MeshMeshSignedDistanceResult_Destroy( res );
    MR_MeshPart_Destroy( mp2 );
    MR_MeshPart_Destroy( mp1 );
    rc = EXIT_SUCCESS;
    fail_load_2:
    MR_expected_MR_Mesh_std_string_Destroy( mesh2Res );
    fail_load_1:
    MR_expected_MR_Mesh_std_string_Destroy( mesh1Res );
    return rc;
    }