generic free function for point range and triangle range

This commit is contained in:
Sébastien Loriot 2021-10-04 18:49:55 +02:00
parent f399cfed18
commit bd111bcb89
2 changed files with 16 additions and 15 deletions

View File

@ -38,9 +38,6 @@ struct Indexed_triangle_set
{}
};
template <typename P, typename V, typename F>
void add_isolated_points(const P& point, Indexed_triangle_set<V,F>& its)
{
@ -95,8 +92,8 @@ void copy_face_graph(const TDS& tds, Convex_hull_3::internal::Indexed_triangle_s
template <typename V, typename F>
void clear(Convex_hull_3::internal::Indexed_triangle_set<V,F>& its)
{
its.vertices.clear();
its.faces.clear();
CGAL::internal::resize(its.vertices, 0);
CGAL::internal::resize(its.faces, 0);
}

View File

@ -1086,30 +1086,34 @@ void convex_hull_3(const VertexListGraph& g,
convex_hull_3(g,pm,CGAL::parameters::all_default());
}
template <class InputIterator, class P>
template <class InputIterator, class PointRange, class TriangleRange>
void convex_hull_3(InputIterator first, InputIterator beyond,
std::vector<P>& vertices,
std::vector<std::array<int,3> >& faces,
typename std::enable_if<CGAL::is_iterator<InputIterator>::value>::type* = 0)
PointRange& vertices,
TriangleRange& faces,
typename std::enable_if<CGAL::is_iterator<InputIterator>::value>::type* = 0,
typename std::enable_if<boost::has_range_iterator<PointRange>::value>::type* = 0,
typename std::enable_if<boost::has_range_iterator<TriangleRange>::value>::type* = 0)
{
typedef typename std::iterator_traits<InputIterator>::value_type Point_3;
typedef typename Kernel_traits<Point_3>::type Traits;
Convex_hull_3::internal::Indexed_triangle_set< std::vector<P>, std::vector<std::array<int,3> >> its(vertices,faces);
Convex_hull_3::internal::Indexed_triangle_set<PointRange, TriangleRange> its(vertices,faces);
convex_hull_3(first, beyond, its, Traits());
}
template <class InputIterator, class P, class Traits>
template <class InputIterator, class P, class PointRange, class TriangleRange, class Traits>
void convex_hull_3(InputIterator first, InputIterator beyond,
std::vector<P>& vertices,
std::vector<std::array<int,3> >& faces,
PointRange& vertices,
TriangleRange& faces,
const Traits& traits,
typename std::enable_if<CGAL::is_iterator<InputIterator>::value>::type* = 0)
typename std::enable_if<CGAL::is_iterator<InputIterator>::value>::type* = 0,
typename std::enable_if<boost::has_range_iterator<PointRange>::value>::type* = 0,
typename std::enable_if<boost::has_range_iterator<TriangleRange>::value>::type* = 0)
{
typedef typename std::iterator_traits<InputIterator>::value_type Point_3;
Convex_hull_3::internal::Indexed_triangle_set< std::vector<P>, std::vector<std::array<int,3> >> its(vertices,faces);
Convex_hull_3::internal::Indexed_triangle_set<PointRange, TriangleRange> its(vertices,faces);
convex_hull_3(first, beyond, its, traits);
}