mirror of https://github.com/CGAL/cgal
168 lines
5.1 KiB
TeX
168 lines
5.1 KiB
TeX
% +------------------------------------------------------------------------+
|
|
% | Reference manual page: TDS_2::Face.tex
|
|
% +------------------------------------------------------------------------+
|
|
% | 07.04.2000 Author
|
|
% | Package: Package
|
|
% |
|
|
\RCSdef{\RCSTdsFace}{$Id$}
|
|
\RCSdefDate{\RCSTdsFaceDate}{$Date$}
|
|
% |
|
|
%%RefPage: end of header, begin of main body
|
|
% +------------------------------------------------------------------------+
|
|
|
|
|
|
\begin{ccRefConcept}{TriangulationDataStructure_2::Face}
|
|
|
|
%% \ccHtmlCrossLink{} %% add further rules for cross referencing links
|
|
%% \ccHtmlIndexC[concept]{} %% add further index entries
|
|
|
|
\ccDefinition
|
|
|
|
The concept \ccRefName\ describes the types used to store the faces
|
|
face class of a
|
|
\ccc{TriangulationDataStructure_2}\lcTex{, see
|
|
\ccRefPage{TriangulationDataStructure_2}}.
|
|
A \ccRefName\ stores three pointers to its three vertices
|
|
and three pointers to its three neighbors.
|
|
The vertices are indexed 0,1, and 2 in counterclockwise order.
|
|
The neighbor indexed $i$ lies
|
|
opposite to vertex i.
|
|
|
|
In degenerate cases,
|
|
when the triangulation data structure stores a
|
|
simplicial complex of dimension $0$ and $1$,
|
|
the type \ccRefName\ is used to store the faces
|
|
of maximal dimension of the complex
|
|
: i.e. a vertex in dimension $0$, an edge in dimension $1$.
|
|
Only vertices and neighbors with index $0$ are set in the first case,
|
|
only vertices and neighbors with index $0$ or $1$ are set in the second case.
|
|
|
|
|
|
\ccTypes
|
|
The class \ccRefName\ defines the same types as
|
|
the triangulation data structure
|
|
except the iterators and the circulators.
|
|
|
|
\ccCreationVariable{f} %% choose variable name
|
|
|
|
\ccCreation
|
|
|
|
The methods \ccc{create_face} and
|
|
\ccc{delete_face()}
|
|
have to be used to
|
|
define new faces and to delete non longer used faces.
|
|
|
|
|
|
\ccHeading{Vertex Access Functions}
|
|
\ccThree{Vertex_handle}{f.has_neighbors((Face_handle n);}{}
|
|
|
|
\ccMethod{Vertex_handle vertex(int i) const;}
|
|
{returns the vertex \ccc{i} of \ccVar.
|
|
\ccPrecond $0\leq i \leq 2$.}
|
|
\ccGlue
|
|
\ccMethod{int index(Vertex_handle v) const;}
|
|
{returns the index of vertex \ccc{v} in \ccVar. \ccPrecond \ccc{v} is
|
|
a vertex of \ccVar}
|
|
\ccGlue
|
|
\ccMethod{bool has_vertex(Vertex_handle v) const;}
|
|
{returns \ccc{true} if \ccc{v} is a vertex of \ccVar.}
|
|
\ccGlue
|
|
\ccMethod{bool has_vertex(Vertex_handle v, int& i) const;}
|
|
{returns \ccc{true} if \ccc{v} is a vertex of \ccVar, and
|
|
computes the index \ccc{i} of \ccc{v} in \ccc{f}.}
|
|
|
|
|
|
\ccHeading{Neighbor Access Functions}
|
|
|
|
The neighbor with index \ccc{i} is the neighbor which is opposite
|
|
to the vertex with index \ccc{i}.
|
|
|
|
|
|
\ccMethod{Face_handle neighbor(int i) const;}
|
|
{returns the neighbor \ccc{i} of \ccVar.
|
|
\ccPrecond $0\leq i \leq 2$.
|
|
}
|
|
\ccGlue
|
|
\ccMethod{int index(Face_handle n) const;}
|
|
{returns the index of face \ccc{n}.
|
|
\ccPrecond \ccc{n} is a neighbor of \ccVar.}
|
|
\ccGlue
|
|
\ccMethod{bool has_neighbor(Face_handle n) const;}
|
|
{returns \ccc{true} if \ccc{n} is a neighbor of \ccVar.}
|
|
\ccGlue
|
|
\ccMethod{bool has_neighbor(Face_handle n, int& i) const;}
|
|
{returns \ccc{true} if \ccc{n} is a neighbor of \ccVar, and
|
|
compute the index \ccc{i} of \ccc{n}.}
|
|
|
|
|
|
|
|
\begin{ccAdvanced}
|
|
\ccHeading{Setting}
|
|
|
|
\ccThree{Vertex_handle}{f.has_vertex( Vertex_handle v, int& i)x}{}
|
|
\ccMethod{void set_vertex(int i, Vertex_handle v);}
|
|
{sets vertex \ccc{i} to be \ccc{v}.
|
|
\ccPrecond $0\leq i \leq 2$.
|
|
}
|
|
\ccGlue
|
|
\ccMethod{void set_neighbor(int i, Face_handle n);}
|
|
{sets neighbor \ccc{i} to be \ccc{n}.
|
|
\ccPrecond $0\leq i \leq 2$.
|
|
}
|
|
\ccGlue
|
|
\ccMethod{ void set_vertices();}{sets the vertices pointers to \ccc{NULL}.}
|
|
\ccGlue
|
|
\ccMethod{void set_vertices(Vertex_handle v0,
|
|
Vertex_handle v1,
|
|
Vertex_handle v2);}{sets the vertices pointers.}
|
|
\ccGlue
|
|
\ccMethod{void set_neighbors();} {sets the neighbors pointers to \ccc{NULL}.}
|
|
\ccGlue
|
|
\ccMethod{void set_neighbors(Face_handle n0,
|
|
Face_handle n1,
|
|
Face_handle n2);}{sets the neighbors pointers.}
|
|
|
|
|
|
\ccHeading{Checking}
|
|
|
|
\ccMethod{bool is_valid() const;}
|
|
{returns \ccc{true} if the function
|
|
\ccc{is_valid()} of the base class
|
|
returns \ccc{true} and if, for each index $i$, $0 \le i < 3$,
|
|
face $f$ is a neighbor of its neighboring face \ccc{neighbor(i)}
|
|
and shares with this neighbor the vertices \ccc{cw(i)} and \ccc{ccw(i)}
|
|
in correct reverse order.}
|
|
|
|
\end{ccAdvanced}
|
|
|
|
\ccHeading{Miscellaneous}
|
|
|
|
\ccMethod{int ccw(int i) const;}
|
|
{Returns $i+1$ modulo 3.\ccPrecond $0\leq i \leq 2$.}
|
|
|
|
\ccMethod{int cw(int i) const;}
|
|
{Returns $i+2$ modulo 3.\ccPrecond $0\leq i \leq 2$.}
|
|
|
|
\ccHeading{I/O}
|
|
|
|
\ccFunction{istream& operator>> (istream& is, TriangulationDataStructure_2::Face & f);}
|
|
{Inputs any non combinatorial information possibly stored in the face.}
|
|
\ccGlue
|
|
\ccFunction{ostream& operator<< (ostream& os, const TriangulationDataStructure_2::Face & f);}
|
|
{Outputs any non combinatorial information possibly stored in the face.}
|
|
|
|
|
|
\ccSeeAlso
|
|
\ccc{TriangulationDataStructure_2}, \\
|
|
\ccc{TriangulationDataStructure_2::Vertex}, \\
|
|
\ccc{TriangulationFaceBase_2}.
|
|
|
|
|
|
\end{ccRefConcept}
|
|
|
|
% +------------------------------------------------------------------------+
|
|
%%RefPage: end of main body, begin of footer
|
|
% EOF
|
|
% +------------------------------------------------------------------------+
|
|
|