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

A large saturated region in a Seifert fibred space formed by joining together saturated blocks. More...

#include <subcomplex/satregion.h>

Inheritance diagram for regina::SatRegion:
regina::Output< SatRegion >

Public Member Functions

 SatRegion (SatBlock *starter)
 Constructs a new region containing just the given block. More...
 
 ~SatRegion ()
 Destroys this structure and all of its internal data, including the individual blocks that make up this region. More...
 
unsigned long numberOfBlocks () const
 Returns the number of saturated blocks that come together to form this saturated region. More...
 
const SatBlockSpecblock (unsigned long which) const
 Returns details of the requested saturated block within this region. More...
 
long blockIndex (const SatBlock *block) const
 Returns the index of the given block within this region. More...
 
unsigned long numberOfBoundaryAnnuli () const
 Returns the number of saturated annuli that together form the boundary components of this region. More...
 
const SatAnnulusboundaryAnnulus (unsigned long which, bool &blockRefVert, bool &blockRefHoriz) const
 Returns the requested saturated annulus on the boundary of this region. More...
 
void boundaryAnnulus (unsigned long which, SatBlock *&block, unsigned &annulus, bool &blockRefVert, bool &blockRefHoriz) const
 Returns fine details of the requested saturated annulus on the boundary of this region. More...
 
SFSpacecreateSFS (bool reflect) const
 Returns details of the Seifert fibred space represented by this region. More...
 
bool expand (SatBlock::TetList &avoidTets, bool stopIfIncomplete=false)
 Expands this region as far as possible within the overall triangulation. More...
 
void writeBlockAbbrs (std::ostream &out, bool tex=false) const
 Writes an abbreviated list of blocks within this region to the given output stream. More...
 
void writeDetail (std::ostream &out, const std::string &title) const
 Writes details of the composition of this region to the given output stream. More...
 
void writeTextShort (std::ostream &out) const
 Writes a short text representation of this object to the given output stream. More...
 
void writeTextLong (std::ostream &out) const
 Writes a detailed text representation of this object to the given output stream. More...
 
 SatRegion (const SatRegion &)=delete
 
SatRegionoperator= (const SatRegion &)=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...
 

Detailed Description

A large saturated region in a Seifert fibred space formed by joining together saturated blocks.

Like a saturated block (described in the class SatBlock), a saturated region is a connected set of tetrahedra built from a subset of fibres. Unlike a saturated block however, a saturated region has no constraints on its boundary - it may have several boundary components or it may have none. For instance, a saturated region might be an entire closed Seifert fibred space, or it might describe a Seifert fibred component of a JSJ decomposition.

A saturated region is formed from a collection of saturated blocks by joining the boundary annuli of these blocks together in pairs. The joins must be made so that the fibres are consistent, though it is allowable to reverse the directions of the fibres. There is no problem with joining two boundary annuli from the same block to each other.

Any boundary annulus of a block that is not joined to some other boundary annulus of a block becomes a boundary annulus of the entire region. In this way, each boundary component of the region (if there are any at all) is formed from a ring of boundary annuli, in the same way that the boundary of a block is. Note that the routine SatBlock::nextBoundaryAnnulus() can be used to trace around a region boundary. Like block boundaries, the boundary of a saturated region need not be part of the boundary of the larger triangulation (i.e., there may be adjacent tetrahedra that are not recognised as part of this saturated structure).

The SatRegion class stores a list of its constituent blocks, but it does not directly store which block boundary annuli are joined to which. This adjacency information is stored within the blocks themselves; see the notes regarding adjacency in the SatBlock class description.

Blocks cannot be added to a region by hand. The way a region is constructed is by locating some initial block within a triangulation and passing this to the SatRegion constructor, and then by calling expand() to locate adjacent blocks and expand the region as far as possible. For locating initial blocks, the class SatBlockStarterSearcher may be of use.

Warning
It is crucial that the adjacency information stored in the blocks is consistent with the region containing them. All this requires is that the blocks are not manipulated externally (e.g., SatBlock::setAdjacent() is not called on any of the blocks), but instead all adjacency information is managed by this class. Routines such as expand() which may add more blocks to the region will update the block adjacencies accordingly.
Todo:
Feature: Have this class track the boundary components properly, with annuli grouped and oriented according to the region boundaries (as opposed to individual block boundaries).

Member Function Documentation

◆ detail()

std::string regina::Output< SatRegion , 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< SatRegion , 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< SatRegion , 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).