diff --git a/Convex_hull_3/include/CGAL/convex_hull_3.h b/Convex_hull_3/include/CGAL/convex_hull_3.h index b2089fdc53c..239d83f9134 100644 --- a/Convex_hull_3/include/CGAL/convex_hull_3.h +++ b/Convex_hull_3/include/CGAL/convex_hull_3.h @@ -45,6 +45,7 @@ #include #include +#include #include @@ -69,6 +70,8 @@ template class Extreme_points_traits_ada namespace Convex_hull_3 { namespace internal { +BOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF(Has_nested_type_Collinear_3, Collinear_3, false) + // wrapper used as a MutableFaceGraph to extract extreme points template struct Output_iterator_wrapper @@ -993,7 +996,8 @@ void convex_hull_3(InputIterator first, InputIterator beyond, template void convex_hull_3(InputIterator first, InputIterator beyond, PolygonMesh& polyhedron, - const Traits& traits) + const Traits& traits, + std::enable_if_t::value>* = 0) { typedef typename Traits::Point_3 Point_3; typedef std::list Point_3_list; diff --git a/Kernel_23/include/CGAL/Kernel_23/internal/Projection_traits_base_3.h b/Kernel_23/include/CGAL/Kernel_23/internal/Projection_traits_base_3.h index e179fecc677..24ba8b3637c 100644 --- a/Kernel_23/include/CGAL/Kernel_23/internal/Projection_traits_base_3.h +++ b/Kernel_23/include/CGAL/Kernel_23/internal/Projection_traits_base_3.h @@ -372,6 +372,35 @@ public: } }; // end class Less_xy_along_axis +template +class Compare_xy_along_axis +{ + // private members + typedef typename Traits::Vector_3 Vector_3; + typedef typename Traits::Point_2 Point; + Vector_3 base1, base2; + +public: + Compare_xy_along_axis(const Vector_3& base1, const Vector_3& base2) : base1(base1), base2(base2) + { + CGAL_PROFILER("Construct Compare_xy_along_axis") + CGAL_TIME_PROFILER("Construct Compare_xy_along_axis") + } + + typedef Comparison_result result_type; + + Comparison_result operator()(const Point& p, const Point& q) const + { + Compare_along_axis cx(base1); + Comparison_result crx = cx(p, q); + if (crx != EQUAL) { + return crx; + } + Compare_along_axis cy(base2); + return cy(p, q); + } +}; // end class Compare_xy_along_axis + } // end namespace TriangulationProjectionTraitsCartesianFunctors @@ -426,12 +455,13 @@ public: typedef typename K::Line_3 Line_2; typedef typename K::Angle_3 Angle_2; - typedef typename K::Compare_xyz_3 Compare_xy_2; typedef TriangulationProjectionTraitsCartesianFunctors:: Compare_along_axis Compare_x_2; typedef TriangulationProjectionTraitsCartesianFunctors:: Compare_along_axis Compare_y_2; + typedef TriangulationProjectionTraitsCartesianFunctors:: + Compare_xy_along_axis Compare_xy_2; typedef TriangulationProjectionTraitsCartesianFunctors:: Less_along_axis Less_x_2; @@ -498,6 +528,12 @@ public: return Compare_y_2(this->base2()); } + Compare_xy_2 + compare_xy_2_object() const + { + return Compare_xy_2(this->base1(), this->base2()); + } + Orientation_2 orientation_2_object() const { @@ -525,9 +561,6 @@ public: Angle_2 angle_2_object() const {return Angle_2();} - Compare_xy_2 compare_xy_2_object() const - {return Compare_xy_2();} - Construct_point_2 construct_point_2_object() const {return Construct_point_2();} diff --git a/Optimal_bounding_box/include/CGAL/Optimal_bounding_box/oriented_bounding_box.h b/Optimal_bounding_box/include/CGAL/Optimal_bounding_box/oriented_bounding_box.h index c867c190814..b10853d5c8e 100644 --- a/Optimal_bounding_box/include/CGAL/Optimal_bounding_box/oriented_bounding_box.h +++ b/Optimal_bounding_box/include/CGAL/Optimal_bounding_box/oriented_bounding_box.h @@ -36,6 +36,7 @@ #include #endif +#include #include #include diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/intersection.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/intersection.h index c047eeb407e..e0ab99d02bb 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/intersection.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/intersection.h @@ -28,6 +28,7 @@ #include #include +#include #include #include