diff --git a/Number_types/include/CGAL/NT_converter.h b/Number_types/include/CGAL/NT_converter.h index 1d7c4a8d639..ac225f1e0cb 100644 --- a/Number_types/include/CGAL/NT_converter.h +++ b/Number_types/include/CGAL/NT_converter.h @@ -61,6 +61,17 @@ struct NT_converter < NT1, double > } }; +template < class NT1 > +struct NT_converter < NT1, float > + : public CGAL::cpp98::unary_function< NT1, float > +{ + float + operator()(const NT1 &a) const + { + return static_cast(to_double(a)); + } +}; + template <> struct NT_converter < double, double > : public CGAL::cpp98::unary_function< double, double > @@ -72,6 +83,17 @@ struct NT_converter < double, double > } }; +template <> +struct NT_converter < float, float > + : public CGAL::cpp98::unary_function< float, float > +{ + const float & + operator()(const float &a) const + { + return a; + } +}; + template < class NT1, bool b > struct NT_converter < NT1, Interval_nt > : public CGAL::cpp98::unary_function< NT1, Interval_nt > diff --git a/Point_set_processing_3/include/CGAL/compute_average_spacing.h b/Point_set_processing_3/include/CGAL/compute_average_spacing.h index bb66e4b5ef9..fe6840810be 100644 --- a/Point_set_processing_3/include/CGAL/compute_average_spacing.h +++ b/Point_set_processing_3/include/CGAL/compute_average_spacing.h @@ -81,7 +81,7 @@ compute_average_spacing(const typename NeighborQuery::Kernel::Point_3& query, // boost::make_function_output_iterator ([&](const Point& p) { - sum_distances += std::sqrt(CGAL::squared_distance (query,p)); + sum_distances += CGAL::approximate_sqrt(CGAL::squared_distance (query,p)); ++ i; })); diff --git a/Poisson_surface_reconstruction_3/include/CGAL/Poisson_mesh_cell_criteria_3.h b/Poisson_surface_reconstruction_3/include/CGAL/Poisson_mesh_cell_criteria_3.h index 74d507927ea..4c78d772ce5 100644 --- a/Poisson_surface_reconstruction_3/include/CGAL/Poisson_mesh_cell_criteria_3.h +++ b/Poisson_surface_reconstruction_3/include/CGAL/Poisson_mesh_cell_criteria_3.h @@ -27,15 +27,16 @@ namespace Poisson { template class Constant_sizing_field { - double sq_radius_bound; + typedef typename Tr::FT FT; + FT sq_radius_bound; public: - double cell_radius_bound() const { return CGAL::sqrt(sq_radius_bound); } + FT cell_radius_bound() const { return CGAL::approximate_sqrt(sq_radius_bound); } - Constant_sizing_field(double sq_radius_bound = 0.) + Constant_sizing_field(FT sq_radius_bound = 0.) : sq_radius_bound(sq_radius_bound) {} template - double operator()(const Point&) const { return sq_radius_bound; } + FT operator()(const Point&) const { return sq_radius_bound; } }; // end class Constant_sizing_field } // end namespace Poisson diff --git a/Poisson_surface_reconstruction_3/include/CGAL/Poisson_reconstruction_function.h b/Poisson_surface_reconstruction_3/include/CGAL/Poisson_reconstruction_function.h index 80e3a9d10ff..7fb5c3e68f3 100644 --- a/Poisson_surface_reconstruction_3/include/CGAL/Poisson_reconstruction_function.h +++ b/Poisson_surface_reconstruction_3/include/CGAL/Poisson_reconstruction_function.h @@ -110,18 +110,19 @@ struct Poisson_visitor { // The wrapper stores only pointers to the two functors. template struct Special_wrapper_of_two_functions_keep_pointers { + typedef typename F2::FT FT; F1 *f1; F2 *f2; Special_wrapper_of_two_functions_keep_pointers(F1* f1, F2* f2) : f1(f1), f2(f2) {} template - double operator()(const X& x) const { + FT operator()(const X& x) const { return (std::max)((*f1)(x), CGAL::square((*f2)(x))); } template - double operator()(const X& x) { + FT operator()(const X& x) { return (std::max)((*f1)(x), CGAL::square((*f2)(x))); } }; // end struct Special_wrapper_of_two_functions_keep_pointers @@ -211,7 +212,7 @@ private: { private: std::atomic m_state; - std::array m_bary; + std::array m_bary; public: Cached_bary_coord() : m_state (UNINITIALIZED) { } @@ -242,8 +243,8 @@ private: void set_initialized() { m_state = INITIALIZED; } - const double& operator[] (const std::size_t& idx) const { return m_bary[idx]; } - double& operator[] (const std::size_t& idx) { return m_bary[idx]; } + const FT& operator[] (const std::size_t& idx) const { return m_bary[idx]; } + FT& operator[] (const std::size_t& idx) { return m_bary[idx]; } }; // Wrapper for thread safety of maintained cell hint for fast diff --git a/Poisson_surface_reconstruction_3/include/CGAL/poisson_surface_reconstruction.h b/Poisson_surface_reconstruction_3/include/CGAL/poisson_surface_reconstruction.h index dddb6759fe7..3a79d458803 100644 --- a/Poisson_surface_reconstruction_3/include/CGAL/poisson_surface_reconstruction.h +++ b/Poisson_surface_reconstruction_3/include/CGAL/poisson_surface_reconstruction.h @@ -94,9 +94,10 @@ namespace CGAL { typedef typename boost::property_traits::value_type Point; typedef typename Kernel_traits::Kernel Kernel; typedef typename Kernel::Sphere_3 Sphere; + typedef typename Kernel::FT FT; typedef CGAL::Poisson_reconstruction_function Poisson_reconstruction_function; - typedef CGAL::Surface_mesh_default_triangulation_3 STr; + typedef typename CGAL::Surface_mesher::Surface_mesh_default_triangulation_3_generator::Type STr; typedef CGAL::Surface_mesh_complex_2_in_triangulation_3 C2t3; typedef CGAL::Implicit_surface_3 Surface_3; @@ -106,10 +107,10 @@ namespace CGAL { Point inner_point = function.get_inner_point(); Sphere bsphere = function.bounding_sphere(); - double radius = std::sqrt(bsphere.squared_radius()); + FT radius = CGAL::approximate_sqrt(bsphere.squared_radius()); - double sm_sphere_radius = 5.0 * radius; - double sm_dichotomy_error = sm_distance * spacing / 1000.0; + FT sm_sphere_radius = 5.0 * radius; + FT sm_dichotomy_error = sm_distance * spacing / 1000.0; Surface_3 surface(function, Sphere (inner_point, sm_sphere_radius * sm_sphere_radius),