Helper class that provides core functionality for a top-dimensional simplex in a dim-manifold triangulation.
More...
|
const std::string & | description () const |
| Returns the description associated with this simplex. More...
|
|
void | setDescription (const std::string &desc) |
| Sets the description associated with this simplex. More...
|
|
size_t | index () const |
| Returns the index of this simplex in the underlying triangulation. More...
|
|
Simplex< dim > * | adjacentSimplex (int facet) const |
| Returns the adjacent simplex that is glued to the given facet of this simplex. More...
|
|
Perm< dim+1 > | adjacentGluing (int facet) const |
| Returns a permutation that indicates precisely how this simplex is glued to the adjacent simplex across the given facet. More...
|
|
int | adjacentFacet (int facet) const |
| If the given facet of this simplex is glued to facet f of some adjacent simplex, then this routine returns the adjacent facet number f. More...
|
|
bool | hasBoundary () const |
| Determines if this simplex has any facets that lie on the triangulation boundary. More...
|
|
void | join (int myFacet, Simplex< dim > *you, Perm< dim+1 > gluing) |
| Joins the given facet of this simplex to some facet of another simplex. More...
|
|
Simplex< dim > * | unjoin (int myFacet) |
| Unglues the given facet of this simplex from whatever it is joined to. More...
|
|
void | isolate () |
| Unglues this simplex from any adjacent simplices. More...
|
|
Triangulation< dim > * | triangulation () const |
| Returns the triangulation to which this simplex belongs. More...
|
|
Component< dim > * | component () const |
| Returns the connected component of the triangulation to which this simplex belongs. More...
|
|
template<int subdim> |
Face< dim, subdim > * | face (int face) const |
| Returns the subdim-face of the underlying triangulation that appears as the given subdim-face of this simplex. More...
|
|
template<int subdim> |
Perm< dim+1 > | faceMapping (int face) const |
| Examines the given subdim-face of this simplex, and returns the mapping between the underlying subdim-face of the triangulation and the individual vertices of this simplex. More...
|
|
int | orientation () const |
| Returns the orientation of this simplex in the dim-dimensional triangulation. More...
|
|
bool | facetInMaximalForest (int facet) const |
| Determines whether the given facet of this simplex belongs to the maximal forest that has been chosen for the dual 1-skeleton of the underlying triangulation. 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...
|
|
size_t | markedIndex () const |
| Returns the index at which this object is stored in an MarkedVector. 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...
|
|
|
| SimplexBase (Triangulation< dim > *tri) |
| Creates a new simplex with no description and no facets joined to anything. More...
|
|
| SimplexBase (const std::string &desc, Triangulation< dim > *tri) |
| Creates a new simplex with the given description and no facets joined to anything. More...
|
|
bool | sameDegrees (const SimplexFacesSuite< dim, subdim > &other, Perm< dim+1 > p) const |
| Tests whether the k-face degrees of this and the given simplex are identical, under the given relabelling, for all faces of all dimensions k ≤ subdim. More...
|
|
bool | sameDegrees (const SimplexFaces< dim, subdim > &other, Perm< dim+1 > p) const |
| Tests whether the subdim-face degrees of this and the given simplex are identical, under the given relabelling. More...
|
|
void | clear () |
| Resets all face pointers to null. More...
|
|
template<int dim>
class regina::detail::SimplexBase< dim >
Helper class that provides core functionality for a top-dimensional simplex in a dim-manifold triangulation.
Each top-dimensional simplex is represented by the class Simplex<dim>, which uses this as a base class. End users should not need to refer to SimplexBase directly.
See the Simplex template class notes for further information, including details of how the vertices and facets of each simplex are numbered.
- Python:
- This base class is not present, but the "end user" class Simplex<dim> is.
- Template Parameters
-
dim | the dimension of the underlying triangulation. This must be between 2 and 15 inclusive. |
template<int dim>
template<int subdim>
Examines the given subdim-face of this simplex, and returns the mapping between the underlying subdim-face of the triangulation and the individual vertices of this simplex.
Specifically:
- Suppose several subdim-faces of several top-dimensional simplices are identified within the overall triangulation. Then we call this a single "<i>subdim</i>-face of the triangulation", and arbitrarily label its vertices (0, ..., subdim).
- Now let F denote the subdim-face of the triangulation that corresponds to subdim-face number face of this simplex. Then this routine returns a map from vertices (0, ..., subdim) of F to the corresponding vertex numbers of this simplex.
- In particular, if this routine returns the permutation p, then the images p[0,...,subdim] will be some permutation of the vertices Face<dim, subdim>::ordering[0,...,subdim].
- If F also appears as face number k in some other simplex s, then for each i in the range 0 ≤ i ≤ subdim, vertex
p[i]
of this simplex will be identified with vertex s.faceMapping(k)[i] of simplex s.
If the link of the underlying subdim-face is orientable, then this permutation maps the remaining numbers (subdim+1, ..., dim) to the remaining vertex numbers of this simplex in a manner that preserves orientation as you walk through the many different simplices that contain the same underlying subdim-face. Specifically:
- The images of (subdim+1, ..., dim) under this permutation imply an orientation for the (dim - subdim - 1)-face opposite F in this simplex. These orientations will be consistent for all simplices containing F.
- For faces of codimension two (e.g., edges in a 3-manifold triangulation), this orientation condition is even stronger. Here the link of the face F must be a path (for a boundary face) or a cycle (for an internal face). In each simplex we can form a directed edge from the image of dim-1 to the image of dim under this permutation, and together these directed edges form a directed path or cycle that follows the link of the face F. Moreover, an iteration through the corresponding FaceEmbedding<dim, subdim> objects in order from
F.begin()
to F.end()
, will follow this directed path in order from start to end. (In the case where the link of F is a cycle, the start point in the list of FaceEmbedding objects will be arbitrary.)
Note that, even if the link is orientable, there are still arbitrary decisions to be made for the images of (subdim+1, ..., dim), since there will always be (dim-subdim)!/2 possible mappings that yield the correct orientation.
- Note
- This routine returns the same permutation as FaceEmbedding<dim, subdim>::vertices(), in the context of the FaceEmbedding<dim, subdim> object that refers to subdim-face number face of this simplex.
- Python:
- Python does not support templates. Instead, Python users should call this function in the form
faceMapping(subdim, face)
; that is, the template parameter subdim becomes the first argument of the function.
- Parameters
-
face | the subdim-face of this simplex to examine. This should be between 0 and (dim+1 choose subdim+1)-1 inclusive. |
- Returns
- a mapping from the vertices of the underlying subdim-face of the triangulation to the vertices of this simplex.
Determines whether the given facet of this simplex belongs to the maximal forest that has been chosen for the dual 1-skeleton of the underlying triangulation.
When the skeletal structure of a triangulation is first computed, a maximal forest in the dual 1-skeleton of the triangulation is also constructed. Each dual edge in this maximal forest represents a (dim-1)-face of the (primal) triangulation.
This maximal forest will remain fixed until the triangulation changes, at which point it will be recomputed (as will all other skeletal objects, such as connected components and so on). There is no guarantee that, when it is recomputed, the maximal forest will use the same dual edges as before.
This routine identifies which (dim-1)-faces of the triangulation belong to the dual forest. Because it lives in the Simplex class, this routine can even be used for those dimensions that do not have explicit classes for (dim-1)-faces of the triangulation.
If the skeleton has already been computed, then this routine is very fast (since it just returns a precomputed answer).
- Parameters
-
facet | the facet of this simplex that we are examining. This must be between 0 and dim inclusive. |
- Returns
true
if and only if the given facet of this simplex corresponds to a dual edge in the maximal forest chosen for the dual 1-skeleton.
Unglues this simplex from any adjacent simplices.
As a result, every facet of this simplex will become a boundary facet, and this simplex will form its own separate component of the underlying triangulation.
If there were any adjacent simplices to begin with, these will be updated automatically.
This routine is safe to call even if there are no adjacent simplices (in which case it will do nothing).
Joins the given facet of this simplex to some facet of another simplex.
The other simplex will be updated automatically (i.e., you only need to call join() from one side of the gluing).
You may join a facet of this simplex to some different facet of the same simplex (i.e., you may pass you == this
), though you cannot join a facet to itself.
- Precondition
- This and the given simplex belong to the same triangulation.
-
The given facet of this simplex is not currently glued to anything.
-
The corresponding facet of the other simplex (i.e., facet gluing[myFacet] of you) is likewise not currently glued to anything.
-
We are not attempting to glue a facet to itself (i.e., we do not have both you ==
this
and gluing[myFacet] == myFacet).
- Parameters
-
myFacet | the facet of this simplex that will be glued to the given simplex you. This facet number must be between 0 and dim inclusive. |
you | the other simplex that will be glued to the given facet of this simplex. |
gluing | a permutation that describes how the vertices of this simplex will map to the vertices of you across the new gluing. This permutation should be in the form described by adjacentGluing(). |
Unglues the given facet of this simplex from whatever it is joined to.
As a result, the given facet of this simplex will become a boundary facet.
If there was an adjacent simplex to begin with, then this other simplex will be updated automatically (i.e., you only need to call unjoin() from one side of the gluing).
This routine is safe to call even if the given facet is already a boundary facet (in which case it will do nothing).
- Parameters
-
myFacet | the facet of this simplex whose gluing we will undo. This should be between 0 and dim inclusive. |
- Returns
- the simplex that was originally glued to the given facet of this simplex, or 0 if this was already a boundary facet.