1 // Copyright (c) 1997-2013 INRIA Sophia-Antipolis (France). 2 // All rights reserved. 3 // 4 // This file is part of CGAL (www.cgal.org). 5 // 6 // $URL: https://github.com/CGAL/cgal/blob/v5.3/Periodic_2_triangulation_2/include/CGAL/Periodic_2_triangulation_traits_2.h $ 7 // $Id: Periodic_2_triangulation_traits_2.h 254d60f 2019-10-19T15:23:19+02:00 Sébastien Loriot 8 // SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-Commercial 9 // 10 // Author(s) : Nico Kruithof <Nico@nghk.nl>, 11 // Mael Rouxel-Labbé 12 13 #ifndef CGAL_PERIODIC_2_TRIANGULATION_TRAITS_2_H 14 #define CGAL_PERIODIC_2_TRIANGULATION_TRAITS_2_H 15 16 #include <CGAL/license/Periodic_2_triangulation_2.h> 17 18 #include <CGAL/internal/Periodic_2_construct_point_2.h> 19 #include <CGAL/internal/Functor_with_offset_points_adaptor_2.h> 20 #include <CGAL/Periodic_2_offset_2.h> 21 22 #include <CGAL/internal/Has_boolean_tags.h> 23 #include <CGAL/triangulation_assertions.h> 24 25 namespace CGAL { 26 27 template <class K_, 28 class Off_ = typename CGAL::Periodic_2_offset_2 > 29 class Periodic_2_triangulation_traits_base_2 30 : public K_ 31 { 32 typedef Periodic_2_triangulation_traits_base_2<K_, Off_> Self; 33 typedef K_ Base; 34 35 public: 36 typedef K_ Kernel; 37 typedef Off_ Offset; 38 39 typedef typename Kernel::FT FT; 40 typedef typename Kernel::RT RT; 41 typedef typename Kernel::Point_2 Point_2; 42 typedef typename Kernel::Segment_2 Segment_2; 43 typedef typename Kernel::Triangle_2 Triangle_2; 44 typedef typename Kernel::Iso_rectangle_2 Iso_rectangle_2; 45 46 typedef Offset Periodic_2_offset_2; 47 48 typedef Periodic_2_construct_point_2<Self, typename Kernel::Construct_point_2> 49 Construct_point_2; 50 51 // Triangulation predicates 52 typedef Functor_with_offset_points_adaptor_2<Self, typename Kernel::Less_x_2> 53 Less_x_2; 54 typedef Functor_with_offset_points_adaptor_2<Self, typename Kernel::Less_y_2> 55 Less_y_2; 56 typedef Functor_with_offset_points_adaptor_2<Self, typename Kernel::Compare_x_2> 57 Compare_x_2; 58 typedef Functor_with_offset_points_adaptor_2<Self, typename Kernel::Compare_y_2> 59 Compare_y_2; 60 typedef Functor_with_offset_points_adaptor_2<Self, typename Kernel::Orientation_2> 61 Orientation_2; 62 63 // Triangulation constructions 64 typedef Functor_with_offset_points_adaptor_2<Self, typename Kernel::Construct_segment_2> 65 Construct_segment_2; 66 typedef Functor_with_offset_points_adaptor_2<Self, typename Kernel::Construct_triangle_2> 67 Construct_triangle_2; 68 69 // Constructor ~Periodic_2_triangulation_traits_base_2()70 virtual ~Periodic_2_triangulation_traits_base_2() { } 71 Periodic_2_triangulation_traits_base_2(const Iso_rectangle_2 & domain,const Kernel & k)72 Periodic_2_triangulation_traits_base_2(const Iso_rectangle_2& domain, 73 const Kernel& k) 74 : Base(k), _domain(domain) 75 { } 76 77 // Access set_domain(const Iso_rectangle_2 & domain)78 virtual void set_domain(const Iso_rectangle_2& domain) { _domain = domain; } get_domain()79 Iso_rectangle_2 get_domain() const { return _domain; } 80 81 // Operations construct_point_2_object()82 Construct_point_2 construct_point_2_object() const { 83 return Construct_point_2(&_domain, this->Kernel::construct_point_2_object()); 84 } 85 86 // Predicates less_x_2_object()87 Less_x_2 less_x_2_object() const { 88 return Less_x_2(this->Kernel::less_x_2_object(), construct_point_2_object()); 89 } less_y_2_object()90 Less_y_2 less_y_2_object() const { 91 return Less_y_2(this->Kernel::less_y_2_object(), construct_point_2_object()); 92 } compare_x_2_object()93 Compare_x_2 compare_x_2_object() const { 94 return Compare_x_2(this->Kernel::compare_x_2_object(), construct_point_2_object()); 95 } compare_y_2_object()96 Compare_y_2 compare_y_2_object() const { 97 return Compare_y_2(this->Kernel::compare_y_2_object(), construct_point_2_object()); 98 } orientation_2_object()99 Orientation_2 orientation_2_object() const { 100 return Orientation_2(this->Kernel::orientation_2_object(), construct_point_2_object()); 101 } 102 103 // Constructions construct_segment_2_object()104 Construct_segment_2 construct_segment_2_object() const { 105 return Construct_segment_2(this->Kernel::construct_segment_2_object(), construct_point_2_object()); 106 } construct_triangle_2_object()107 Construct_triangle_2 construct_triangle_2_object() const { 108 return Construct_triangle_2(this->Kernel::construct_triangle_2_object(), construct_point_2_object()); 109 } 110 111 protected: 112 Iso_rectangle_2 _domain; 113 }; 114 115 116 // Forward declaration for the filtered traits 117 template <class K_, 118 class Off_ = CGAL::Periodic_2_offset_2, 119 bool Has_filtered_predicates = internal::Has_filtered_predicates<K_>::value > 120 class Periodic_2_triangulation_traits_2; 121 122 } // namespace CGAL 123 124 // Partial specialization for Filtered_kernel<CK>. 125 #include <CGAL/internal/Periodic_2_triangulation_filtered_traits_2.h> 126 127 namespace CGAL 128 { 129 130 template <class K_, class Off_> 131 class Periodic_2_triangulation_traits_2<K_, Off_, false> 132 : public Periodic_2_triangulation_traits_base_2<K_, Off_> 133 { 134 typedef Periodic_2_triangulation_traits_base_2<K_, Off_> Base; 135 136 public: 137 typedef K_ Kernel; 138 typedef typename Kernel::Iso_rectangle_2 Iso_rectangle_2; 139 140 Periodic_2_triangulation_traits_2(const Iso_rectangle_2& domain = Iso_rectangle_2(0,0,1,1), 141 const Kernel& k = Kernel()) Base(domain,k)142 : Base(domain, k) 143 { } 144 }; 145 146 template <class K_, class Off_> 147 class Periodic_2_triangulation_traits_2<K_, Off_, true> 148 : public Periodic_2_triangulation_filtered_traits_2< 149 K_, Off_, internal::Has_static_filters<K_>::value> 150 { 151 typedef Periodic_2_triangulation_filtered_traits_2< 152 K_, Off_, internal::Has_static_filters<K_>::value> Base; 153 154 public: 155 typedef K_ Kernel; 156 typedef typename Kernel::Iso_rectangle_2 Iso_rectangle_2; 157 158 Periodic_2_triangulation_traits_2(const Iso_rectangle_2& domain = Iso_rectangle_2(0,0,1,1), 159 const Kernel& k = Kernel()) Base(domain,k)160 : Base(domain, k) 161 { } 162 }; 163 164 } //namespace CGAL 165 166 #endif // CGAL_PERIODIC_2_TRIANGULATION_TRAITS_2_H 167