\begin{ccRefConcept}{Kernel}
The concept of a {\em kernel} is defined by a set of requirements on
the provision of certain types and access member functions to create 
objects of these types. The types are function object classes to be used
within the algorithms and data structures in the basic library of \cgal. 
This allows you to use any model of a kernel as a traits class in 
the \cgal\ algorithms and data structures, unless they require types 
beyond those provided by a kernel. 

A kernel subsumes the concepts of {\em two-dimensional kernel},
{\em three-dimensional kernel}, and {\em $d$-dimensional kernel}.

A kernel provides types, construction objects, and generalized predicates. 
The former replace constructors of the kernel classes and constructive procedures
in the kernel. There are also function objects replacing operators, especially
for equality testing.

\ccCreationVariable{kernel}

\ccTypes

\ccNestedType{FT}{a number type that is a model for \ccc{FieldNumberType}}
\ccGlue
\ccNestedType{RT}{a number type that is a model for \ccc{RingNumberType}}

\ccHeading{Two-dimensional Kernel}

\ccHeading{Geometric Objects}

\ccNestedType{Point_2}{}
\ccGlue
\ccNestedType{Vector_2}{}
\ccGlue
\ccNestedType{Direction_2}{}
\ccGlue
\ccNestedType{Line_2}{}
\ccGlue
\ccNestedType{Ray_2}{}
\ccGlue
\ccNestedType{Segment_2}{}
\ccGlue
\ccNestedType{Triangle_2}{}
\ccGlue
\ccNestedType{Iso_rectangle_2}{}
%%\ccGlue
%%\ccNestedType{Aff_transformation_2}{}
\ccGlue
\ccNestedType{Circle_2}{}
\ccGlue
\ccNestedType{Object_2}{}

\ccHeading{Constructors}

\ccNestedType{Construct_point_2}{}
\ccGlue
\ccNestedType{Construct_vector_2}{}
\ccGlue
\ccNestedType{Construct_direction_2}{}
\ccGlue
\ccNestedType{Construct_segment_2}{}
\ccGlue
\ccNestedType{Construct_line_2}{}
\ccGlue
\ccNestedType{Construct_ray_2}{}
\ccGlue
\ccNestedType{Construct_circle_2}{}
\ccGlue
\ccNestedType{Construct_triangle_2}{}
\ccGlue
\ccNestedType{Construct_iso_rectangle_2}{}
\ccGlue
\ccNestedType{Construct_object_2}{}
%%\ccGlue
%%\ccNestedType{Construct_aff_transformation_2}{}
\ccGlue
\ccNestedType{Construct_scaled_vector_2}{}
\ccGlue
\ccNestedType{Construct_translated_point_2}{}
\ccGlue
\ccNestedType{Construct_point_on_2}{}
\ccGlue
\ccNestedType{Construct_projected_point_2}{}
\ccGlue
\ccNestedType{Construct_projected_xy_point_2}{}
%%\ccGlue
%%\ccNestedType{Construct_second_point_on_2}{}
%%\ccGlue
%%\ccNestedType{Construct_source_point_2}{}
%%\ccGlue
%%\ccNestedType{Construct_target_point_2}{}
%%\ccGlue
%%\ccNestedType{Construct_min_point_2}{}
%%\ccGlue
%%\ccNestedType{Construct_max_point_2}{}
\ccGlue
\ccNestedType{Construct_vertex_2}{}
%%\ccGlue
%%\ccNestedType{Construct_direction_of_line_2}{}
%%\ccGlue
%%\ccNestedType{Construct_direction_of_ray_2}{}
\ccGlue
\ccNestedType{Construct_supporting_line_2}{}
\ccGlue
\ccNestedType{Construct_perpendicular_vector_2}{}
\ccGlue
\ccNestedType{Construct_perpendicular_direction_2}{}
\ccGlue
\ccNestedType{Construct_perpendicular_line_2}{}
\ccGlue
\ccNestedType{Construct_midpoint_2}{}
\ccGlue
\ccNestedType{Construct_center_2}{}
\ccGlue
\ccNestedType{Construct_centroid_2}{}
\ccGlue
\ccNestedType{Construct_circumcenter_2}{}
\ccGlue
\ccNestedType{Construct_bisector_2}{}
\ccGlue
\ccNestedType{Construct_opposite_direction_2}{}
\ccGlue
\ccNestedType{Construct_opposite_segment_2}{}
\ccGlue
\ccNestedType{Construct_opposite_ray_2}{}
\ccGlue
\ccNestedType{Construct_opposite_line_2}{}
\ccGlue
\ccNestedType{Construct_opposite_triangle_2}{}
\ccGlue
\ccNestedType{Construct_opposite_circle_2}{}
\ccGlue
\ccNestedType{Construct_opposite_vector_2}{}

If the result type is not determined, there is no \ccc{Construct_} prefix:

%%\ccNestedType{Transform_2}{}
%%\ccGlue
\ccNestedType{Intersect_2}{}
\ccGlue
\ccNestedType{Assign_2}{}

If the result type is a number type, the prefix is \ccc{Compute_}:

\ccNestedType{Compute_y_at_x_2}{}
\ccGlue
\ccNestedType{Compute_squared_distance_2}{}
\ccGlue
\ccNestedType{Compute_squared_length_2}{}
\ccGlue
\ccNestedType{Compute_squared_radius_2}{}
\ccGlue
\ccNestedType{Compute_area_2}{}

\ccHeading{Generalized Predicates}

\ccNestedType{Angle_2}{}
\ccGlue
\ccNestedType{Equal_2}{}
\ccGlue
\ccNestedType{Equal_x_2}{}
\ccGlue
\ccNestedType{Equal_y_2}{}
\ccGlue
\ccNestedType{Less_x_2}{}
\ccGlue
\ccNestedType{Less_y_2}{}
\ccGlue
\ccNestedType{Less_xy_2}{}
\ccGlue
\ccNestedType{Less_yx_2}{}
\ccGlue
\ccNestedType{Compare_x_2}{}
\ccGlue
\ccNestedType{Compare_x_at_y_2}{}
\ccGlue
\ccNestedType{Compare_y_2}{}
\ccGlue
\ccNestedType{Compare_xy_2}{}
\ccGlue
\ccNestedType{Compare_y_at_x_2}{}
\ccGlue
\ccNestedType{Compare_distance_2}{}
\ccGlue
\ccNestedType{Compare_angle_with_x_axis_2}{}
\ccGlue
\ccNestedType{Less_signed_distance_to_line_2}{}
\ccGlue
\ccNestedType{Less_rotate_ccw_2}{}
\ccGlue
\ccNestedType{Leftturn_2}{}
\ccGlue
\ccNestedType{Left_of_line_2}{}
\ccGlue
\ccNestedType{Collinear_2}{}
\ccGlue
\ccNestedType{Orientation_2}{}
\ccGlue
\ccNestedType{Side_of_oriented_circle_2}{}
\ccGlue
\ccNestedType{Side_of_bounded_circle_2}{}
\ccGlue
\ccNestedType{Is_horizontal_2}{}
\ccGlue
\ccNestedType{Is_vertical_2}{}
\ccGlue
\ccNestedType{Is_degenerate_2}{}
\ccGlue
\ccNestedType{Has_on_2}{}
\ccGlue
\ccNestedType{Collinear_has_on_2}{}
\ccGlue
\ccNestedType{Has_on_bounded_side_2}{}
\ccGlue
\ccNestedType{Has_on_unbounded_side_2}{}
\ccGlue
\ccNestedType{Has_on_boundary_2}{}
\ccGlue
\ccNestedType{Has_on_positive_side_2}{}
\ccGlue
\ccNestedType{Has_on_negative_side_2}{}
\ccGlue
\ccNestedType{Oriented_side_2}{}
\ccGlue
\ccNestedType{Bounded_side_2}{}
\ccGlue
\ccNestedType{Are_ordered_along_line_2 }{}
\ccGlue
\ccNestedType{Are_strictly_ordered_along_line_2}{}
\ccGlue
\ccNestedType{Collinear_are_ordered_along_line_2}{}
\ccGlue
\ccNestedType{Collinear_are_strictly_ordered_along_line_2}{}
\ccGlue
\ccNestedType{Counterclockwise_in_between_2}{}
\ccGlue
\ccNestedType{Do_intersect_2}{}

\ccHeading{Three-dimensional Kernel}

\ccHeading{Geometric Objects}

\ccNestedType{Point_3}{}
\ccGlue
\ccNestedType{Vector_3}{}
\ccGlue
\ccNestedType{Direction_3}{}
\ccGlue
\ccNestedType{Iso_cuboid_3}{}
\ccGlue
\ccNestedType{Line_3}{}
\ccGlue
\ccNestedType{Ray_3}{}
\ccGlue
\ccNestedType{Sphere_3}{}
\ccGlue
\ccNestedType{Segment_3}{}
\ccGlue
\ccNestedType{Plane_3}{}
\ccGlue
\ccNestedType{Triangle_3}{}
\ccGlue
\ccNestedType{Tetrahedron_3}{}
%%\ccGlue
%%\ccNestedType{Aff_transformation_3}{}
\ccGlue
\ccNestedType{Object_3}{}

\ccHeading{Constructors}

\ccNestedType{Construct_point_3}{}
\ccGlue
\ccNestedType{Construct_vector_3}{}
\ccGlue
\ccNestedType{Construct_direction_3}{}
\ccGlue
\ccNestedType{Construct_plane_3}{}
\ccGlue
\ccNestedType{Construct_iso_cuboid_3}{}
\ccGlue
\ccNestedType{Construct_line_3}{}
\ccGlue
\ccNestedType{Construct_ray_3}{}
\ccGlue
\ccNestedType{Construct_sphere_3}{}
\ccGlue
\ccNestedType{Construct_segment_3}{}
\ccGlue
\ccNestedType{Construct_triangle_3}{}
\ccGlue
\ccNestedType{Construct_tetrahedron_3}{}
\ccGlue
\ccNestedType{Construct_object_3}{}
%%\ccGlue
%%\ccNestedType{Construct_aff_transformation_3}{}
\ccGlue
\ccNestedType{Construct_scaled_vector_3}{}
\ccGlue
\ccNestedType{Construct_translated_point_3}{}
\ccGlue
\ccNestedType{Construct_point_on_3}{}
\ccGlue
\ccNestedType{Construct_projected_point_3}{}
\ccGlue
\ccNestedType{Construct_lifted_point_3}{}
%%\ccGlue
%%\ccNestedType{Construct_second_point_on_3}{}
%%\ccGlue
%%\ccNestedType{Construct_source_point_3}{}
%%\ccGlue
%%\ccNestedType{Construct_target_point_3}{}
%%\ccGlue
%%\ccNestedType{Construct_min_point_3}{}
%%\ccGlue
%%\ccNestedType{Construct_max_point_3}{}
\ccGlue
\ccNestedType{Construct_vertex_3}{}
%%\ccGlue
%%\ccNestedType{Construct_direction_of_line_3}{}
%%\ccGlue
%%\ccNestedType{Construct_direction_of_ray_3}{}
\ccGlue
\ccNestedType{Construct_supporting_line_3}{}
\ccGlue
\ccNestedType{Construct_supporting_plane_3}{}
\ccGlue
\ccNestedType{Construct_orthogonal_vector_3}{}
\ccGlue
\ccNestedType{Construct_base_vector_3}{}
\ccGlue
\ccNestedType{Construct_perpendicular_plane_3}{}
\ccGlue
\ccNestedType{Construct_perpendicular_line_3}{}
\ccGlue
\ccNestedType{Construct_midpoint_3}{}
\ccGlue
\ccNestedType{Construct_center_3}{}
\ccGlue
\ccNestedType{Construct_centroid_3}{}
\ccGlue
\ccNestedType{Construct_circumcenter_3}{}
\ccGlue
\ccNestedType{Construct_cross_product_vector_3}{}
\ccGlue
\ccNestedType{Construct_opposite_direction_3}{}
\ccGlue
\ccNestedType{Construct_opposite_segment_3}{}
\ccGlue
\ccNestedType{Construct_opposite_ray_3}{}
\ccGlue
\ccNestedType{Construct_opposite_line_3}{}
\ccGlue
\ccNestedType{Construct_opposite_plane_3}{}
\ccGlue
\ccNestedType{Construct_opposite_sphere_3}{}
\ccGlue
\ccNestedType{Construct_opposite_vector_3}{}

If the result type is not determined, there is no \ccc{Construct_} prefix:

%%\ccNestedType{Transform_3}{}
%%\ccGlue
\ccNestedType{Intersect_3}{}
\ccGlue
\ccNestedType{Assign_3}{}

If the result type is a number type, the prefix is \ccc{Compute_}:

\ccNestedType{Compute_squared_area_3}{}
\ccGlue
\ccNestedType{Compute_squared_distance_3}{}
\ccGlue
\ccNestedType{Compute_squared_length_3}{}
\ccGlue
\ccNestedType{Compute_squared_radius_3}{}
\ccGlue
\ccNestedType{Compute_volume_3}{}

\ccHeading{Generalized Predicates}

\ccNestedType{Angle_3}{}
\ccGlue
\ccNestedType{Equal_3}{}
\ccGlue
\ccNestedType{Equal_x_3}{}
\ccGlue
\ccNestedType{Equal_y_3}{}
\ccGlue
\ccNestedType{Equal_z_3}{}
\ccGlue
\ccNestedType{Equal_xy_3}{}
\ccGlue
\ccNestedType{Less_x_3}{}
\ccGlue
\ccNestedType{Less_y_3}{}
\ccGlue
\ccNestedType{Less_z_3}{}
\ccGlue
\ccNestedType{Less_xy_3}{}
\ccGlue
\ccNestedType{Less_xyz_3}{}
\ccGlue
\ccNestedType{Compare_x_3}{}
\ccGlue
\ccNestedType{Compare_y_3}{}
\ccGlue
\ccNestedType{Compare_z_3}{}
\ccGlue
\ccNestedType{Compare_xy_3}{}
\ccGlue
\ccNestedType{Compare_xyz_3}{}
\ccGlue
\ccNestedType{Less_signed_distance_to_plane_3}{}
\ccGlue
\ccNestedType{Compare_distance_3}{}
\ccGlue
\ccNestedType{Collinear_3}{}
\ccGlue
\ccNestedType{Coplanar_3}{}
\ccGlue
\ccNestedType{Orientation_3}{}
\ccGlue
\ccNestedType{Coplanar_orientation_3}{}
\ccGlue
\ccNestedType{Coplanar_side_of_bounded_circle_3}{}
\ccGlue
\ccNestedType{Side_of_oriented_sphere_3}{}
\ccGlue
\ccNestedType{Side_of_bounded_sphere_3}{}
\ccGlue
\ccNestedType{Is_degenerate_3}{}
\ccGlue
\ccNestedType{Has_on_3}{}
\ccGlue
\ccNestedType{Has_on_bounded_side_3}{}
\ccGlue
\ccNestedType{Has_on_unbounded_side_3}{}
\ccGlue
\ccNestedType{Has_on_boundary_3}{}
\ccGlue
\ccNestedType{Has_on_positive_side_3}{}
\ccGlue
\ccNestedType{Has_on_negative_side_3}{}
\ccGlue
\ccNestedType{Oriented_side_3}{}
\ccGlue
\ccNestedType{Bounded_side_3}{}
\ccGlue
\ccNestedType{Are_ordered_along_line_3 }{}
\ccGlue
\ccNestedType{Are_strictly_ordered_along_line_3}{}
\ccGlue
\ccNestedType{Collinear_are_ordered_along_line_3}{}
\ccGlue
\ccNestedType{Collinear_are_strictly_ordered_along_line_3}{}
\ccGlue
\ccNestedType{Do_intersect_3}{}


\ccHeading{d-dimensional Kernel}

\ccHeading{Geometric Objects}

\ccNestedType{Point_d}{}

\ccHeading{Constructors}

\ccNestedType{Construct_Point_d}{}

\ccOperations

The following member functions return function objects of the types listed 
above.  The name of the access function is the name of the type returned with 
an \ccc{_object} suffix.

\ccTexHtml{\ccSetThreeColumns{Kernel::Are_strictly_ordered_along_line}{}{\hspace*{4.5cm}}}{}

\setlength{\parskip}{0pt}

\def\ccTagRmEigenClassName{\ccFalse}
\ccMemberFunction{Kernel::Construct_point_2  construct_point_2_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Construct_vector_2 construct_vector_2_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Construct_direction_2 construct_direction_2_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Construct_segment_2 construct_segment_2_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Construct_line_2 construct_line_2_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Construct_ray_2 construct_ray_2_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Construct_circle_2 construct_circle_2_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Construct_triangle_2 construct_triangle_2_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Construct_iso_rectangle_2 construct_iso_rectangle_2_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Construct_object_2 construct_object_2_object() const ;}{}
%%\ccGlue
%%\ccMemberFunction{Kernel::Construct_aff_transformation_2 construct_aff_transformation_2_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Construct_scaled_vector_2 construct_scaled_vector_2_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Construct_translated_point_2 construct_translated_point_2_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Construct_point_on_2 construct_point_on_2_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Construct_projected_point_2 construct_projected_point_2_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Construct_projected_xy_point_2 construct_projected_xy_point_2_object() const ;}{}
%%\ccGlue
%%\ccMemberFunction{Kernel::Construct_second_point_on_2 construct_second_point_on_2_object() const ;}{}
%%\ccGlue
%%\ccMemberFunction{Kernel::Construct_source_point_2 construct_source_point_2_object() const ;}{}
%%\ccGlue
%%\ccMemberFunction{Kernel::Construct_target_point_2 construct_target_point_2_object() const ;}{}
%%\ccGlue
%%\ccMemberFunction{Kernel::Construct_min_point_2 construct_min_point_2_object() const ;}{}
%%\ccGlue
%%\ccMemberFunction{Kernel::Construct_max_point_2 construct_max_point_2_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Construct_vertex_2 construct_vertex_2_object() const ;}{}
%%\ccGlue
%%\ccMemberFunction{Kernel::Construct_direction_of_line_2 construct_direction_of_line_2_object() const ;}{}
%%\ccGlue
%%\ccMemberFunction{Kernel::Construct_direction_of_ray_2 construct_direction_of_ray_2_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Construct_supporting_line_2 construct_supporting_line_2_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Construct_perpendicular_vector_2 construct_perpendicular_vector_2_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Construct_perpendicular_direction_2 construct_perpendicular_direction_2_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Construct_perpendicular_line_2 construct_perpendicular_line_2_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Construct_midpoint_2 construct_midpoint_2_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Construct_centroid_2 construct_centroid_2_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Construct_circumcenter_2 construct_circumcenter_2_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Construct_bisector_2 construct_bisector_2_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Construct_opposite_direction_2 construct_opposite_direction_2_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Construct_opposite_segment_2 construct_opposite_segment_2_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Construct_opposite_ray_2 construct_opposite_ray_2_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Construct_opposite_line_2 construct_opposite_line_2_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Construct_opposite_triangle_2 construct_opposite_triangle_2_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Construct_opposite_circle_2 construct_opposite_circle_2_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Construct_opposite_vector_2 construct_opposite_vector_2_object() const ;}{}
%%\ccGlue
%%\ccMemberFunction{Kernel::Transform_2 transform_2_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Assign_2 assign_2_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Intersect_2 intersect_2_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Do_intersect_2 do_intersect_2_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Compute_y_at_x_2 compute_y_at_x_2_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Compute_squared_distance_2 compute_squared_distance_2_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Compute_squared_length_2 compute_squared_length_2_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Compute_squared_radius_2 compute_squared_radius_2_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Compute_area_2 compute_area_2_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Angle_2 angle_2_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Equal_2 equal_2_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Equal_x_2 equal_x_2_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Equal_y_2 equal_y_2_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Less_x_2 less_x_2_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Less_y_2 less_y_2_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Less_xy_2 less_xy_2_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Less_yx_2 less_yx_2_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Compare_x_2 compare_x_2_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Compare_x_at_y_2 compare_x_at_y_2_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Compare_y_2 compare_y_2_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Compare_xy_2 compare_xy_2_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Compare_y_at_x_2 compare_y_at_x_2_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Compare_distance_2 compare_distance_2_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Compare_angle_with_x_axis_2 compare_angle_with_x_axis_2_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Less_signed_distance_to_line_2 less_signed_distance_to_line_2_object(const Kernel::Point_2& p, const Kernel::Point_2& q) const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Less_rotate_ccw_2 less_rotate_ccw_2_object(const Kernel::Point_2& p) const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Counterclockwise_in_between_2 counterclockwise_in_between_2_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Leftturn_2 leftturn_2_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Left_of_line_2 left_of_line_2_object(const Kernel::Point_2& p, const Kernel::Point_2& q) const ;}{}
\ccGlue
%\ccMemberFunction{Kernel::Right_of_line_2 right_of_line_2_object(const Kernel::Point_2& p, const Kernel::Point_2& q) const ;}{}
%\ccGlue
%\ccMemberFunction{Kernel::Left_of_line_2 left_of_vertical_2_object(const Kernel::Point_2& p) const ;}{}
%\ccGlue
\ccMemberFunction{Kernel::Collinear_2 collinear_2_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Orientation_2 orientation_2_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Side_of_oriented_circle_2 side_of_oriented_circle_2_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Side_of_bounded_circle_2 side_of_bounded_circle_2_object() const;}{}
\ccGlue
\ccMemberFunction{Kernel::Is_horizontal_2 is_horizontal_2_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Is_vertical_2 is_vertical_2_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Is_degenerate_2 is_degenerate_2_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Has_on_2 has_on_2_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Collinear_has_on_2 collinear_has_on_2_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Has_on_bounded_side_2 has_on_bounded_side_2_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Has_on_unbounded_side_2 has_on_unbounded_side_2_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Has_on_boundary_2 has_on_boundary_2_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Has_on_positive_side_2 has_on_positive_side_2_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Has_on_negative_side_2 has_on_negative_side_2_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Oriented_side_2 oriented_side_2_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Bounded_side_2 bounded_side_2_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Are_ordered_along_line_2 are_ordered_along_line_2_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Are_strictly_ordered_along_line_2 are_strictly_ordered_along_line_2_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Collinear_are_ordered_along_line_2 collinear_are_ordered_along_line_2_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Collinear_are_strictly_ordered_along_line_2 collinear_are_strictly_ordered_along_line_2_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Construct_point_3  construct_point_3_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Construct_vector_3 construct_vector_3_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Construct_direction_3 construct_direction_3_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Construct_segment_3 construct_segment_3_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Construct_sphere_3 construct_sphere_3_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Construct_plane_3 construct_plane_3_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Construct_line_3 construct_line_3_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Construct_ray_3 construct_ray_3_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Construct_triangle_3 construct_triangle_3_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Construct_tetrahedron_3 construct_tetrahedron_3_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Construct_iso_cuboid_3 construct_iso_cuboid_3_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Construct_object_3 construct_object_3_object() const ;}{}
%%\ccGlue
%%\ccMemberFunction{Kernel::Construct_aff_transformation_3 construct_aff_transformation_3_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Construct_scaled_vector_3 construct_scaled_vector_3_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Construct_translated_point_3 construct_translated_point_3_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Construct_point_on_3 construct_point_on_3_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Construct_projected_point_3 construct_projected_point_3_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Construct_lifted_point_3 construct_lifted_point_3_object() const ;}{}
%%\ccGlue
%%\ccMemberFunction{Kernel::Construct_second_point_on_3 construct_second_point_on_3_object() const ;}{}
%%\ccGlue
%%\ccMemberFunction{Kernel::Construct_source_point_3 construct_source_point_3_object() const ;}{}
%%\ccGlue
%%\ccMemberFunction{Kernel::Construct_target_point_3 construct_target_point_3_object() const ;}{}
%%\ccGlue
%%\ccMemberFunction{Kernel::Construct_min_point_3 construct_min_point_3_object() const ;}{}
%%\ccGlue
%%\ccMemberFunction{Kernel::Construct_max_point_3 construct_max_point_3_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Construct_vertex_3 construct_vertex_3_object() const ;}{}
%%\ccGlue
%%\ccMemberFunction{Kernel::Construct_direction_of_line_3 construct_direction_of_line_3_object() const ;}{}
%%\ccGlue
%%\ccMemberFunction{Kernel::Construct_direction_of_ray_3 construct_direction_of_ray_3_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Construct_supporting_line_3 construct_supporting_line_3_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Construct_perpendicular_plane_3 construct_perpendicular_plane_3_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Construct_perpendicular_line_3 construct_perpendicular_line_3_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Construct_midpoint_3 construct_midpoint_3_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Construct_centroid_3 construct_centroid_3_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Construct_circumcenter_3 construct_circumcenter_3_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Construct_cross_product_vector_3 construct_cross_product_vector_3_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Construct_opposite_direction_3 construct_opposite_direction_3_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Construct_opposite_segment_3 construct_opposite_segment_3_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Construct_opposite_ray_3 construct_opposite_ray_3_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Construct_opposite_line_3 construct_opposite_line_3_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Construct_opposite_plane_3 construct_opposite_plane_3_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Construct_opposite_sphere_3 construct_opposite_sphere_3_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Construct_opposite_vector_3 construct_opposite_vector_3_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Construct_supporting_plane_3 construct_supporting_plane_3_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Construct_orthogonal_vector_3 construct_orthogonal_vector_3_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Construct_base_vector_3 construct_base_vector_3_object() const ;}{}
%%\ccGlue
%%\ccMemberFunction{Kernel::Transform_3 transform_3_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Assign_3 assign_3_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Intersect_3 intersect_3_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Do_intersect_3 do_intersect_3_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Compute_squared_distance_3 compute_squared_distance_3_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Compute_squared_length_3 compute_squared_length_3_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Compute_squared_radius_3 compute_squared_radius_3_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Compute_squared_area_3 compute_squared_area_3_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Compute_volume_3 compute_volume_3_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Angle_3 angle_3_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Equal_3 equal_3_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Equal_x_3 equal_x_3_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Equal_y_3 equal_y_3_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Equal_z_3 equal_z_3_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Equal_xy_3 equal_xy_3_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Less_x_3 less_x_3_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Less_y_3 less_y_3_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Less_z_3 less_z_3_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Less_xy_3 less_xy_3_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Less_xyz_3 less_xyz_3_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Compare_x_3 compare_x_3_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Compare_y_3 compare_y_3_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Compare_z_3 compare_z_3_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Compare_xy_3 compare_xy_3_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Compare_xyz_3 compare_xyz_3_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Less_signed_distance_to_plane_3 less_signed_distance_to_plane_3_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Compare_distance_3 compare_distance_3_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Collinear_3 collinear_3_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Coplanar_3 coplanar_3_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Coplanar_orientation_3 coplanar_orientation_3_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Coplanar_side_of_bounded_circle_3 coplanar_side_of_bounded_circle_3_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Orientation_3 orientation_3_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Is_degenerate_3 is_degenerate_3_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Has_on_3 has_on_3_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Has_on_bounded_side_3 has_on_bounded_side_3_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Has_on_unbounded_side_3 has_on_unbounded_side_3_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Has_on_boundary_3 has_on_boundary_3_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Has_on_positive_side_3 has_on_positive_side_3_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Has_on_negative_side_3 has_on_negative_side_3_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Oriented_side_3 oriented_side_3_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Bounded_side_3 bounded_side_3_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Are_ordered_along_line_3 are_ordered_along_line_3_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Are_strictly_ordered_along_line_3 are_strictly_ordered_along_line_3_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Collinear_are_ordered_along_line_3 collinear_are_ordered_along_line_3_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Collinear_are_strictly_ordered_along_line_3 collinear_are_strictly_ordered_along_line_3_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Side_of_oriented_sphere_3 side_of_oriented_sphere_3_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Side_of_bounded_sphere_3 side_of_bounded_sphere_3_object() const ;}{}
\ccGlue
\ccMemberFunction{Kernel::Construct_point_d  construct_point_d_object() const ;}{}

\def\ccTagRmEigenClassName{\ccTrue}

\ccHasModels

\ccc{Cartesian<FieldNumberType>}, \ccc{Homogeneous<RingNumberType>}, 
\ccc{Simple_cartesian<FieldNumberType>},
\ccc{Simple_homogeneous<RingNumberType>}
\end{ccRefConcept} 
