diff --git a/Curved_kernel_3/include/CGAL/Curved_kernel_3/function_objects_polynomial_sphere.h b/Curved_kernel_3/include/CGAL/Curved_kernel_3/function_objects_polynomial_sphere.h index 45d2cf05baa..335b067bb62 100644 --- a/Curved_kernel_3/include/CGAL/Curved_kernel_3/function_objects_polynomial_sphere.h +++ b/Curved_kernel_3/include/CGAL/Curved_kernel_3/function_objects_polynomial_sphere.h @@ -845,16 +845,18 @@ template < class SK > { return false; } result_type - operator()(const Line_arc_3 &a, const Circular_arc_point_3 &p) const - { return has_on(a, p); } + operator()(const Line_arc_3 &a, const Circular_arc_point_3 &p, + const bool already_know_point_on_line = false) const + { return has_on(a, p, already_know_point_on_line); } result_type operator()(const Circular_arc_point_3 &a, const Line_arc_3 &p) const { return false; } result_type - operator()(const Line_arc_3 &a, const Point_3 &p) const - { return has_on(a, p); } + operator()(const Line_arc_3 &a, const Point_3 &p, + const bool already_know_point_on_line = false) const + { return has_on(a, p, already_know_point_on_line); } result_type operator()(const Point_3 &a, const Line_arc_3 &p) const @@ -901,6 +903,7 @@ template < class SK > typedef typename SK::Sphere_3 Sphere_3; typedef typename SK::Line_3 Line_3; + typedef typename SK::Line_arc_3 Line_arc_3; typedef typename SK::Plane_3 Plane_3; typedef typename SK::Circle_3 Circle_3; @@ -909,6 +912,7 @@ template < class SK > typedef void result_type; //typedef Arity_tag<2> Arity; // The Arity can be 2 and 3 // Is there some solution for this problem?? + typedef typename SK::Object_3 Object_3; using SK::Linear_kernel::Intersect_3::operator(); @@ -1015,6 +1019,72 @@ template < class SK > OutputIterator res) const { return intersect_3 (c,l,res); } + // INTERSECTION LINE-LINE + // obs: This intersection should be moved to the Linear Kernel + // we need it + // For instance I won't put on the Algebraic Kernel for Spheres + // this function, I will solve locally + // I wont build tests for them, by the way I build tests for + // intersect_3(Line_arc, Line_arc) which should do + // this intersection also dont take care with orientation + Object_3 + operator()(const Line_3 & l1, const Line_3 & l2) const + { return intersect_3 (l1,l2); } + + // INTERSECTIONS WITH LINE_ARC + template < class OutputIterator > + OutputIterator + operator()(const Line_arc_3 & l1, const Line_arc_3 & l2, + OutputIterator res) const + { return intersect_3 (l1,l2,res); } + + template < class OutputIterator > + OutputIterator + operator()(const Line_3 & l, const Line_arc_3 & la) const + { return intersect_3 (l,la); } + + template < class OutputIterator > + OutputIterator + operator()(const Line_arc_3 & la, const Line_3 & l) const + { return intersect_3 (l,la); } + + template < class OutputIterator > + OutputIterator + operator()(const Circle_3 & c, const Line_arc_3 & l, + OutputIterator res) const + { return intersect_3 (c,l,res); } + + template < class OutputIterator > + OutputIterator + operator()(const Line_arc_3 & l, const Circle_3 & c, + OutputIterator res) const + { return intersect_3 (c,l,res); } + + + template < class OutputIterator > + OutputIterator + operator()(const Sphere_3 & s, const Line_arc_3 & l, + OutputIterator res) const + { return intersect_3 (s,l,res); } + + template < class OutputIterator > + OutputIterator + operator()(const Line_arc_3 & l,const Sphere_3 & s, + OutputIterator res) const + { return intersect_3 (s,l,res); } + + template < class OutputIterator > + OutputIterator + operator()(const Plane_3 & s, const Line_arc_3 & l, + OutputIterator res) const + { return intersect_3 (s,l,res); } + + template < class OutputIterator > + OutputIterator + operator()(const Line_arc_3 & l,const Plane_3 & s, + OutputIterator res) const + { return intersect_3 (s,l,res); } + }; // If 2 line_arc have the same supporting line