📄 function_objects_polynomial_circular.h
字号:
// Copyright (c) 2003-2006 INRIA Sophia-Antipolis (France).// All rights reserved.//// This file is part of CGAL (www.cgal.org); you may redistribute it under// the terms of the Q Public License version 1.0.// See the file LICENSE.QPL distributed with CGAL.//// Licensees holding a valid commercial license may use this file in// accordance with the commercial license agreement provided with the software.//// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.//// $URL: svn+ssh://scm.gforge.inria.fr/svn/cgal/branches/CGAL-3.3-branch/Circular_kernel_2/include/CGAL/Circular_kernel_2/function_objects_polynomial_circular.h $// $Id: function_objects_polynomial_circular.h 39828 2007-08-12 16:21:14Z afabri $//// Author(s) : Monique Teillaud, Sylvain Pion// Partially supported by the IST Programme of the EU as a Shared-cost// RTD (FET Open) Project under Contract No IST-2000-26473 // (ECG - Effective Computational Geometry for Curves and Surfaces) // and a STREP (FET Open) Project under Contract No IST-006413 // (ACS -- Algorithms for Complex Shapes)#ifndef CGAL_CIRCULAR_KERNEL_FUNCTION_OBJECTS_POLYNOMIAL_CIRCULAR_H#define CGAL_CIRCULAR_KERNEL_FUNCTION_OBJECTS_POLYNOMIAL_CIRCULAR_H#include <CGAL/Circular_kernel_2/internal_functions_on_circular_arc_2.h>#include <CGAL/Circular_kernel_2/internal_functions_on_line_arc_2.h>#include <CGAL/Bbox_2.h>#include <CGAL/Object.h>namespace CGAL {namespace CircularFunctors { template < class CK > class Compare_x_2#ifndef CGAL_CFG_MATCHING_BUG_6 : public CK::Linear_kernel::Compare_x_2#endif { typedef typename CK::Circular_arc_point_2 Circular_arc_point_2; typedef typename CK::Point_2 Point_2; public: typedef CGAL::Comparison_result result_type; typedef Arity_tag<2> Arity;#ifndef CGAL_CFG_MATCHING_BUG_6 using CK::Linear_kernel::Compare_x_2::operator();#else result_type operator() (const Point_2 &p0, const Point_2 &p1) const { typedef typename CK::Linear_kernel LK; typedef typename LK::Compare_x_2 LK_Compare_x_2; return LK_Compare_x_2()(p0, p1); }#endif result_type operator() (const Circular_arc_point_2 &p0, const Circular_arc_point_2 &p1) const { return CircularFunctors::compare_x<CK>(p0, p1);} }; template < class CK > class Compare_y_2#ifndef CGAL_CFG_MATCHING_BUG_6 : public CK::Linear_kernel::Compare_y_2#endif { typedef typename CK::Circular_arc_point_2 Circular_arc_point_2; typedef typename CK::Point_2 Point_2; public: typedef CGAL::Comparison_result result_type; typedef Arity_tag<2> Arity;#ifndef CGAL_CFG_MATCHING_BUG_6 using CK::Linear_kernel::Compare_y_2::operator();#else result_type operator() (const Point_2 &p0, const Point_2 &p1) const { typedef typename CK::Linear_kernel LK; typedef typename LK::Compare_y_2 LK_Compare_y_2; return LK_Compare_y_2()(p0, p1); }#endif result_type operator() (const Circular_arc_point_2 &p0, const Circular_arc_point_2 &p1) const {return CircularFunctors::compare_y<CK>(p0, p1);} }; template < class CK > class Compare_xy_2#ifndef CGAL_CFG_MATCHING_BUG_6 : public CK::Linear_kernel::Compare_xy_2#endif { typedef typename CK::Circular_arc_point_2 Circular_arc_point_2; typedef typename CK::Point_2 Point_2; public: typedef CGAL::Comparison_result result_type; typedef Arity_tag<2> Arity;#ifndef CGAL_CFG_MATCHING_BUG_6 using CK::Linear_kernel::Compare_xy_2::operator();#else result_type operator() (const Point_2 &p0, const Point_2 &p1) const { typedef typename CK::Linear_kernel LK; typedef typename LK::Compare_xy_2 LK_Compare_xy_2; return LK_Compare_xy_2()(p0, p1); }#endif result_type operator() (const Circular_arc_point_2 &p0, const Circular_arc_point_2 &p1) const { return CircularFunctors::compare_xy<CK>(p0, p1);} }; template < class CK > class In_x_range_2 { typedef typename CK::Circular_arc_2 Circular_arc_2; typedef typename CK::Circular_arc_point_2 Circular_arc_point_2; typedef typename CK::Line_arc_2 Line_arc_2; public: typedef bool result_type; typedef Arity_tag<2> Arity; result_type operator()(const Circular_arc_2 &a, const Circular_arc_point_2 &p) const { return CircularFunctors::point_in_x_range<CK>(a, p); } result_type operator()(const Line_arc_2 &a, const Circular_arc_point_2 &p) const { return CircularFunctors::point_in_x_range<CK>(a, p); } }; template < class CK > class Has_on_2#ifndef CGAL_CFG_MATCHING_BUG_6 : public CK::Linear_kernel::Has_on_2#endif { typedef typename CK::Circular_arc_2 Circular_arc_2; typedef typename CK::Circular_arc_point_2 Circular_arc_point_2; typedef typename CK::Line_arc_2 Line_arc_2; typedef typename CK::Circle_2 Circle_2; typedef typename CK::Line_2 Line_2; typedef typename CK::Ray_2 Ray_2; typedef typename CK::Segment_2 Segment_2; typedef typename CK::Point_2 Point_2; public: typedef bool result_type; typedef Arity_tag<2> Arity;#ifndef CGAL_CFG_MATCHING_BUG_6 using CK::Linear_kernel::Has_on_2::operator();#else result_type operator()( const Line_2& l, const Point_2& p) const { typedef typename CK::Linear_kernel LK; typedef typename LK::Has_on_2 LK_Has_on_2; return LK_Has_on_2()(l,p); } result_type operator()( const Ray_2& r, const Point_2& p) const { typedef typename CK::Linear_kernel LK; typedef typename LK::Has_on_2 LK_Has_on_2; return LK_Has_on_2()(r,p); } result_type operator()( const Segment_2& s, const Point_2& p) const { typedef typename CK::Linear_kernel LK; typedef typename LK::Has_on_2 LK_Has_on_2; return LK_Has_on_2()(s,p); }#endif result_type operator()(const Circle_2 &a, const Circular_arc_point_2 &p) const { return has_on<CK>(a, p); } result_type operator()(const Line_2 &a, const Circular_arc_point_2 &p) const { return has_on<CK>(a, p); } result_type operator()(const Circular_arc_2 &a, const Circular_arc_point_2 &p) const { return has_on<CK>(a, p); } result_type operator()(const Line_arc_2 &a, const Circular_arc_point_2 &p) const { return has_on<CK>(a, p); } }; template < class CK > class Compare_y_to_right_2 { typedef typename CK::Circular_arc_2 Circular_arc_2; typedef typename CK::Circular_arc_point_2 Circular_arc_point_2; typedef typename CK::Line_arc_2 Line_arc_2; public: typedef CGAL::Comparison_result result_type; typedef Arity_tag<3> Arity; result_type operator()(const Circular_arc_2 &a1, const Circular_arc_2 &a2, const Circular_arc_point_2 &p) const { return compare_y_to_right<CK>(a1, a2, p); } result_type operator()(const Line_arc_2 &a1, const Line_arc_2 &a2, const Circular_arc_point_2 &p) const { return compare_y_to_right<CK>(a1, a2, p); } result_type operator()(const Line_arc_2 &a1, const Circular_arc_2 &a2, const Circular_arc_point_2 &p) const { return compare_y_to_right<CK>(a1, a2, p); } result_type operator()(const Circular_arc_2 &a1, const Line_arc_2 &a2, const Circular_arc_point_2 &p) const { if (compare_y_to_right<CK>(a2, a1, p) == CGAL::LARGER) return CGAL::SMALLER; return CGAL::LARGER; } }; template < class CK > class Compare_y_to_left_2 { typedef typename CK::Circular_arc_2 Circular_arc_2; typedef typename CK::Circular_arc_point_2 Circular_arc_point_2; typedef typename CK::Line_arc_2 Line_arc_2; public: typedef CGAL::Comparison_result result_type; typedef Arity_tag<3> Arity; result_type operator()(const Circular_arc_2 &a1, const Circular_arc_2 &a2, const Circular_arc_point_2 &p) const { return compare_y_to_left<CK>(a1, a2, p); } result_type operator()(const Line_arc_2 &a1, const Line_arc_2 &a2, const Circular_arc_point_2 &p) const { return compare_y_to_left<CK>(a1, a2, p); } result_type operator()(const Line_arc_2 &a1, const Circular_arc_2 &a2, const Circular_arc_point_2 &p) const { return compare_y_to_left<CK>(a1, a2, p); } result_type operator()(const Circular_arc_2 &a1, const Line_arc_2 &a2, const Circular_arc_point_2 &p) const { if (compare_y_to_left<CK>(a2, a1, p) == CGAL::LARGER) return CGAL::SMALLER; return CGAL::LARGER; } }; template < class CK > class Equal_2 #ifndef CGAL_CFG_MATCHING_BUG_6 : public CK::Linear_kernel::Equal_2#endif { typedef typename CK::Circular_arc_point_2 Circular_arc_point_2; typedef typename CK::Circular_arc_2 Circular_arc_2; typedef typename CK::Line_arc_2 Line_arc_2; public: typedef bool result_type; typedef Arity_tag<2> Arity; typedef typename CK::Linear_kernel LK; typedef typename LK::Equal_2 LK_Equal_2; typedef typename LK::Point_2 Point_2; typedef typename LK::Vector_2 Vector_2; typedef typename LK::Direction_2 Direction_2; typedef typename LK::Segment_2 Segment_2; typedef typename LK::Ray_2 Ray_2; typedef typename LK::Line_2 Line_2; typedef typename LK::Triangle_2 Triangle_2; typedef typename LK::Iso_rectangle_2 Iso_rectangle_2; typedef typename LK::Circle_2 Circle_2; #ifndef CGAL_CFG_MATCHING_BUG_6 using CK::Linear_kernel::Equal_2::operator();#else result_type operator() (const Point_2 &p0, const Point_2 &p1) const { return LK_Equal_2()(p0,p1); } result_type operator() (const Vector_2 &p0, const Vector_2 &p1) const { return LK_Equal_2()(p0,p1); } result_type operator() (const Direction_2 &p0, const Direction_2 &p1) const { return LK_Equal_2()(p0,p1); } result_type operator() (const Segment_2 &p0, const Segment_2 &p1) const { return LK_Equal_2()(p0,p1); } result_type operator() (const Ray_2 &p0, const Ray_2 &p1) const { return LK_Equal_2::operator()(p0,p1); } result_type operator() (const Line_2 &p0, const Line_2 &p1) const { return LK_Equal_2()(p0,p1); } result_type operator() (const Triangle_2 &p0, const Triangle_2 &p1) const { return LK_Equal_2()(p0,p1); } result_type operator() (const Iso_rectangle_2 &p0, const Iso_rectangle_2 &p1) const { return LK_Equal_2()(p0,p1); } result_type operator() (const Circle_2 &p0, const Circle_2 &p1) const { return LK_Equal_2()(p0,p1); }#endif result_type operator() (const Circular_arc_point_2 &p0, const Circular_arc_point_2 &p1) const { return equal<CK>(p0, p1); } result_type operator() (const Circular_arc_2 &a0, const Circular_arc_2 &a1) const { return equal<CK>(a0, a1); } result_type operator() (const Line_arc_2 &a0, const Line_arc_2 &a1) const { return equal<CK>(a0, a1); } result_type operator() ( const Line_arc_2 &a0, const Circular_arc_2 &a1) const {return false;} result_type operator() ( const Circular_arc_2 &a0, const Line_arc_2 &a1) const {return false;} }; template < class CK > class Compare_y_at_x_2 { typedef typename CK::Circular_arc_2 Circular_arc_2; typedef typename CK::Circular_arc_point_2 Circular_arc_point_2; typedef typename CK::Line_arc_2 Line_arc_2; public: typedef CGAL::Comparison_result result_type; typedef Arity_tag<2> Arity; result_type operator() (const Circular_arc_point_2 &p, const Circular_arc_2 &A1) const { return CircularFunctors::compare_y_at_x<CK>(p, A1); } result_type operator() (const Circular_arc_point_2 &p, const Line_arc_2 &A1) const { return CircularFunctors::compare_y_at_x<CK>(p, A1); } }; template < class CK > class Do_overlap_2 { typedef typename CK::Circular_arc_2 Circular_arc_2; typedef typename CK::Line_arc_2 Line_arc_2; public: typedef bool result_type; typedef Arity_tag<2> Arity; result_type operator() (const Circular_arc_2 &A1, const Circular_arc_2 &A2) const { return CircularFunctors::do_overlap<CK>(A1, A2); } result_type operator() (const Line_arc_2 &A1, const Line_arc_2 &A2) const { return CircularFunctors::do_overlap<CK>(A1, A2); } }; template < class CK > class Make_x_monotone_2 { typedef typename CK::Circular_arc_2 Circular_arc_2;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -