% +------------------------------------------------------------------------+
% | Reference manual page: Triangulation_Traits_3.tex
% +------------------------------------------------------------------------+
% | 27.3.2000   Monique Teillaud
% | Package: Triangulation3
% | 
\RCSdef{\RCSTriangulationTraitsRev}{$Id$}
\RCSdefDate{\RCSTriangulationTraitsDate}{$Date$}
% |
%%RefPage: end of header, begin of main body
% +------------------------------------------------------------------------+


\begin{ccRefConcept}{TriangulationTraits_3}

\ccDefinition
The concept \ccRefName\ is the first template parameter of the class
\ccc{Triangulation_3}. It defines the geometric objects (points, segments,
triangles and tetrahedra) forming the triangulation together with a few
geometric predicates and constructions on these objects : lexicographical
comparison, orientation in case of coplanar points and orientation in space.

\ccTypes
\ccTwo{TriangulationTraits_3::Tetrahedron_3xx}{}

\ccNestedType{Point_3}
{The point type.  It must be \ccc{DefaultConstructible},
\ccc{CopyConstructible} and \ccc{Assignable}.}
\ccGlue
\ccNestedType{Segment_3} {The segment type.}
\ccGlue
\ccNestedType{Tetrahedron_3} {The tetrahedron type.}
\ccGlue
\ccNestedType{Triangle_3} {The triangle type.}

\ccTwo{TriangulationTraits_3}{}

\ccNestedType{Construct_segment_3}
{A constructor object that must provide the function operator\\
\ccc{Segment_3 operator()(Point_3 p, Point_3 q)},\\
which constructs a segment from two points.}
\ccGlue
\ccNestedType{Construct_triangle_3}
{A constructor object that must provide the function operator\\
\ccc{Triangle_3 operator()(Point_3 p, Point_3 q, Point_3 r )},\\
which constructs a triangle from three points.}
\ccGlue
\ccNestedType{Construct_tetrahedron_3}
{A constructor object that must provide the function operator\\
\ccc{Tetrahedron_3 operator()(Point_3 p, Point_3 q, Point_3 r, Point_3 s)},\\
which constructs a tetrahedron from four points.}

\ccNestedType{Compare_xyz_3}
{A predicate object that must provide the function operator\\ 
\ccc{Comparison_result operator()(Point p, Point q)},\\
which returns \ccc{EQUAL} if the two points are equal.  Otherwise it must
return a consistent order for any two points chosen in a same line.}
\ccGlue
\ccNestedType{Coplanar_orientation_3}
{A predicate object that must provide the function operator\\
\ccc{Orientation operator()(Point p, Point q, Point r)},\\
which returns \ccc{COLLINEAR} if the points are collinear.  Otherwise it must
return a consistent orientation for any three points chosen in a same plane.
}
\ccGlue
\ccNestedType{Orientation_3}
{A predicate object that must provide the function operator\\
\ccc{Orientation operator()(Point p, Point q, Point r, Point s)},\\
which returns POSITIVE, if \ccc{s} lies on the positive side of the oriented
plane \ccc{h} defined by \ccc{p}, \ccc{q}, and \ccc{r}, returns NEGATIVE if
\ccc{s} lies on the negative side of \ccc{h}, and returns COPLANAR if \ccc{s}
lies on \ccc{h}.}

\ccCreation
\ccCreationVariable{traits}
\ccThree{Triangulation_traits_3xxx();}{Triangulation_traits_3 & tr}{}
\ccThreeToTwo

\ccConstructor{Triangulation_traits_3();}{Default constructor.}
\ccGlue
\ccConstructor{Triangulation_traits_3(const Triangulation_traits_3 & tr);}
{Copy constructor.}

\ccOperations

The following functions give access to the predicate and construction objects:

\ccThree{coplanar_side_of_bounded_circle_3xxx}{gt.xxxxxxxxx(Point p0, Point p1)x}{}

\ccMethod{Construct_tetrahedron_3 construct_tetrahedron_3_object();}{}
\ccGlue
\ccMethod{Construct_triangle_3 construct_triangle_3_object();}{}
\ccGlue
\ccMethod{Construct_segment_3 construct_segment_3_object();}{}

\ccMethod{Compare_xyz_3 compare_xyz_3_object();}{}
\ccGlue
\ccMethod{Coplanar_orientation_3 coplanar_orientation_3_object();}{}
\ccGlue
\ccMethod{Orientation_3 orientation_3_object();}{}


\ccHasModels

\ccc{CGAL::Exact_predicates_inexact_constructions_kernel} (recommended)\\
\ccc{CGAL::Exact_predicates_exact_constructions_kernel}\\
\ccc{CGAL::Filtered_kernel}\\
\ccc{CGAL::Cartesian}\\
\ccc{CGAL::Simple_cartesian}\\
\ccc{CGAL::Homogeneous}\\
\ccc{CGAL::Simple_homogeneous}

\end{ccRefConcept}
