Welcome to entente’s documentation!

entente package

Submodules

entente.cli module

entente.composite module

entente.composite.composite_meshes(mesh_paths)[source]

Create a composite as a vertex-wise average of several meshes in correspondence. Faces, groups, and other attributes are loaded from the first mesh given.

Parameters:mesh_paths (list) – Paths of the meshes to average.
Returns:The composite mesh.
Return type:lace.mesh.Mesh

entente.equality module

Utilities related to mesh equality.

entente.equality.attr_has_same_shape(first_obj, second_obj, attr)[source]

Given two objects, check if the given arraylike attributes of those objects have the same shape. If one object has an attribute value of None, the other must too.

Parameters:
  • first_obj (obj) – A object with an arraylike attr attribute.
  • second_obj (obj) – Another object with an arraylike attr attribute.
  • attr (str) – The name of the attribute to test.
Returns:

True if attributes are the same shape

Return type:

bool

entente.equality.attr_is_equal(first_obj, second_obj, attr)[source]

Given two objects, check if the given arraylike attributes of those objects are equal. If one object has an attribute value of None, the other must too.

Parameters:
  • first_obj (obj) – A object with an arraylike attr attribute.
  • second_obj (obj) – Another object with an arraylike attr attribute.
  • attr (str) – The name of the attribute to test.
Returns:

True if attributes are equal

Return type:

bool

entente.equality.have_same_topology(first_mesh, second_mesh)[source]

Given two meshes, check if they have the same vertex count and same faces. In other words, check if they have the same topology.

Parameters:
  • first_mesh (lace.mesh.Mesh) – A mesh.
  • second_mesh (lace.mesh.Mesh) – Another mesh.
Returns:

True if meshes have the same topology

Return type:

bool

entente.geometry module

Functions relating to mesh geometry.

entente.geometry.compute_barycentric_coordinates(vertices_of_tris, points)[source]

Compute barycentric coordinates for the projection of a set of points to a given set of triangles specfied by their vertices.

These barycentric coordinates can refer to points outside the triangle. This happens when one of the coordinates is negative. However they can’t specify points outside the triangle’s plane. (That requires tetrahedral coordinates.)

The returned coordinates supply a linear combination which, applied to the vertices, returns the projection of the original point the plane of the triangle.

Parameters:
  • vertices_of_tris (np.arraylike) – A set of triangle vertices as kx3x3.
  • points (np.arraylike) – Coordinates of points as kx3.
Returns:

Barycentric coordinates as kx3

Return type:

np.ndarray

Note

A function with this signature probably belongs in blmath.

entente.landmarks module

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.

entente.shuffle module

entente.shuffle.shuffle_faces(mesh)[source]

Shuffle the mesh’s face ordering. The mesh is mutated.

Parameters:mesh (lace.mesh.Mesh) – A mesh.
Returns:fx1 mapping of old face indices to new.
Return type:np.ndarray
entente.shuffle.shuffle_vertices(mesh)[source]

Shuffle the mesh’s vertex ordering, preserving the integrity of the faces. The mesh is mutated.

Parameters:mesh (lace.mesh.Mesh) – A mesh.
Returns:vx1 mapping of old vertex indices to new.
Return type:np.ndarray

entente.testing module

entente.testing.assert_same_face_set(a, b)[source]
entente.testing.assert_same_vertex_set(a, b)[source]
entente.testing.coord_set(a)[source]
entente.testing.mesh_asset(*components)[source]
entente.testing.relative_to_project(*components)[source]
entente.testing.vitra_mesh()[source]

entente.validation module

entente.validation.validate_shape(a, *shape, **kwargs)[source]

Check that the given argument has the expected shape. Shape dimensions can be ints or -1 for a wildcard. The wildcard dimensions are returned, which allows them to be used for subsequent validation or elsewhere in the function.

Parameters:
  • a (np.arraylike) – An array-like input.
  • shape (list) – Shape to validate. To require 3 by 1, pass 3. To require n by 3, pass -1, 3.
  • name (str) – Variable name to embed in the error message.
Returns:

The wildcard dimension (if one) or a tuple of wildcard dimensions (if more than one).

Return type:

object

entente.validation.validate_shape_from_ns(namespace, name, *shape)[source]

Convenience function for invoking validate_shape() with a locals() dict.

Parameters:
  • namespace (dict) – A subscriptable object, typically locals().
  • name (str) – Key to pull from namespace.
  • shape (list) – Shape to validate. To require 3 by 1, pass 3. To require n by 3, pass -1, 3.
Returns:

The wildcard dimension (if one) or a tuple of wildcard dimensions (if more than one).

Return type:

object

Example

validate_shape_from_namespace(locals(), ‘points’, -1, 3)

Indices and tables