skshapes.triangle_mesh package

Functions related to triangle meshes.

Submodules

skshapes.triangle_mesh.edge_topology module

Specific functions for triangle meshes.

class skshapes.triangle_mesh.edge_topology.EdgeTopology(triangles)

Bases: object

Topology of the edges of a triangle mesh.

This class is initialized from the triangles connectivity of a triangle mesh. It computes : - the edges of the mesh - the degrees of the edges (number of adjacent triangles)

For manifold edges (degree 2), it also computes : - the adjacent triangles - the adjacent points

For boundary edges (degree 1), it also computes : - the adjacent triangle - the adjacent point

Manifold edges and boundary edges can be accessed separately using the attributes manifold_edges and boundary_edges.

The indices of manifold edges and boundary edges can be accessed using the attributes is_manifold and is_boundary.

Parameters:

triangles (Int64[Tensor, '_ 3']) – Triangles of the mesh

property boundary_edges

Boundary edges of the mesh.

property manifold_edges

Manifold edges of the mesh.

skshapes.triangle_mesh.energy module

Energy functions for triangle meshes.

skshapes.triangle_mesh.energy.bending_energy(*, points_undef, points_def, triangles, edge_topology=None)

Compute the bending energy of the mesh.

The mathematical formulation is given in page 4 of: https://ddg.math.uni-goettingen.de/pub/HeRuSc14.pdf

The implementation provided here is a pytorch version of the cpp implementation available at: https://gitlab.com/numod/shell-energy/-/blob/main/src/bending_energy.cpp

Parameters:
  • points_undef (torch.Tensor) – The undeformed points of the mesh. Shape: (n_points, dim) for a single mesh and (n_points, n_poses, dim) for a sequence of poses of the same mesh.

  • points_def (torch.Tensor) – The deformed points of the mesh. Shape: (n_points, dim) for a single mesh and (n_points, n_poses, dim) for a sequence of poses of the same mesh.

  • triangles (torch.Tensor) – The triangles of the mesh(es). Shape: (n_triangles, 3).

  • weight (float, optional) – The weight of the bending energy. Default: 0.001.

Return type:

Float32[Tensor, ''] | Float32[Tensor, '_']

skshapes.triangle_mesh.energy.membrane_energy(*, points_undef, points_def, triangles)

Compute the membrane energy of the mesh.

The mathematical formulation is given by equation (8) of: https://ddg.math.uni-goettingen.de/pub/HeRuWaWi12_final.pdf

The implementation provided here is a pytorch version of the cpp implementation available at: https://gitlab.com/numod/shell-energy/-/blob/main/src/membrane_energy.cpp

Parameters:
  • points_undef (torch.Tensor) – The undeformed points of the mesh. Shape: (n_points, dim) for a single mesh and (n_points, n_poses, dim) for a sequence of poses of the same mesh.

  • points_def (torch.Tensor) – The deformed points of the mesh. Shape: (n_points, dim) for a single mesh and (n_points, n_poses, dim) for a sequence of poses of the same mesh.

  • triangles (torch.Tensor) – The triangles of the mesh(es). Shape: (n_triangles, 3).

Return type:

Float32[Tensor, ''] | Float32[Tensor, '_']

skshapes.triangle_mesh.energy.shell_energy(*, points_undef, points_def, triangles, edge_topology=None, weight=0.001)

Compute the shell energy.

The shell energy is defined as the sum of the membrane and weight * bending energies.

Parameters:
  • points_undef (torch.Tensor) – The undeformed points of the mesh. Shape: (n_points, dim) for a single mesh and (n_points, n_poses, dim) for a sequence of poses of the same mesh.

  • points_def (torch.Tensor) – The deformed points of the mesh. Shape: (n_points, dim) for a single mesh and (n_points, n_poses, dim) for a sequence of poses of the same mesh.

  • triangles (torch.Tensor) – The triangles of the mesh(es). Shape: (n_triangles, 3).

  • weight (float, optional) – The weight of the bending energy. Default: 0.001.

Return type:

Float32[Tensor, ''] | Float32[Tensor, '_']

skshapes.triangle_mesh.geometry module

Geometric properties of a triangular mesh.

This module provides functions to compute geometric properties of a triangle mesh such as triangle areas, edge lengths, dihedral angles, etc.

In addition, it is possible to compute these properties for a set of triangle meshes at the same time, if they have the same topology. This is useful when we need to compute the same property along a sequence of deformation of a triangle mesh.

All the function on this module are implemented in PyTorch. They take the points and triangles of the mesh as input and return a tensor with the computed property.

Arguments points can be either a tensor of shape: - (d_points, dim) for a single mesh - (n_meshes, n_poses, dim) for a sequence of poses of the same mesh

skshapes.triangle_mesh.geometry.dihedral_angles(*, points, triangles, edge_topology=None)

Dihedral angles of the edges of a triangular mesh.

Parameters:
  • points (Float32[Tensor, '_ 2'] | Float32[Tensor, '_ 3'] | Float32[Tensor, '_ _ 2'] | Float32[Tensor, '_ _ 3']) – Points or sequence of points with shape (n_points, n_poses, dim).

  • triangles (Int64[Tensor, '_ 3']) – Triangles of the mesh.

  • edge_topology (EdgeTopology | None) – Edge topology of the mesh. If not provided, it will be computed from the triangles.

Return type:

Float32[Tensor, '_'] | Float32[Tensor, '_ _']

Returns:

The dihedral angles of the edges with shape (n_edges,) for a single mesh or (n_edges, n_poses) for a sequence of meshes.

skshapes.triangle_mesh.geometry.edge_centers(points, triangles, edge_topology=None)

Centers of the edges of a triangular mesh.

Parameters:
  • points (Float32[Tensor, '_ 2'] | Float32[Tensor, '_ 3'] | Float32[Tensor, '_ _ 2'] | Float32[Tensor, '_ _ 3']) – Points or sequence of points with shape (n_points, n_poses, dim).

  • triangles (Int64[Tensor, '_ 3']) – Triangles of the mesh.

  • edge_topology (EdgeTopology | None) – Edge topology of the mesh. If not provided, it will be computed from the triangles.

Return type:

Float32[Tensor, '_ _'] | Float32[Tensor, '_ _ _']

Returns:

_description_

skshapes.triangle_mesh.geometry.edge_lengths(*, points, triangles, edge_topology=None)

Lengths of the edges of a triangular mesh.

Parameters:
  • points (Float32[Tensor, '_ 2'] | Float32[Tensor, '_ 3'] | Float32[Tensor, '_ _ 2'] | Float32[Tensor, '_ _ 3']) – Points or sequence of points with shape (n_points, n_poses, dim).

  • triangles (Int64[Tensor, '_ 3']) – Triangles of the mesh.

  • edge_topology (EdgeTopology | None) – Edge topology of the mesh. If not provided, it will be computed from the triangles.

Return type:

Float32[Tensor, '_'] | Float32[Tensor, '_ _']

Returns:

The lengths of the edges with shape (n_edges,) for a single mesh or (n_edges, n_poses) for a sequence of meshes.

skshapes.triangle_mesh.geometry.triangle_areas(*, points, triangles)

Areas of the triangles of a triangular mesh.

Parameters:
  • points (Float32[Tensor, '_ 2'] | Float32[Tensor, '_ 3'] | Float32[Tensor, '_ _ 2'] | Float32[Tensor, '_ _ 3']) – Points or sequence of points with shape (n_points, n_poses, dim).

  • triangles (Int64[Tensor, '_ 3']) – Triangles of the mesh.

Return type:

Float32[Tensor, '_'] | Float32[Tensor, '_ _']

Returns:

The areas of the triangles with shape (n_triangles,) for a single mesh or (n_triangles, n_poses) for a sequence of meshes.

skshapes.triangle_mesh.geometry.triangle_centers(*, points, triangles)

Centers of the triangles of a triangular mesh.

Parameters:
  • points (Float32[Tensor, '_ 2'] | Float32[Tensor, '_ 3'] | Float32[Tensor, '_ _ 2'] | Float32[Tensor, '_ _ 3']) – Points or sequence of points with shape (n_points, n_poses, dim).

  • triangles (Int64[Tensor, '_ 3']) – Triangles of the mesh.

Return type:

Float32[Tensor, '_ _'] | Float32[Tensor, '_ _ _']

Returns:

The centers of the triangles with shape (n_triangles, dim) for a single mesh or (n_triangles, n_poses, dim) for a sequence of meshes.

skshapes.triangle_mesh.geometry.triangle_normals(*, points, triangles)

Triangle normals of a triangular mesh.

Parameters:
  • points (Float32[Tensor, '_ 2'] | Float32[Tensor, '_ 3'] | Float32[Tensor, '_ _ 2'] | Float32[Tensor, '_ _ 3']) – Points or sequence of points with shape (n_points, n_poses, dim).

  • triangles (Int64[Tensor, '_ 3']) – Triangles of the mesh.

Return type:

Float32[Tensor, '_ _'] | Float32[Tensor, '_ _ _']

Returns:

The normals of the triangles with shape (n_triangles, dim) for a single mesh or (n_meshes, n_triangles, dim) for a sequence of meshes.