Orbifold Tutte Embeddings
Implementation of the Orbifold Tutte Embedding technique from Noam Aigerman and Yaron Lipman.
This method embeds a sphere-topology mesh into an Euclidean orbifold, that is a chart that paves the plane up to some rotation. In practice, it defines cuts between a set of prescribed cones on the surface which become virtual seams. The parametrization's distortion only depends on the position of the cones.
They are four ways to perform such an embedding:
1) Square orbifold : 3 cones of \(\pi/2\), \(\pi\) and \(\pi/2\)
2) Diamond orbifold : 3 cones \(2\pi/3\), \(2*\pi/3\) and \(2*\pi/3\)
3) Triangle orbifold : 3 cones of \(\pi\), \(2\pi/3\) and \(\pi/3\)
4) Parallelogram orbifold : 4 cones of \(\pi\), \(\pi\), \(\pi\) and \(\pi\)
Note
Only the "square" and the "parallelogram" are currently implemented in mouette
.
Usage
import mouette as M
mesh = M.mesh.load(args.model)
orbifold_type = "parallelogram" # 4 cones, or "square" for 3 cones
orbTutte = M.parametrization.OrbifoldTutteEmbedding(mesh, orbifold_type, cones)
orbTutte.run()
OrbifoldTutteEmbedding(mesh, orbifold_type, cones, use_cotan=True, verbose=False, **kwargs)
Bases: BaseParametrization
Orbifold Tutte's embedding generalizes Tutte's embedding to spherical topologies. Using periodic conditions on a virtually defined boundary, it creates a parametrization that is a tiling of the plane, leading to a seamless parametrization of meshes with sphere topologies
References
[1] Orbifold Tutte Embeddings, Noam Aigerman and Yaron Lipman, ACM Transaction on Graphics, 2015
Parameters:
Name | Type | Description | Default |
---|---|---|---|
mesh
|
SurfaceMesh
|
the mesh to embed. Should be a surface with disk topology. |
required |
orbifold_type
|
str
|
which orbifold to project to. Choices are ["square", "diamond", "triangle", "parallelogram"]. |
required |
cones
|
iterable
|
Cone points that define the virtual boundary (three or four points, depending on the orbifold type). Need to be valid vertex indices. If not specified, will be generated automatically. Defaults to None. |
required |
use_cotan
|
bool
|
whether to use Tutte's original barycentric embedding [1], or use cotangents as weights in the laplacian matrix ([2]). Defaults to True. |
True
|
verbose
|
bool
|
verbose mode. Defaults to True. |
False
|
cones_as_pointcloud
property
Returns the cone distribution as a point cloud
flat_mesh
property
A flat representation of the mesh where uv-coordinates are copied to xy.
Returns:
Name | Type | Description |
---|---|---|
SurfaceMesh |
SurfaceMesh
|
the flat mesh |
OrbifoldType
Bases: Enum
The four types of Euclidean orbifold.
SQUARE = 1
DIAMOND = 2
TRIANGLE = 3
PARALLELOGRAM = 4