\begin{ccRefFunctionObjectConcept}{CircularKernel::MakeXMonotone_2} \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}. \end{ccRefFunctionObjectConcept} \begin{ccRefFunctionObjectConcept}{CircularKernel::Intersect_2} \ccRefines \ccc{Kernel::Intersect_2} \ccCreationVariable{fo} A model \ccVar\ of this type must provide: \ccMemberFunction{template < class OutputIterator > OutputIterator operator()(const Type1 &obj1, const Type2 &obj2, OutputIterator intersections);} {Copies in the output iterator the intersection elements between the two objects. \ccc{intersections} iterates on elements of type \ccc{CGAL::Object}.} where \ccc{Type_1} and \ccc{Type_2} can both be either \begin{itemize} \item {} \ccc{CircularKernel::Line_arc_2} or \item {} \ccc{CircularKernel::Circle_2} or \item {} \ccc{CircularKernel::Circular_arc_2}. \end{itemize} Depending on the types \ccc{Type_1} and \ccc{Type_2}, these elements can be assigned to \begin{itemize} \item {} \ccc{std::pair}, where the unsigned integer is the multiplicity of the corresponding intersection point between \ccc{obj_1} and \ccc{obj_2} or \item {} \ccc{CircularKernel::Circular_arc_2} in case of an overlap. \end{itemize} %\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}, 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}, %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}. \end{ccRefFunctionObjectConcept} \begin{ccRefFunctionObjectConcept}{CircularKernel::Split_2} \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.} \end{ccRefFunctionObjectConcept}