\begin{ccRefFunctionObjectConcept}{CircularKernel::MakeXMonotone_2}

\ccDefinition

Splitting curves into monotone pieces. 

\ccCreationVariable{fo}

A model \ccVar\ of this type must provide:

\ccMemberFunction{template < class OutputIterator >
    OutputIterator
    operator()(const CircularKernel::Circular_arc_2 &ca, OutputIterator oit);}
{Splits the arc \ccc{ca} into monotone arcs that are returned through the 
output iterator.}

For the sake of completeness, the \ccc{operator()} must also be defined for a 
\ccc{Line_arc_2}. In this case, the input line arc itself is the only
arc returned through the \ccc{OutputIterator}. 

\ccHasModels

\ccc{Circular_kernel_2::Make_x_monotone_2;}

\ccSeeAlso

\ccRefIdfierPage{CGAL::make_x_monotone}

\end{ccRefFunctionObjectConcept}
\begin{ccRefFunctionObjectConcept}{CircularKernel::Intersect_2}

\ccDefinition

To compute intersections of objects.

\ccRefines

\ccc{Kernel::Intersect_2}

\ccCreationVariable{fo}

A model \ccVar\ of this type must provide:

\ccMemberFunction{template < class OutputIterator >
    OutputIterator
    operator()(const CircularKernel::Line_arc_2 &l, const Type &c, 
	OutputIterator points);}
{Copies in the output iterators the intersection points between the
two objects, sorted lexicographically. \ccc{points} iterates on
elements of type \ccc{std::pair<CircularKernel::Circular_arc_point_2,
int>}, where the integer is the multiplicity of the corresponding
intersection point between \ccc{l} and \ccc{c}. }
and
\ccMemberFunction{template < class OutputIterator >
    OutputIterator
    operator()(const Type &c, const CircularKernel::Line_arc_2 &l);}
{same}

where \ccc{Type} is either \ccc{CircularKernel::Circle_2} or
\ccc{CircularKernel::Circular_arc_2}. 

\ccMemberFunction{template < class OutputIteratorPoints, 
				class OutputIteratorArcs >
    std::pair< OutputIteratorPoints, OutputIteratorArcs >
    operator()(const Type1 &obj1, const Type2 &obj2, 
	OutputIteratorPoints points, OutputIteratorArcs arcs);}
{Copies in the output iterators the intersections between the two
objects, sorted lexicographically. \ccc{points} iterates on elements
of type \ccc{std::pair<CircularKernel::Circular_arc_point_2, int>},
where the integer is the multiplicity of the corresponding
intersection point between \ccc{obj1} and \ccc{obj2}, and \ccc{arcs}
iterates on elements of type \ccc{CircularKernel::Circular_arc_2} %(or
%\ccc{CircularKernel::Circle_2} in the special case of two equal input circles)
that are arcs on which \ccc{obj1} and \ccc{obj2} overlap.} 

where \ccc{Type1} and \ccc{Type2} can both be either
\ccc{CircularKernel::Circle_2} or
\ccc{CircularKernel::Circular_arc_2}. 

\ccHasModels

\ccc{Circular_kernel_2::Intersect_2;}

\ccSeeAlso

\ccRefIdfierPage{CGAL::intersect}

\end{ccRefFunctionObjectConcept}

\begin{ccRefFunctionObjectConcept}{CircularKernel::Split_2}

\ccDefinition

To split curves at a given point.

\ccCreationVariable{fo}

A model \ccVar\ of this type must provide:

\ccMemberFunction{void operator()
	(const CircularKernel::Circular_arc_2 &a, 
	const CircularKernel::Circular_arc_point_2 &p,
	CircularKernel::Circular_arc_2 &a1, 
	CircularKernel::Circular_arc_2 &a2);}
{Splits arc $a$ at point $p$, which creates arcs $a1$ and $a2$.
\ccPrecond{$a$ is $x$-monotone, and $p$ lies on $a$.}}

\ccMemberFunction{void operator()
	(const CircularKernel::Line_arc_2 &l, 
	 const CircularKernel::Circular_arc_point_2 &p,
	 CircularKernel::Line_arc_2 &l1, CircularKernel::Line_arc_2 &l2);}
{Same for a line arc.}

\ccHasModels

\ccc{Circular_kernel_2::Split_2}

\ccSeeAlso

\ccRefIdfierPage{CGAL::split}

\end{ccRefFunctionObjectConcept}
