mirror of https://github.com/CGAL/cgal
Changed InitialPointsGenerator concept :
The points' dimensions are also outputed by the initialisation.
This commit is contained in:
parent
9d22242b63
commit
d7f110e428
|
|
@ -25,11 +25,14 @@ public:
|
|||
|
||||
/*!
|
||||
Output a set of (`n`) surface points to the
|
||||
output iterator `pts`, as objects of type `std::pair<Point_3,
|
||||
%Index>`.
|
||||
output iterator `pts`, as objects of type
|
||||
`std::tuple<Point_3, int, Index>` where
|
||||
`Point_3` is the point's position,
|
||||
`int` is the point's dimension and
|
||||
`Index` is the point's index.
|
||||
|
||||
@tparam OutputIterator an `OutputIterator` of points of type
|
||||
`std::pair<MeshDomain::Point_3, MeshDomain::Index>`
|
||||
`std::tuple<MeshDomain::Point_3, int, MeshDomain::Index>`
|
||||
@tparam MeshDomain a model of `MeshDomain_3`
|
||||
@tparam C3t3 a model of `MeshComplex_3InTriangulation_3`
|
||||
|
||||
|
|
@ -39,12 +42,16 @@ OutputIterator operator()(OutputIterator pts, const MeshDomain& domain, const C3
|
|||
|
||||
/*!
|
||||
Output a set of surface points to the
|
||||
output iterator `pts`, as objects of type `std::pair<Point_3,
|
||||
%Index>`. As `n` is not given, the functor must provide enough
|
||||
output iterator `pts`, as objects of type
|
||||
`std::tuple<Point_3, int, Index>` where
|
||||
`Point_3` is the point's position,
|
||||
`int` is the point's dimension and
|
||||
`Index` is the point's index.
|
||||
As `n` is not given, the functor must provide enough
|
||||
points to initialize the mesh generation process.
|
||||
|
||||
@tparam OutputIterator an `OutputIterator` of points of type
|
||||
`std::pair<MeshDomain::Point_3, MeshDomain::Index>`
|
||||
`std::tuple<MeshDomain::Point_3, int, MeshDomain::Index>`
|
||||
@tparam MeshDomain a model of `MeshDomain_3`
|
||||
@tparam C3t3 a model of `MeshComplex_3InTriangulation_3`
|
||||
|
||||
|
|
|
|||
|
|
@ -819,7 +819,7 @@ points in the `%c3t3` object, with the calls to
|
|||
`MeshVertexBase_3::set_dimension()` and
|
||||
`MeshVertexBase_3::set_index()`.
|
||||
|
||||
\snippet CGAL/Mesh_3/mesh_3D_image_with_custom_initialization.cpp insert initial points
|
||||
\snippet Mesh_3/mesh_3D_image_with_custom_initialization.cpp insert initial points
|
||||
|
||||
The value of `index` must be consistent with the possible values of
|
||||
`Mesh_domain::Index`.
|
||||
|
|
|
|||
|
|
@ -47,7 +47,7 @@ void initialize_triangulation_from_gray_image(C3T3& c3t3,
|
|||
typedef typename MeshDomain::Point_3 Point_3;
|
||||
typedef typename MeshDomain::Index Index;
|
||||
|
||||
typedef typename std::pair<Point_3, Index> ConstructedPoint;
|
||||
typedef typename std::tuple<Point_3, int, Index> ConstructedPoint;
|
||||
|
||||
Tr& tr = c3t3.triangulation();
|
||||
|
||||
|
|
@ -63,8 +63,9 @@ void initialize_triangulation_from_gray_image(C3T3& c3t3,
|
|||
|
||||
for (const ConstructedPoint & constructedPoint : constructedPoints)
|
||||
{
|
||||
const Point_3& point = constructedPoint.first;
|
||||
const Index& index = constructedPoint.second;
|
||||
const Point_3& point = std::get<0>(constructedPoint);
|
||||
const int& dimension = std::get<1>(constructedPoint);
|
||||
const Index& index = std::get<2>(constructedPoint);
|
||||
|
||||
Weighted_point pi = cwp(point);
|
||||
|
||||
|
|
@ -73,7 +74,7 @@ void initialize_triangulation_from_gray_image(C3T3& c3t3,
|
|||
Vertex_handle v = tr.insert(pi);
|
||||
// `v` could be null if `pi` is hidden by other vertices of `tr`.
|
||||
CGAL_assertion(v != Vertex_handle());
|
||||
c3t3.set_dimension(v, 2); // by construction, points are on surface
|
||||
c3t3.set_dimension(v, dimension);
|
||||
c3t3.set_index(v, index);
|
||||
/// [insert initial points]
|
||||
}
|
||||
|
|
|
|||
|
|
@ -45,7 +45,7 @@ void initialize_triangulation_from_labeled_image(C3T3& c3t3,
|
|||
typedef typename MeshDomain::Point_3 Point_3;
|
||||
typedef typename MeshDomain::Index Index;
|
||||
|
||||
typedef typename std::pair<Point_3, Index> ConstructedPoint;
|
||||
typedef typename std::tuple<Point_3, int, Index> ConstructedPoint;
|
||||
|
||||
Tr& tr = c3t3.triangulation();
|
||||
|
||||
|
|
@ -61,8 +61,9 @@ void initialize_triangulation_from_labeled_image(C3T3& c3t3,
|
|||
|
||||
for (const ConstructedPoint & constructedPoint : constructedPoints)
|
||||
{
|
||||
const Point_3& point = constructedPoint.first;
|
||||
const Index& index = constructedPoint.second;
|
||||
const Point_3& point = std::get<0>(constructedPoint);
|
||||
const int& dimension = std::get<1>(constructedPoint);
|
||||
const Index& index = std::get<2>(constructedPoint);
|
||||
|
||||
Weighted_point pi = cwp(point);
|
||||
|
||||
|
|
@ -71,7 +72,7 @@ void initialize_triangulation_from_labeled_image(C3T3& c3t3,
|
|||
Vertex_handle v = tr.insert(pi);
|
||||
// `v` could be null if `pi` is hidden by other vertices of `tr`.
|
||||
CGAL_assertion(v != Vertex_handle());
|
||||
c3t3.set_dimension(v, 2); // by construction, points are on surface
|
||||
c3t3.set_dimension(v, dimension);
|
||||
c3t3.set_index(v, index);
|
||||
/// [insert initial points]
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
// Copyright (c) 20XX,20XX GeometryFactory
|
||||
// Copyright (c) 2015,2016 GeometryFactory
|
||||
// All rights reserved.
|
||||
//
|
||||
// This file is part of CGAL (www.cgal.org).
|
||||
|
|
@ -8,7 +8,7 @@
|
|||
// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-Commercial
|
||||
//
|
||||
//
|
||||
// Author(s) : Laurent Rineau and Ange Clement
|
||||
// Author(s) : Laurent Rineau, Jane Tournois and Ange Clement
|
||||
|
||||
#ifndef CGAL_MESH_3_CONSTRUCT_INITIAL_POINTS_GRAY_IMAGE_H
|
||||
#define CGAL_MESH_3_CONSTRUCT_INITIAL_POINTS_GRAY_IMAGE_H
|
||||
|
|
@ -54,7 +54,7 @@ struct Construct_initial_points_gray_image
|
|||
* \brief Constructs the initial points using the gray image.
|
||||
*
|
||||
* @tparam OutputIterator an `OutputIterator` of points of type
|
||||
* `std::pair<MeshDomain::Point_3, MeshDomain::Index>`
|
||||
* `std::tuple<MeshDomain::Point_3, int, MeshDomain::Index>`
|
||||
* @tparam MeshDomain a model of `MeshDomain_3`
|
||||
* @tparam C3t3 a model of `MeshComplex_3InTriangulation_3`
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
// Copyright (c) 20XX,20XX GeometryFactory
|
||||
// Copyright (c) 2015,2016 GeometryFactory
|
||||
// All rights reserved.
|
||||
//
|
||||
// This file is part of CGAL (www.cgal.org).
|
||||
|
|
@ -102,7 +102,7 @@ struct Construct_initial_points_labeled_image
|
|||
* \snippet this get construct intersection
|
||||
*
|
||||
* @tparam OutputIterator an `OutputIterator` of points of type
|
||||
* `std::pair<MeshDomain::Point_3, MeshDomain::Index>`
|
||||
* `std::tuple<MeshDomain::Point_3, int, MeshDomain::Index>`
|
||||
* @tparam MeshDomain a model of `MeshDomain_3`
|
||||
* @tparam C3t3 a model of `MeshComplex_3InTriangulation_3`
|
||||
*/
|
||||
|
|
@ -117,7 +117,7 @@ struct Construct_initial_points_labeled_image
|
|||
* \brief Same as above, but a `TransformOperator` is used
|
||||
*
|
||||
* @tparam OutputIterator an `OutputIterator` of points of type
|
||||
* `std::pair<MeshDomain::Point_3, MeshDomain::Index>`
|
||||
* `std::tuple<MeshDomain::Point_3, int, MeshDomain::Index>`
|
||||
* @tparam MeshDomain a model of `MeshDomain_3`
|
||||
* @tparam TransformOperator a functor to transform values of the image.
|
||||
* It must provides the following type:<br>
|
||||
|
|
@ -293,7 +293,7 @@ struct Construct_initial_points_labeled_image
|
|||
if (pi_inside_protecting_sphere)
|
||||
continue;
|
||||
|
||||
*pts++ = std::make_pair(intersect_point, intersect_index);
|
||||
*pts++ = std::make_tuple(intersect_point, 2, intersect_index); // dimension 2 by construction, points are on surface
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -46,7 +46,7 @@ init_c3t3(C3T3& c3t3, const MeshDomain& domain, const MeshCriteria&,
|
|||
{
|
||||
typedef typename MeshDomain::Point_3 Point_3;
|
||||
typedef typename MeshDomain::Index Index;
|
||||
typedef std::vector<std::pair<Point_3, Index> > Initial_points_vector;
|
||||
typedef std::vector<std::tuple<Point_3, int, Index> > Initial_points_vector;
|
||||
typedef typename Initial_points_vector::iterator Ipv_iterator;
|
||||
typedef typename C3T3::Vertex_handle Vertex_handle;
|
||||
|
||||
|
|
@ -66,13 +66,13 @@ init_c3t3(C3T3& c3t3, const MeshDomain& domain, const MeshCriteria&,
|
|||
it != initial_points.end() ;
|
||||
++it )
|
||||
{
|
||||
Vertex_handle v = c3t3.triangulation().insert(cwp(it->first));
|
||||
Vertex_handle v = c3t3.triangulation().insert(cwp(std::get<0>(*it)));
|
||||
|
||||
// v could be null if point is hidden
|
||||
if ( v != Vertex_handle() )
|
||||
{
|
||||
c3t3.set_dimension(v,2); // by construction, points are on surface
|
||||
c3t3.set_index(v,it->second);
|
||||
c3t3.set_dimension(v,std::get<1>(*it));
|
||||
c3t3.set_index(v,std::get<2>(*it));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -523,7 +523,7 @@ void make_mesh_3_impl(C3T3& c3t3,
|
|||
C3T3,
|
||||
MeshDomain,
|
||||
MeshCriteria,
|
||||
::CGAL::internal::has_Has_features<MeshDomain>::value >() (c3t3,
|
||||
::CGAL::internal::has_Has_features<MeshDomain>::value > () (c3t3,
|
||||
domain,
|
||||
criteria,
|
||||
with_features,
|
||||
|
|
|
|||
|
|
@ -193,7 +193,7 @@ struct Initial_points_generator_options_holder<nullptr_t>
|
|||
template <typename MeshDomain, typename C3t3>
|
||||
struct Initial_points_generator_options
|
||||
{
|
||||
typedef typename std::back_insert_iterator<std::vector<std::pair<typename MeshDomain::Point_3, typename MeshDomain::Index>>> OutputIterator;
|
||||
typedef typename std::back_insert_iterator<std::vector<std::tuple<typename MeshDomain::Point_3, int, typename MeshDomain::Index>>> OutputIterator;
|
||||
|
||||
template <typename Initial_points_generator>
|
||||
Initial_points_generator_options(const Initial_points_generator& generator)
|
||||
|
|
@ -263,7 +263,7 @@ struct Domain_features_generator< MeshDomain, true >
|
|||
template <typename MeshDomain, typename C3t3>
|
||||
struct Initial_points_generator_generator
|
||||
{
|
||||
typedef typename std::back_insert_iterator<std::vector<std::pair<typename MeshDomain::Point_3, typename MeshDomain::Index>>> OutputIterator;
|
||||
typedef typename std::back_insert_iterator<std::vector<std::tuple<typename MeshDomain::Point_3, int, typename MeshDomain::Index>>> OutputIterator;
|
||||
|
||||
typedef typename CGAL::parameters::internal::Initial_points_generator_options<MeshDomain, C3t3> Initial_points_generator_options;
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue