% +------------------------------------------------------------------------+
% | Reference manual page: AABBGeomTraits.tex
% +------------------------------------------------------------------------+
% | 25.02.2009   Author
% | Package: Package
% |
\RCSdef{\RCSAABBGeomTraitsRev}{$Id: header.tex 40270 2007-09-07 15:29:10Z lsaboret $}
\RCSdefDate{\RCSAABBGeomTraitsDate}{$Date: 2007-09-07 17:29:10 +0200 (Ven, 07 sep 2007) $}
% |
\ccRefPageBegin
%%RefPage: end of header, begin of main body
% +------------------------------------------------------------------------+


\begin{ccRefConcept}{AABBGeomTraits}

%% \ccHtmlCrossLink{}     %% add further rules for cross referencing links
%% \ccHtmlIndexC[concept]{} %% add further index entries

\ccDefinition
  
The concept \ccRefName\ defines the requirements for the first template parameter of the class \ccc{AABB_traits<GeomTraits, TrianglePrimitive>}. It provides query types as well as predicates and constructors to detect and compute intersections between objects of those query types with the primitives stored in the AABB tree. In addition, it contains query types as well as predicates and constructors to compute projections between a point query and the primitives stored in the AABB tree.

%\ccGeneralizes
%ThisConcept \\
%ThatConcept

\ccTypes

\ccNestedType{Bbox_3}{Bounding box type.}

\ccNestedType{Do_intersect_3} 
{A functor object to detect intersections between two primitives.
Provides the operators:
\ccc{bool operator()(Type_1 type_1, Type_2 type_2);}
where \ccc{Type_1} and \ccc{Type_2} are relevant types
among \ccc{Ray_3}, \ccc{Segment_3}, \ccc{Line_3}, \ccc{Triangle_3}, \ccc{Sphere_3}, \ccc{Plane_3} and \ccc{Bbox_3} \}. Relevant herein means that a line primitive (ray, segment, line) is tested against a planar or solid primitive (plane, triangle, box, interior of a sphere), and a solid primitive is tested against another solid primitive (sphere against box, box against box). The operator returns \ccc{true} iff \ccc{type_1} and \ccc{type_2} have a non empty intersection.}

\ccNestedType{Do_transversally_intersect_3} 
{A functor object to detect transversal intersections between two primitives.
Provides the operators:
\ccc{int operator()(Type_1 type_1, Type_2 type_2);}
where \ccc{Type_1} and \ccc{Type_2} are relevant types
among \ccc{Ray_3}, \ccc{Segment_3}, \ccc{Line_3} and \ccc{Triangle_3} \}. Relevant herein means that a line primitive (ray, segment, line) is tested against a triangle primitive. The operator returns 1 iff \ccc{type_1} and \ccc{type_2} have a transversal intersection. The operator returns 0 if \ccc{type_1} and \ccc{type_2} have no intersection. The operator returns -1 if a vertex of \ccc{type_1} belongs to \ccc{type_2}. The operator returns -2 in the other cases of non-transversal intersection (i.e. when \ccc{type_1} intersects the vertices or edges of \ccc{type_2} or when \ccc{type_1} intersects \ccc{type_2} tangentially).}

\ccNestedType{Intersect_3} 
{A functor object to construct the intersection between two primitives.
Provides the operators:
\ccc{CGAL::Object operator()(Type_1 type_1, Type_2 type_2);} where \ccc{Type_1} and \ccc{Type_2} are any relevant types among \ccc{Ray_3}, \ccc{Segment_3}, \ccc{Line_3},  \ccc{Triangle_3}, \ccc{Sphere_3}, \ccc{Plane_3} and \ccc{Bbox_3}. \}. The operator computes a \ccc{CGAL::Object} which is the intersection between the objects \ccc{type_1} and \ccc{type_2}.}

\ccCreation
\ccCreationVariable{geomtraits}  %% choose variable name

\ccOperations

\ccMethod{Do_intersect_3 do_intersect_3_object();}
{Returns the intersection detection functor.}

\ccMethod{Do_transversally_intersect_3 do_transversally_intersect_3_object();}
{Returns the transversal intersection detection functor.}

\ccMethod{Intersect_3 intersect_3_object();}
{Returns the intersection constructor.}

\ccHasModels
Any instantiation of \ccc{CGAL::Kernel} is a model of this traits concept.

\ccSeeAlso

\ccc{AABB_traits<GeomTraits,AABBPrimitive>}.

\end{ccRefConcept}

% +------------------------------------------------------------------------+
%%RefPage: end of main body, begin of footer
\ccRefPageEnd
% EOF
% +------------------------------------------------------------------------+

