Regina Calculation Engine
Public Member Functions | Protected Member Functions | Protected Attributes | Friends | List of all members
regina::NormalSurface Class Reference

Represents a single normal surface in a 3-manifold. More...

#include <surfaces/normalsurface.h>

Inheritance diagram for regina::NormalSurface:
regina::ShortOutput< NormalSurface > regina::Output< T, supportsUtf8 >

Public Member Functions

 NormalSurface (const Triangulation< 3 > *triang, NormalSurfaceVector *newVector)
 Creates a new normal surface inside the given triangulation with the given coordinate vector. More...
 
 NormalSurface (const Triangulation< 3 > *triang, NormalCoords coordSystem, List allCoords)
 A Python-only routine that creates a new normal surface inside the given triangulation with the given coordinate vector. More...
 
 ~NormalSurface ()
 Destroys this normal surface. More...
 
NormalSurfaceclone () const
 Creates a newly allocated clone of this normal surface. More...
 
NormalSurfacedoubleSurface () const
 Creates a newly allocated surface that is the double of this surface. More...
 
LargeInteger triangles (size_t tetIndex, int vertex) const
 Returns the number of triangular discs of the given type in this normal surface. More...
 
LargeInteger orientedTriangles (size_t tetIndex, int vertex, bool orientation) const
 Returns the number of oriented triangular discs of the given type in this normal surface. More...
 
LargeInteger quads (size_t tetIndex, int quadType) const
 Returns the number of quadrilateral discs of the given type in this normal surface. More...
 
LargeInteger orientedQuads (size_t tetIndex, int quadType, bool orientation) const
 Returns the number of oriented quadrilateral discs of the given type in this normal surface. More...
 
LargeInteger octs (size_t tetIndex, int octType) const
 Returns the number of octagonal discs of the given type in this normal surface. More...
 
LargeInteger edgeWeight (size_t edgeIndex) const
 Returns the number of times this normal surface crosses the given edge. More...
 
LargeInteger arcs (size_t triIndex, int triVertex) const
 Returns the number of arcs in which this normal surface intersects the given triangle in the given direction. More...
 
DiscType octPosition () const
 Determines the first coordinate position at which this surface has a non-zero octagonal coordinate. More...
 
size_t countCoords () const
 Returns the number of coordinates in the specific underlying coordinate system being used. More...
 
const Triangulation< 3 > * triangulation () const
 Returns the triangulation in which this normal surface resides. More...
 
const std::string & name () const
 Returns the name associated with this normal surface. More...
 
void setName (const std::string &newName)
 Sets the name associated with this normal surface. More...
 
void writeTextShort (std::ostream &out) const
 Writes this surface to the given output stream, using standard triangle-quad-oct coordinates. More...
 
void writeRawVector (std::ostream &out) const
 Writes the underlying coordinate vector to the given output stream in text format. More...
 
void writeXMLData (std::ostream &out) const
 Writes a chunk of XML containing this normal surface and all of its properties. More...
 
bool isEmpty () const
 Determines if this normal surface is empty (has no discs whatsoever). More...
 
bool isCompact () const
 Determines if this normal surface is compact (has finitely many discs). More...
 
LargeInteger eulerChar () const
 Returns the Euler characteristic of this surface. More...
 
bool isOrientable () const
 Returns whether or not this surface is orientable. More...
 
bool isTwoSided () const
 Returns whether or not this surface is two-sided. More...
 
bool isConnected () const
 Returns whether or not this surface is connected. More...
 
bool hasRealBoundary () const
 Determines if this surface has any real boundary, that is, whether it meets any boundary triangles of the triangulation. More...
 
bool isVertexLinking () const
 Determines whether or not this surface is vertex linking. More...
 
const Vertex< 3 > * isVertexLink () const
 Determines whether or not a rational multiple of this surface is the link of a single vertex. More...
 
std::pair< const Edge< 3 > *, const Edge< 3 > * > isThinEdgeLink () const
 Determines whether or not a rational multiple of this surface is the thin link of a single edge. More...
 
bool isSplitting () const
 Determines whether or not this surface is a splitting surface. More...
 
LargeInteger isCentral () const
 Determines whether or not this surface is a central surface. More...
 
size_t countBoundaries () const
 Returns the number of disjoint boundary curves on this surface. More...
 
bool isCompressingDisc (bool knownConnected=false) const
 Determines whether this surface represents a compressing disc in the underlying 3-manifold. More...
 
bool isIncompressible () const
 Determines whether this is an incompressible surface within the surrounding 3-manifold. More...
 
Triangulation< 3 > * cutAlong () const
 Cuts the associated triangulation along this surface and returns a newly created resulting triangulation. More...
 
Triangulation< 3 > * crush () const
 Crushes this surface to a point in the associated triangulation and returns a newly created resulting triangulation. More...
 
bool sameSurface (const NormalSurface &other) const
 Determines whether this and the given surface in fact represent the same normal (or almost normal) surface. More...
 
bool normal () const
 Determines whether this surface contains only triangle and/or quadrilateral discs. More...
 
bool embedded () const
 Determines whether this surface is embedded. More...
 
bool locallyCompatible (const NormalSurface &other) const
 Determines whether this and the given surface are locally compatible. More...
 
bool disjoint (const NormalSurface &other) const
 Determines whether this and the given surface can be placed within the surrounding triangulation so that they do not intersect anywhere at all, without changing either normal isotopy class. More...
 
MatrixIntboundaryIntersections () const
 Computes the information about the boundary slopes of this surface at each cusp of the triangulation. More...
 
const RayrawVector () const
 Gives read-only access to the raw vector that sits beneath this normal surface. More...
 
bool systemAllowsAlmostNormal () const
 Determines if the underlying coordinate system being used allows for almost normal surfaces, that is, allows for octagonal discs. More...
 
bool systemAllowsSpun () const
 Determines if the underlying coordinate system being used allows for spun normal surfaces. More...
 
bool systemAllowsOriented () const
 Determines if the underlying coordinate system being used allows for transversely oriented normal surfaces. More...
 
 NormalSurface (const NormalSurface &)=delete
 
NormalSurfaceoperator= (const NormalSurface &)=delete
 
void writeTextLong (std::ostream &out) const
 A default implementation for detailed output. More...
 
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...
 

Protected Member Functions

void calculateOctPosition () const
 Calculates the position of the first non-zero octagon coordinate and stores it as a property. More...
 
void calculateEulerChar () const
 Calculates the Euler characteristic of this surface and stores it as a property. More...
 
void calculateOrientable () const
 Calculates whether this surface is orientable and/or two-sided and stores the results as properties. More...
 
void calculateRealBoundary () const
 Calculates whether this surface has any real boundary and stores the result as a property. More...
 
void calculateBoundaries () const
 Computes the number of disjoint boundary curves and stores the result as a property. More...
 

Protected Attributes

NormalSurfaceVectorvector
 Contains the coordinates of the normal surface in whichever space is appropriate. More...
 
const Triangulation< 3 > * triangulation_
 The triangulation in which this normal surface resides. More...
 
std::string name_
 An optional name associated with this surface. More...
 
Property< DiscTypeoctPosition_
 The position of the first non-zero octagonal coordinate, or DiscType::NONE if there is no non-zero octagonal coordinate. More...
 
Property< LargeIntegereulerChar_
 The Euler characteristic of this surface. More...
 
Property< size_t > boundaries_
 The number of disjoint boundary curves on this surface. More...
 
Property< bool > orientable
 Is this surface orientable? More...
 
Property< bool > twoSided
 Is this surface two-sided? More...
 
Property< bool > connected
 Is this surface connected? More...
 
Property< bool > realBoundary
 Does this surface have real boundary (i.e. More...
 
Property< bool > compact
 Is this surface compact (i.e. More...
 

Friends

class XMLNormalSurfaceReader
 

Detailed Description

Represents a single normal surface in a 3-manifold.

Once the underlying triangulation changes, this normal surface object is no longer valid.

The information provided by the various query methods is independent of the underlying coordinate system being used. See the NormalSurfaceVector class notes for details of what to do when introducing a new coordinate system.

Note that non-compact surfaces (surfaces with infinitely many discs, such as spun-normal surfaces) are allowed; in these cases, the corresponding coordinate lookup routines will return LargeInteger::infinity where appropriate.

Todo:

Feature: Calculation of Euler characteristic and orientability for non-compact surfaces.

Feature (long-term): Determine which faces in the solution space a normal surface belongs to.

Member Function Documentation

◆ writeTextLong()

void regina::ShortOutput< NormalSurface , false >::writeTextLong ( std::ostream &  out) const
inlineinherited

A default implementation for detailed output.

This routine simply calls T::writeTextShort() and appends a final newline.

Python
Not present.
Parameters
outthe output stream to which to write.

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).