regina::NormalSurface Class Reference
Normal Surfaces

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

`#include <surfaces/normalsurface.h>`

Inheritance diagram for regina::NormalSurface:

## 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...
NormalSurface * | clone () const
| Creates a newly allocated clone of this normal surface. More...
NormalSurface * | doubleSurface () 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...
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...
MatrixInt * | boundaryIntersections () const
| Computes the information about the boundary slopes of this surface at each cusp of the triangulation. More...
const Ray & | rawVector () 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...
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...

## Protected Attributes

NormalSurfaceVector * | vector
| 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< DiscType > | octPosition_
| The position of the first non-zero octagonal coordinate, or DiscType::NONE if there is no non-zero octagonal coordinate. More...
Property< LargeInteger > | eulerChar_
| The Euler characteristic of 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

## detail()

std::string regina::Output< NormalSurface , supportsUtf8 >::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< NormalSurface , supportsUtf8 >::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:\n 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< NormalSurface , supportsUtf8 >::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.

## writeTextLong()

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

inline inherited

A default implementation for detailed output.

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

Python:\n Not present.

Parameters

  out | the output stream to which to write.

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

- surfaces/normalsurface.h

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