entente.restore_correspondence module

entente.restore_correspondence.find_correspondence(a, b, atol=0.0001, all_must_match=True, ret_unmatched_b=False, progress=True)[source]

Given a[0], a[1], …, a[k] and b[0], b[1], …, b[j], match each element of a to the corresponding element of b.

When all_must_match is True a and b must contain the same set of elements. b[find_correspondence(a, b)] equals a. Otherwise, return -1 for elements with no match in b.

Parameters:
  • a (np.arraylike) – kxn array.
  • b (np.arraylike) – jxn array.
  • atol (float) – Match tolerance.
  • all_must_match (bool) – When True, a and b must contain the same elements.
  • ret_unmatched_b (bool) – When True, return a tuple which also contains the indices of b which were not matched.
  • progress (bool) – When True, show a progress bar.
Returns:

Indices of b as kx1

Return type:

np.ndarray

Note

This relies on a brute-force algorithm.

For the interpretation of atol, see documentation for np.isclose.

entente.restore_correspondence.restore_correspondence(shuffled_mesh, reference_mesh, atol=0.0001, progress=True)[source]

Given a reference mesh, reorder the vertices of a shuffled copy to restore correspondence with the reference mesh. The vertex set of the shuffled mesh and reference mesh must be equal within atol. Mutate reference_mesh. Ignore faces but preserves their integrity.

Parameters:
  • reference_mesh (lace.mesh.Mesh) – A mesh with the vertices in the desired order.
  • shuffled_mesh (lace.mesh.Mesh) – A mesh with the same vertex set as reference_mesh.
  • progress (bool) – When True, show a progress bar.
Returns:

vx1 which maps old vertices in shuffled_mesh to new.

Return type:

np.ndarray

Note

This was designed to assist in extracting face ordering and groups from a shuffled_mesh that “work” with reference_mesh, so the face ordering and groups can be used with different vertices.

It relies on a brute-force algorithm.