Regina Calculation Engine
Public Types | Public Member Functions | Static Public Member Functions | Protected Member Functions | Static Protected Member Functions | Protected Attributes | List of all members
regina::SatBlock Class Referenceabstract

Represents a saturated block in a Seifert fibred space. More...

#include <subcomplex/satblock.h>

Inheritance diagram for regina::SatBlock:
regina::Output< SatBlock > regina::SatCube regina::SatLST regina::SatLayering regina::SatMobius regina::SatReflectorStrip regina::SatTriPrism

Public Types

typedef std::set< Tetrahedron< 3 > * > TetList
 The data structure used to store a list of tetrahedra that should not be examined by isBlock(). More...
 

Public Member Functions

 SatBlock (const SatBlock &cloneMe)
 Creates a new clone of the given block. More...
 
virtual ~SatBlock ()
 Destroys all internal arrays. More...
 
virtual SatBlockclone () const =0
 Returns a newly created clone of this saturated block structure. More...
 
unsigned nAnnuli () const
 Returns the number of annuli on the boundary of this saturated block. More...
 
const SatAnnulusannulus (unsigned which) const
 Returns details of the requested annulus on the boundary of this saturated block. More...
 
bool twistedBoundary () const
 Is the ring of boundary annuli twisted to form a long Mobius strip? More...
 
bool hasAdjacentBlock (unsigned whichAnnulus) const
 Returns whether there is another saturated block listed as being adjacent to the given boundary annulus of this block. More...
 
SatBlockadjacentBlock (unsigned whichAnnulus) const
 Returns the saturated block listed as being adjacent to the given boundary annulus of this block. More...
 
unsigned adjacentAnnulus (unsigned whichAnnulus) const
 Returns which specific annulus of the adjacent block is listed as being adjacent to the given boundary annulus of this block. More...
 
bool adjacentReflected (unsigned whichAnnulus) const
 Returns whether the adjacency along the given boundary annulus of this block is reflected. More...
 
bool adjacentBackwards (unsigned whichAnnulus) const
 Returns whether the adjacency along the given boundary annulus of this block is backwards. More...
 
void setAdjacent (unsigned whichAnnulus, SatBlock *adjBlock, unsigned adjAnnulus, bool adjReflected, bool adjBackwards)
 Lists the given saturated block as being adjacent to the given boundary annulus of this block. More...
 
virtual void adjustSFS (SFSpace &sfs, bool reflect) const =0
 Adjusts the given Seifert fibred space to insert the contents of this saturated block. More...
 
virtual void transform (const Triangulation< 3 > *originalTri, const Isomorphism< 3 > *iso, Triangulation< 3 > *newTri)
 Adjusts the structure of this block according to the given isomorphism between triangulations. More...
 
void nextBoundaryAnnulus (unsigned thisAnnulus, SatBlock *&nextBlock, unsigned &nextAnnulus, bool &refVert, bool &refHoriz, bool followPrev)
 Finds the next (or previous) boundary annulus around from this, treating all adjacent blocks as part of a single large saturated region. More...
 
std::string abbr (bool tex=false) const
 Returns an abbreviated name or symbol for this block. More...
 
virtual void writeAbbr (std::ostream &out, bool tex=false) const =0
 Writes an abbreviated name or symbol for this block to the given output stream. More...
 
bool operator< (const SatBlock &compare) const
 Implements a consistent ordering of saturated blocks. More...
 
virtual void writeTextShort (std::ostream &out) const =0
 Writes a short text representation of this object to the given output stream. More...
 
virtual void writeTextLong (std::ostream &out) const
 Writes a detailed text representation of this object to the given output stream. More...
 
SatBlockoperator= (const SatBlock &)=delete
 
std::string str () const
 Returns a short text representation of this object. More...
 
std::string utf8 () const
 Returns a short text representation of this object using unicode characters. More...
 
std::string detail () const
 Returns a detailed text representation of this object. More...
 

Static Public Member Functions

static SatBlockisBlock (const SatAnnulus &annulus, TetList &avoidTets)
 Determines whether the given annulus is in fact a boundary annulus for a recognised type of saturated block. More...
 

Protected Member Functions

 SatBlock (unsigned nAnnuli, bool twistedBoundary=false)
 Constructor for a block with the given number of annuli on the boundary. More...
 

Static Protected Member Functions

static bool isBad (Tetrahedron< 3 > *t, const TetList &list)
 Determines whether the given tetrahedron is contained within the given list. More...
 
template<class List >
static bool isBad (Tetrahedron< 3 > *t, const List &list)
 Determines whether the given tetrahedron is contained within the given list. More...
 
static bool notUnique (Tetrahedron< 3 > *test)
 Determines whether the given tetrahedron pointer is null. More...
 
static bool notUnique (Tetrahedron< 3 > *test, Tetrahedron< 3 > *other1)
 Determines whether the given tetrahedron pointer is null or equal to another from the given list. More...
 
static bool notUnique (Tetrahedron< 3 > *test, Tetrahedron< 3 > *other1, Tetrahedron< 3 > *other2)
 Determines whether the given tetrahedron pointer is null or equal to another from the given list. More...
 
static bool notUnique (Tetrahedron< 3 > *test, Tetrahedron< 3 > *other1, Tetrahedron< 3 > *other2, Tetrahedron< 3 > *other3)
 Determines whether the given tetrahedron pointer is null or equal to another from the given list. More...
 
static bool notUnique (Tetrahedron< 3 > *test, Tetrahedron< 3 > *other1, Tetrahedron< 3 > *other2, Tetrahedron< 3 > *other3, Tetrahedron< 3 > *other4)
 Determines whether the given tetrahedron pointer is null or equal to another from the given list. More...
 

Protected Attributes

unsigned nAnnuli_
 The number of boundary annuli. More...
 
SatAnnulusannulus_
 Details of each boundary annulus, as seen from the inside of this saturated block. More...
 
bool twistedBoundary_
 Is the ring of boundary annuli twisted to form a Mobius band? More...
 
SatBlock ** adjBlock_
 The saturated block joined to each boundary annulus; this may be null if there is no adjacency or if this information is not known. More...
 
unsigned * adjAnnulus_
 Describes which specific annulus of the adjacent saturated block is joined to each boundary annulus of this block. More...
 
bool * adjReflected_
 Describes whether the adjacency for each boundary annulus is reflected (see the class notes above). More...
 
bool * adjBackwards_
 Describes whether the adjacency for each boundary annulus is backwards (see the class notes above). More...
 

Detailed Description

Represents a saturated block in a Seifert fibred space.

A saturated block is a connected set of tetrahedra built from a subset of fibres (no fibres may enter or exit the boundary of the block). In addition, the boundary of this block must be a ring of saturated annuli, as described by the SatAnnulus class. Aside from this ring of saturated annuli, there may be no other boundary triangles within the block.

The boundary annuli are numbered consecutively as illustrated below, where the markings 0 and 1 within the triangles represent the first and second triangle of each annulus (see the SatAnnulus class notes for details). Note that the following diagram is viewed from inside the block.

              -+---+---+---+---+---+---+-
               |0 /|0 /|0 /|0 /|0 /|0 /|
           ... | / | / | / | / | / | / | ...
               |/ 1|/ 1|/ 1|/ 1|/ 1|/ 1|
              -+---+---+---+---+---+---+-
Annulus #  ...  n-2 n-1  0   1   2   3   ...

The ring of boundary annuli may optionally be twisted, so that together the annuli form a long Mobius band. In this case, for the purposes of labelling and marking annuli, the twist occurs between annuli n-1 and 0. Be careful when dealing with blocks with twisted boundaries, since with twists it is possible to identify an edge with itself in reverse (thus producing something that is not a 3-manifold triangulation).

Each saturated block corresponds to a piece of the base orbifold of the larger Seifert fibred space. For the purpose of connecting the base orbifold together, we assume that the boundary of this particular piece runs horizontally in the diagram above (specifically following the horizontal edges of the boundary annuli, as described in the SatAnnulus class notes). Insisting on such a boundary may lead to (1,k) twists within the block; these are accounted for by the virtual adjustSFS() routine.

Saturated blocks are generally joined to one another (or themselves) along their boundary annuli. For this purpose, each saturated block contains a list of which annulus of this block is adjacent to which annulus of which other block. Adjacencies may be reflected, meaning that the adjacent annulus has its fibres reversed (i.e., the adjacent annulus has undergone an up-to-down reflection); they may also be backwards, meaning that the first triangle of one annulus is joined to the second triangle of the other (and vice versa).

Warning
In addition to mandatory overrides such as clone() and adjustSFS(), some subclasses will need to override the virtual routine transform() in order to correctly adjust additional triangulation-specific information stored in the subclass. See the transform() documentation for further details.

Member Function Documentation

◆ detail()

std::string regina::Output< SatBlock , false >::detail ( ) const
inherited

Returns a detailed text representation of this object.

This text may span many lines, and should provide the user with all the information they could want. It should be human-readable, should not contain extremely long lines (which cause problems for users reading the output in a terminal), and should end with a final newline. There are no restrictions on the underlying character set.

Returns
a detailed text representation of this object.

◆ str()

std::string regina::Output< SatBlock , false >::str ( ) const
inherited

Returns a short text representation of this object.

This text should be human-readable, should fit on a single line, and should not end with a newline. Where possible, it should use plain ASCII characters.

Python
In addition to str(), this is also used as the Python "stringification" function str().
Returns
a short text representation of this object.

◆ utf8()

std::string regina::Output< SatBlock , false >::utf8 ( ) const
inherited

Returns a short text representation of this object using unicode characters.

Like str(), this text should be human-readable, should fit on a single line, and should not end with a newline. In addition, it may use unicode characters to make the output more pleasant to read. This string will be encoded in UTF-8.

Returns
a short text representation of this object.

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

Copyright © 1999-2021, 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).