Regina Calculation Engine
Public Member Functions | List of all members
regina::Layering Class Reference

Represents a layering of zero or more tetrahedra upon a torus boundary. More...

#include <subcomplex/layering.h>

Public Member Functions

 Layering (Tetrahedron< 3 > *bdry0, Perm< 4 > roles0, Tetrahedron< 3 > *bdry1, Perm< 4 > roles1)
 Creates a new trivial (zero-tetrahedron) layering upon the given boundary. More...
 
unsigned long size () const
 Returns the number of individual tetrahedra that have been layered onto the original boundary, according to the data stored in this structure. More...
 
Tetrahedron< 3 > * oldBoundaryTet (unsigned which) const
 Returns the tetrahedra that provide the old boundary triangles. More...
 
Perm< 4 > oldBoundaryRoles (unsigned which) const
 Returns the permutations that describe the old boundary triangles. More...
 
Tetrahedron< 3 > * newBoundaryTet (unsigned which) const
 Returns the tetrahedra that provide the new boundary triangles. More...
 
Perm< 4 > newBoundaryRoles (unsigned which) const
 Returns the permutations that describe the new boundary triangles. More...
 
const Matrix2boundaryReln () const
 Returns a 2-by-2 matrix describing the relationship between curves on the old and new boundary tori. More...
 
bool extendOne ()
 Examines whether a single additional tetrahedron has been layered upon the current new boundary. More...
 
unsigned long extend ()
 Examines whether one or more additional tetrahedra have been layered upon the current new boundary. More...
 
bool matchesTop (Tetrahedron< 3 > *upperBdry0, Perm< 4 > upperRoles0, Tetrahedron< 3 > *upperBdry1, Perm< 4 > upperRoles1, Matrix2 &upperReln) const
 Determines whether the new torus boundary of this structure is identified with the given torus boundary. More...
 
 Layering (const Layering &)=delete
 
Layeringoperator= (const Layering &)=delete
 

Detailed Description

Represents a layering of zero or more tetrahedra upon a torus boundary.

A layering involves laying a new tetrahedron flat upon two adjacent boundary triangles in order to change the boundary curves. Many tetrahedra may be layered upon a boundary in succession in order to change the boundary curves more dramatically.

A torus boundary is specified by two tetrahedra (which may be the same) and two permutations. Each permutation maps (0,1,2) in the diagram below to the corresponding vertex numbers in each tetrahedron (and therefore maps 3 to the corresponding face number).

    *--->>--*
    |0  2 / |
    |    / 1|
    v   /   v
    |1 /    |
    | / 2  0|
    *--->>--*

In particular, if the two tetrahedra are t0 and t1 and the two corresponding permutations are p0 and p1, then:

Note that we do not actually require these triangular faces to form a torus, and this is never verifed by any of the routines in this class. What these routines do is use the diagram above to define the rules of what forms a valid layering (and in fact the layering itself will often be the cause of these edge identifications). This allows the Layering class a little more versatility in degenerate and boundary cases.

This class keeps track of an old boundary, which is the original pair of triangles upon which the first tetrahedron is layered, and a new boundary, which is formed by the last layered tetrahedron and contains the modified boundary curves. If no tetrahedra are layered at all then the old and new boundaries will be identical.

This class is used to search for layerings as follows. The constructor is called with a particular pair of triangles that will form the old boundary (note that these are generally not boundary triangles in the triangulation, since we are searching for layerings that have been placed upon them). This forms a trivial (zero-tetrahedron) layering. The routines extend() or extendOne() are then called to see how many additional tetrahedra have been layered upon this pair of triangles according to the rules above.


The documentation for this class was generated from the following file:

Copyright © 1999-2020, The Regina development team
This software is released under the GNU General Public License, with some additional permissions; see the source code for details.
For further information, or to submit a bug or other problem, please contact Ben Burton (bab@maths.uq.edu.au).