Regina Calculation Engine
Public Member Functions | Static Public Member Functions | Protected Member Functions | List of all members
regina::NSatCube Class Reference

A saturated block that is a six-tetrahedron cube. More...

#include <subcomplex/nsatblocktypes.h>

Inheritance diagram for regina::NSatCube:
regina::NSatBlock regina::ShareableObject regina::boost::noncopyable

Public Member Functions

 NSatCube (const NSatCube &cloneMe)
 Constructs a clone of the given block structure. More...
 
virtual NSatBlockclone () const
 Returns a newly created clone of this saturated block structure. More...
 
virtual void adjustSFS (NSFSpace &sfs, bool reflect) const
 Adjusts the given Seifert fibred space to insert the contents of this saturated block. More...
 
virtual void writeTextShort (std::ostream &out) const
 Writes this object in short text format to the given output stream. More...
 
virtual void writeAbbr (std::ostream &out, bool tex=false) const
 Writes an abbreviated name or symbol for this block to the given output stream. More...
 
- Public Member Functions inherited from regina::NSatBlock
 NSatBlock (const NSatBlock &cloneMe)
 Creates a new clone of the given block. More...
 
 ~NSatBlock ()
 Destroys all internal arrays. More...
 
unsigned nAnnuli () const
 Returns the number of annuli on the boundary of this saturated block. More...
 
const NSatAnnulusannulus (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...
 
NSatBlockadjacentBlock (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, NSatBlock *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 transform (const NTriangulation *originalTri, const NIsomorphism *iso, NTriangulation *newTri)
 Adjusts the structure of this block according to the given isomorphism between triangulations. More...
 
void nextBoundaryAnnulus (unsigned thisAnnulus, NSatBlock *&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 getAbbr (bool tex=false) const
 Returns an abbreviated name or symbol for this block. More...
 
bool operator< (const NSatBlock &compare) const
 Implements a consistent ordering of saturated blocks. More...
 
- Public Member Functions inherited from regina::ShareableObject
 ShareableObject ()
 Default constructor that does nothing. More...
 
virtual ~ShareableObject ()
 Default destructor that does nothing. More...
 
virtual void writeTextLong (std::ostream &out) const
 Writes this object in long text format to the given output stream. More...
 
std::string str () const
 Returns the output from writeTextShort() as a string. More...
 
std::string toString () const
 A deprecated alias for str(), which returns the output from writeTextShort() as a string. More...
 
std::string detail () const
 Returns the output from writeTextLong() as a string. More...
 
std::string toStringLong () const
 A deprecated alias for detail(), which returns the output from writeTextLong() as a string. More...
 

Static Public Member Functions

static NSatCubeisBlockCube (const NSatAnnulus &annulus, TetList &avoidTets)
 Determines whether the given annulus is a boundary annulus for a block of this type (cube). More...
 
static NSatCubeinsertBlock (NTriangulation &tri)
 Inserts a new copy of a cube block into the given triangulation, and returns the corresponding block structure. More...
 
- Static Public Member Functions inherited from regina::NSatBlock
static NSatBlockisBlock (const NSatAnnulus &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

 NSatCube ()
 Constructs an uninitialised block. More...
 
- Protected Member Functions inherited from regina::NSatBlock
 NSatBlock (unsigned nAnnuli, bool twistedBoundary=false)
 Constructor for a block with the given number of annuli on the boundary. More...
 

Additional Inherited Members

- Public Types inherited from regina::NSatBlock
typedef std::set< NTetrahedron * > TetList
 The data structure used to store a list of tetrahedra that should not be examined by isBlock(). More...
 
- Static Protected Member Functions inherited from regina::NSatBlock
static bool isBad (NTetrahedron *t, const TetList &list)
 Determines whether the given tetrahedron is contained within the given list. More...
 
template<class List >
static bool isBad (NTetrahedron *t, const List &list)
 Determines whether the given tetrahedron is contained within the given list. More...
 
static bool notUnique (NTetrahedron *test)
 Determines whether the given tetrahedron pointer is null. More...
 
static bool notUnique (NTetrahedron *test, NTetrahedron *other1)
 Determines whether the given tetrahedron pointer is null or equal to another from the given list. More...
 
static bool notUnique (NTetrahedron *test, NTetrahedron *other1, NTetrahedron *other2)
 Determines whether the given tetrahedron pointer is null or equal to another from the given list. More...
 
static bool notUnique (NTetrahedron *test, NTetrahedron *other1, NTetrahedron *other2, NTetrahedron *other3)
 Determines whether the given tetrahedron pointer is null or equal to another from the given list. More...
 
static bool notUnique (NTetrahedron *test, NTetrahedron *other1, NTetrahedron *other2, NTetrahedron *other3, NTetrahedron *other4)
 Determines whether the given tetrahedron pointer is null or equal to another from the given list. More...
 
- Protected Attributes inherited from regina::NSatBlock
unsigned nAnnuli_
 The number of boundary annuli. More...
 
NSatAnnulusannulus_
 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...
 
NSatBlock ** 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

A saturated block that is a six-tetrahedron cube.

There are several ways of triangulating a cube with six tetrahedra; the specific method used here is illustrated in the diagram below (where the top face of the cube is identified with the bottom).

cube.png

Note that none of the four tetrahedra that meet the boundary annuli touch each other, and that each of these four boundary tetrahedra meet both central tetrahedra. Note also that (unlike other triangulations) this cube cannot be split vertically into two triangular prisms.

Constructor & Destructor Documentation

regina::NSatCube::NSatCube ( const NSatCube cloneMe)
inline

Constructs a clone of the given block structure.

Parameters
cloneMethe block structure to clone.
regina::NSatCube::NSatCube ( )
inlineprotected

Constructs an uninitialised block.

The boundary annuli must be initialised before this block can be used.

Member Function Documentation

virtual void regina::NSatCube::adjustSFS ( NSFSpace sfs,
bool  reflect 
) const
virtual

Adjusts the given Seifert fibred space to insert the contents of this saturated block.

In particular, the space should be adjusted as though an ordinary solid torus (base orbifold a disc, no twists or exceptional fibres) had been replaced by this block. This description does not make sense for blocks with twisted boundary; the twisted case is discussed below.

If the argument reflect is true, it should be assumed that this saturated block is being reflected before being inserted into the larger Seifert fibred space. That is, any twists or exceptional fibres should be negated before being added.

Regarding the signs of exceptional fibres: Consider a saturated block containing a solid torus whose meridinal curve runs p times horizontally around the boundary in order through annuli 0,1,... and follows the fibres q times from bottom to top (as depicted in the diagram in the NSatBlock class notes). Then this saturated block adds a positive (p, q) fibre to the underlying Seifert fibred space.

If the ring of saturated annuli bounding this block is twisted then the situation becomes more complex. It can be proven that such a block must contain a twisted reflector boundary in the base orbifold (use Z_2 homology with fibre-reversing paths to show that the base orbifold must contain another twisted boundary component, and then recall that real boundaries are not allowed inside blocks).

In this twisted boundary case, it should be assumed that the twisted reflector boundary is already stored in the given Seifert fibred space. This routine should make any further changes that are required (there may well be none). That is, the space should be adjusted as though a trivial Seifert fibred space over the annulus with one twisted reflector boundary (and one twisted puncture corresponding to the block boundary) had been replaced by this block. In particular, this routine should not add the reflector boundary itself.

Parameters
sfsthe Seifert fibred space to adjust.
reflecttrue if this block is to be reflected, or false if it should be inserted directly.

Implements regina::NSatBlock.

NSatBlock * regina::NSatCube::clone ( ) const
inlinevirtual

Returns a newly created clone of this saturated block structure.

A clone of the correct subclass of NSatBlock will be returned. For this reason, each subclass of NSatBlock must implement this routine.

Returns
a new clone of this block.

Implements regina::NSatBlock.

static NSatCube* regina::NSatCube::insertBlock ( NTriangulation tri)
static

Inserts a new copy of a cube block into the given triangulation, and returns the corresponding block structure.

The given triangulation will not be emptied before the new tetrahedra are inserted.

Parameters
trithe triangulation into which the new block should be inserted.
Returns
structural details of the newly inserted block.
static NSatCube* regina::NSatCube::isBlockCube ( const NSatAnnulus annulus,
TetList avoidTets 
)
static

Determines whether the given annulus is a boundary annulus for a block of this type (cube).

This routine is a specific case of NSatBlock::isBlock(); see that routine for further details.

Parameters
annulusthe proposed boundary annulus that should form part of the new saturated block.
avoidTetsthe list of tetrahedra that should not be considered, and to which any new tetrahedra will be added.
Returns
details of the saturated block if one was found, or null if none was found.
void regina::NSatCube::writeAbbr ( std::ostream &  out,
bool  tex = false 
) const
inlinevirtual

Writes an abbreviated name or symbol for this block to the given output stream.

This name should reflect the particular block type, but need not provide thorough details.

The output should be no more than a handful of characters long, and no newline should be written. In TeX mode, no leading or trailing dollar signs should be written.

Python:
The parameter out does not exist; standard output will be used.
Parameters
outthe output stream to which to write.
textrue if the output should be formatted for TeX, or false if it should be in plain text format.

Implements regina::NSatBlock.

void regina::NSatCube::writeTextShort ( std::ostream &  out) const
inlinevirtual

Writes this object in short text format to the given output stream.

The output should be human-readable, should fit on a single line, and should not end with a newline.

Python:
The parameter out does not exist; standard output will be used.
Parameters
outthe output stream to which to write.

Implements regina::ShareableObject.


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

Copyright © 1999-2013, 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@debian.org).