diff --git a/Generator/include/CGAL/point_generators_2.h b/Generator/include/CGAL/point_generators_2.h index 52fc3be45fe..6738bb89e2f 100644 --- a/Generator/include/CGAL/point_generators_2.h +++ b/Generator/include/CGAL/point_generators_2.h @@ -546,15 +546,15 @@ void Random_points_in_triangle_2::generate_point() { T(to_double(_p.y())*b1+to_double(_q.y())*b2+to_double(_r.y())*b3)); } -namespace internal{ +namespace internal { //Functor returning Triangle_2 from Triangulation_2 Faces template class Triangle_from_face_2 { typedef typename T::Triangle Triangle; public: - typedef Triangle result_type; - Triangle_from_face_2(){} + typedef Triangle result_type; + Triangle_from_face_2() {} Triangle operator()(typename T::Face_handle face)const { return Triangle(face->vertex(0)->point(), face->vertex(1)->point(), face->vertex(2)->point()); @@ -563,53 +563,54 @@ public: }//end namespace internal template class Random_points_in_triangle_mesh_2 : public Generic_random_point_generator< - typename T::Face_handle , - internal::Triangle_from_face_2, - Random_points_in_triangle_2

, P> { + typename T::Face_handle , + internal::Triangle_from_face_2, + Random_points_in_triangle_2

, P> { public: - typedef Generic_random_point_generator< - typename T::Face_handle, - internal::Triangle_from_face_2, - Random_points_in_triangle_2

, P> Base; - typedef typename T::Face_handle Id; - typedef P result_type; - typedef Random_points_in_triangle_mesh_2 This; + typedef Generic_random_point_generator, + Random_points_in_triangle_2

, + P> Base; + typedef typename T::Face_handle Id; + typedef P result_type; + typedef Random_points_in_triangle_mesh_2 This; - Random_points_in_triangle_mesh_2( T& triangulation,Random& rnd = default_random) - : Base( CGAL::make_prevent_deref_range(triangulation.finite_faces_begin(), - triangulation.finite_faces_end()), - internal::Triangle_from_face_2(), - typename Kernel_traits

::Kernel::Compute_area_2(), - rnd ) - { - } - This& operator++() { - Base::generate_point(); - return *this; - } - This operator++(int) { - This tmp = *this; - ++(*this); - return tmp; - } + Random_points_in_triangle_mesh_2( T& triangulation,Random& rnd = default_random) + : Base( CGAL::make_prevent_deref_range(triangulation.finite_faces_begin(), + triangulation.finite_faces_end()), + internal::Triangle_from_face_2(), + typename Kernel_traits

::Kernel::Compute_area_2(), + rnd ) + { + } + This& operator++() { + Base::generate_point(); + return *this; + } + This operator++(int) { + This tmp = *this; + ++(*this); + return tmp; + } }; namespace internal { + template class Deref { public: - typedef typename std::iterator_traits::value_type result_type; - typename std::iterator_traits::value_type operator()(T triangle)const + typedef const T& result_type; + const T& operator()(const T* triangle) const { return *triangle; } }; template -struct Address_of{ +struct Address_of { typedef const A* result_type; const A* operator()(const A& a) const { @@ -619,40 +620,40 @@ struct Address_of{ }//namesapce internal -template -class Random_points_in_triangles_2 : public Generic_random_point_generator< - const typename Kernel_traits::Kernel::Triangle_2*, - internal::Deref::Kernel::Triangle_2*>, - Random_points_in_triangle_2 , - Point_2> { -public: - typedef typename Kernel_traits::Kernel::Triangle_2 Triangle_2; - typedef Generic_random_point_generator< - const typename Kernel_traits::Kernel::Triangle_2*, - internal::Deref, - Random_points_in_triangle_2 ,Point_2> Base; - typedef const Triangle_2* Id; - typedef Point_2 result_type; - typedef Random_points_in_triangles_2 This; +template ::Kernel::Triangle_2> +struct Random_points_in_triangles_2 + : public Generic_random_point_generator, + Random_points_in_triangle_2, + Point_2> +{ + typedef Generic_random_point_generator, + Random_points_in_triangle_2, + Point_2> Base; + typedef const Triangle_2* Id; + typedef Point_2 result_type; + typedef Random_points_in_triangles_2 This; - template - Random_points_in_triangles_2( const TriangleRange& triangles, Random& rnd = default_random) - : Base(make_range( boost::make_transform_iterator(triangles.begin(), internal::Address_of()), - boost::make_transform_iterator(triangles.end(), internal::Address_of()) ), - internal::Deref(), - typename Kernel_traits::Kernel::Compute_area_2() - ,rnd ) - { - } - This& operator++() { - Base::generate_point(); - return *this; - } - This operator++(int) { - This tmp = *this; - ++(*this); - return tmp; - } + template + Random_points_in_triangles_2( const TriangleRange& triangles, Random& rnd = default_random) + : Base(make_range( boost::make_transform_iterator(triangles.begin(), internal::Address_of()), + boost::make_transform_iterator(triangles.end(), internal::Address_of()) ), + internal::Deref(), + typename Kernel_traits::Kernel::Compute_area_2(), + rnd ) + { + } + This& operator++() { + Base::generate_point(); + return *this; + } + This operator++(int) { + This tmp = *this; + ++(*this); + return tmp; + } }; } //namespace CGAL diff --git a/Generator/include/CGAL/point_generators_3.h b/Generator/include/CGAL/point_generators_3.h index 2eb6e1e6887..bbc9f14575f 100644 --- a/Generator/include/CGAL/point_generators_3.h +++ b/Generator/include/CGAL/point_generators_3.h @@ -308,49 +308,50 @@ void Random_points_in_tetrahedron_3::generate_point() { template ::type> -class Random_points_on_triangle_mesh_3 : public Generic_random_point_generator< - typename boost::graph_traits ::face_descriptor , - CGAL::Property_map_to_unary_function >, - Random_points_in_triangle_3::value_type> , - typename boost::property_traits::value_type> { -public: - typedef typename boost::property_traits::value_type P; - typedef Generic_random_point_generator< - typename boost::graph_traits ::face_descriptor , - CGAL::Property_map_to_unary_function::type> >, - Random_points_in_triangle_3

, P> Base; - typedef typename CGAL::Triangle_from_face_descriptor_map< - TriangleMesh,VertexPointMap> Pmap; - typedef typename CGAL::Triangle_from_face_descriptor_map< - TriangleMesh,VertexPointMap> Object_from_id_map; - typedef Random_points_in_triangle_3

Generator_on_object; - typedef typename boost::graph_traits::face_descriptor Id; - typedef P result_type; - typedef Random_points_on_triangle_mesh_3< TriangleMesh> This; +struct Random_points_on_triangle_mesh_3 + : public Generic_random_point_generator< + typename boost::graph_traits ::face_descriptor , + CGAL::Property_map_to_unary_function >, + Random_points_in_triangle_3::value_type>, + typename boost::property_traits::value_type> +{ + typedef typename boost::property_traits::value_type P; + typedef Generic_random_point_generator< + typename boost::graph_traits ::face_descriptor , + CGAL::Property_map_to_unary_function::type> >, + Random_points_in_triangle_3

, P> Base; + typedef typename CGAL::Triangle_from_face_descriptor_map< + TriangleMesh,VertexPointMap> Pmap; + typedef typename CGAL::Triangle_from_face_descriptor_map< + TriangleMesh,VertexPointMap> Object_from_id_map; + typedef Random_points_in_triangle_3

Generator_on_object; + typedef typename boost::graph_traits::face_descriptor Id; + typedef P result_type; + typedef Random_points_on_triangle_mesh_3< TriangleMesh> This; - Random_points_on_triangle_mesh_3( TriangleMesh& mesh,Random& rnd = default_random) - : Base( faces(mesh), - CGAL::Property_map_to_unary_function(&mesh), - typename Kernel_traits

::Kernel::Compute_area_3(), - rnd ) - { - } - This& operator++() { - Base::generate_point(); - return *this; - } - This operator++(int) { - This tmp = *this; - ++(*this); - return tmp; - } + Random_points_on_triangle_mesh_3( TriangleMesh& mesh,Random& rnd = default_random) + : Base( faces(mesh), + CGAL::Property_map_to_unary_function(&mesh), + typename Kernel_traits

::Kernel::Compute_area_3(), + rnd ) + { + } + This& operator++() { + Base::generate_point(); + return *this; + } + This operator++(int) { + This tmp = *this; + ++(*this); + return tmp; + } double mesh_area() const { - this->sum_of_weights(); + return this->sum_of_weights(); } }; @@ -364,17 +365,17 @@ class Triangle_from_face_C3t3 typedef typename T::Point Point; typedef std::pair Face; public: - typedef Triangle result_type; + typedef Triangle result_type; Triangle_from_face_C3t3() {} Triangle operator()(Face face)const { - typename T::Cell_handle cell = face.first; - int index = face.second; - const Point& pa = cell->vertex((index+1)&3)->point(); - const Point& pb = cell->vertex((index+2)&3)->point(); - const Point& pc = cell->vertex((index+3)&3)->point(); + typename T::Cell_handle cell = face.first; + int index = face.second; + const Point& pa = cell->vertex((index+1)&3)->point(); + const Point& pb = cell->vertex((index+2)&3)->point(); + const Point& pc = cell->vertex((index+3)&3)->point(); return Triangle(pa, pb, pc); } }; @@ -386,123 +387,130 @@ class Tetrahedron_from_cell_C3t3 typedef typename T::Point Point; typedef typename Kernel_traits::Kernel::Tetrahedron_3 Tetrahedron; public: - typedef Tetrahedron result_type; + typedef Tetrahedron result_type; Tetrahedron_from_cell_C3t3() {} Tetrahedron operator()(Cell cell)const { - Point p0 = cell->vertex(0)->point(); - Point p1 = cell->vertex(1)->point(); - Point p2 = cell->vertex(2)->point(); - Point p3 = cell->vertex(3)->point(); + Point p0 = cell->vertex(0)->point(); + Point p1 = cell->vertex(1)->point(); + Point p2 = cell->vertex(2)->point(); + Point p3 = cell->vertex(3)->point(); return Tetrahedron(p0,p1,p2,p3); } }; }//end namespace internal template -class Random_points_on_tetrahedral_mesh_boundary : public Generic_random_point_generator< - std::pair, - internal::Triangle_from_face_C3t3, - Random_points_in_triangle_3 , typename C3t3::Point> { -public: - typedef Generic_random_point_generator< - std::pair, - internal::Triangle_from_face_C3t3, - Random_points_in_triangle_3 , typename C3t3::Point> Base; - typedef std::pair Id; - typedef typename C3t3::Point result_type; - typedef Random_points_on_tetrahedral_mesh_boundary This; +struct Random_points_on_tetrahedral_mesh_boundary + : public Generic_random_point_generator< + std::pair, + internal::Triangle_from_face_C3t3, + Random_points_in_triangle_3, + typename C3t3::Point> +{ + typedef Generic_random_point_generator< + std::pair, + internal::Triangle_from_face_C3t3, + Random_points_in_triangle_3, + typename C3t3::Point> Base; + typedef std::pair Id; + typedef typename C3t3::Point result_type; + typedef Random_points_on_tetrahedral_mesh_boundary This; - Random_points_on_tetrahedral_mesh_boundary( C3t3& c3t3,Random& rnd = default_random) - : Base( make_range( c3t3.facets_in_complex_begin(), - c3t3.facets_in_complex_end()), - internal::Triangle_from_face_C3t3(), - typename Kernel_traits::Kernel::Compute_area_3(), - rnd ) - { - } - This& operator++() { - Base::generate_point(); - return *this; - } - This operator++(int) { - This tmp = *this; - ++(*this); - return tmp; - } + Random_points_on_tetrahedral_mesh_boundary( C3t3& c3t3,Random& rnd = default_random) + : Base( make_range( c3t3.facets_in_complex_begin(), + c3t3.facets_in_complex_end()), + internal::Triangle_from_face_C3t3(), + typename Kernel_traits::Kernel::Compute_area_3(), + rnd ) + { + } + This& operator++() { + Base::generate_point(); + return *this; + } + This operator++(int) { + This tmp = *this; + ++(*this); + return tmp; + } }; template -class Random_points_in_tetrahedral_mesh_3 : public Generic_random_point_generator< - typename C3t3::Triangulation::Cell_handle, - internal::Tetrahedron_from_cell_C3t3, - Random_points_in_tetrahedron_3 , typename C3t3::Point> { -public: - typedef Generic_random_point_generator< - typename C3t3::Triangulation::Cell_handle, - internal::Tetrahedron_from_cell_C3t3, - Random_points_in_tetrahedron_3 , typename C3t3::Point> Base; - typedef typename C3t3::Triangulation::Cell_handle Id; - typedef typename C3t3::Point result_type; - typedef Random_points_in_tetrahedral_mesh_3 This; +struct Random_points_in_tetrahedral_mesh_3 + : public Generic_random_point_generator< + typename C3t3::Triangulation::Cell_handle, + internal::Tetrahedron_from_cell_C3t3, + Random_points_in_tetrahedron_3, + typename C3t3::Point> +{ + typedef Generic_random_point_generator< + typename C3t3::Triangulation::Cell_handle, + internal::Tetrahedron_from_cell_C3t3, + Random_points_in_tetrahedron_3, + typename C3t3::Point> Base; + typedef typename C3t3::Triangulation::Cell_handle Id; + typedef typename C3t3::Point result_type; + typedef Random_points_in_tetrahedral_mesh_3 This; - Random_points_in_tetrahedral_mesh_3( C3t3& c3t3,Random& rnd = default_random) - : Base( CGAL::make_prevent_deref_range(c3t3.cells_in_complex_begin(), - c3t3.cells_in_complex_end()), - internal::Tetrahedron_from_cell_C3t3(), - typename Kernel_traits::Kernel::Compute_volume_3(), - rnd ) - { - } - This& operator++() { - Base::generate_point(); - return *this; - } - This operator++(int) { - This tmp = *this; - ++(*this); - return tmp; - } + Random_points_in_tetrahedral_mesh_3( C3t3& c3t3,Random& rnd = default_random) + : Base( CGAL::make_prevent_deref_range(c3t3.cells_in_complex_begin(), + c3t3.cells_in_complex_end()), + internal::Tetrahedron_from_cell_C3t3(), + typename Kernel_traits::Kernel::Compute_volume_3(), + rnd ) + { + } + This& operator++() { + Base::generate_point(); + return *this; + } + This operator++(int) { + This tmp = *this; + ++(*this); + return tmp; + } }; -template -class Random_points_in_triangles_3 : public Generic_random_point_generator< - const typename Kernel_traits::Kernel::Triangle_3*, - internal::Deref::Kernel::Triangle_3*>, - Random_points_in_triangle_3 ,Point_3> { -public: - typedef typename Kernel_traits::Kernel::Triangle_3 Triangle_3; - typedef Generic_random_point_generator< - const typename Kernel_traits::Kernel::Triangle_3*, - internal::Deref, - Random_points_in_triangle_3 ,Point_3> Base; - typedef const Triangle_3* Id; - typedef Point_3 result_type; - typedef Random_points_in_triangles_3 This; +template ::Kernel::Triangle_3> +struct Random_points_in_triangles_3 + : public Generic_random_point_generator, + Random_points_in_triangle_3, + Point_3> +{ + typedef Generic_random_point_generator, + Random_points_in_triangle_3, + Point_3> Base; + typedef const Triangle_3* Id; + typedef Point_3 result_type; + typedef Random_points_in_triangles_3 This; - template - Random_points_in_triangles_3( const TriangleRange& triangles, Random& rnd = default_random) - : Base(make_range( boost::make_transform_iterator(triangles.begin(), internal::Address_of()), - boost::make_transform_iterator(triangles.end(), internal::Address_of()) ), - internal::Deref(), - typename Kernel_traits::Kernel::Compute_area_3() - ,rnd ) - { - } - This& operator++() { - Base::generate_point(); - return *this; - } - This operator++(int) { - This tmp = *this; - ++(*this); - return tmp; - } + template + Random_points_in_triangles_3( const TriangleRange& triangles, Random& rnd = default_random) + : Base(make_range( boost::make_transform_iterator(triangles.begin(), internal::Address_of()), + boost::make_transform_iterator(triangles.end(), internal::Address_of()) ), + internal::Deref(), + typename Kernel_traits::Kernel::Compute_area_3() + ,rnd ) + { + } + This& operator++() { + Base::generate_point(); + return *this; + } + This operator++(int) { + This tmp = *this; + ++(*this); + return tmp; + } }; } //namespace CGAL