mirror of https://github.com/CGAL/cgal
Restore non-deprecated code
This commit is contained in:
parent
7231fc77e9
commit
e5e174941a
|
|
@ -308,6 +308,202 @@ compute_vcm (const PointRange& points,
|
||||||
compute_vcm (points, ccov, offset_radius, convolution_radius,
|
compute_vcm (points, ccov, offset_radius, convolution_radius,
|
||||||
CGAL::Point_set_processing_3::parameters::all_default (points));
|
CGAL::Point_set_processing_3::parameters::all_default (points));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/// \endcond
|
||||||
|
|
||||||
|
/// \cond SKIP_IN_MANUAL
|
||||||
|
template <typename PointRange,
|
||||||
|
typename NamedParameters
|
||||||
|
>
|
||||||
|
void
|
||||||
|
vcm_estimate_normals_internal (PointRange& points,
|
||||||
|
double offset_radius, ///< offset radius.
|
||||||
|
double convolution_radius, ///< convolution radius.
|
||||||
|
const NamedParameters& np,
|
||||||
|
int nb_neighbors_convolve = -1 ///< number of neighbors used during the convolution.
|
||||||
|
)
|
||||||
|
{
|
||||||
|
using boost::choose_param;
|
||||||
|
// basic geometric types
|
||||||
|
typedef typename Point_set_processing_3::GetPointMap<PointRange, NamedParameters>::type PointMap;
|
||||||
|
typedef typename Point_set_processing_3::GetNormalMap<PointRange, NamedParameters>::type NormalMap;
|
||||||
|
typedef typename Point_set_processing_3::GetK<PointRange, NamedParameters>::Kernel Kernel;
|
||||||
|
typedef typename GetDiagonalizeTraits<NamedParameters, double, 3>::type DiagonalizeTraits;
|
||||||
|
|
||||||
|
CGAL_static_assertion_msg(!(boost::is_same<NormalMap,
|
||||||
|
typename Point_set_processing_3::GetNormalMap<PointRange, NamedParameters>::NoMap>::value),
|
||||||
|
"Error: no normal map");
|
||||||
|
|
||||||
|
PointMap point_map = choose_param(get_param(np, internal_np::point_map), PointMap());
|
||||||
|
NormalMap normal_map = choose_param(get_param(np, internal_np::normal_map), NormalMap());
|
||||||
|
|
||||||
|
typedef cpp11::array<double, 6> Covariance;
|
||||||
|
|
||||||
|
// Compute the VCM and convolve it
|
||||||
|
std::vector<Covariance> cov;
|
||||||
|
if (nb_neighbors_convolve == -1) {
|
||||||
|
compute_vcm(points,
|
||||||
|
cov,
|
||||||
|
offset_radius,
|
||||||
|
convolution_radius,
|
||||||
|
np);
|
||||||
|
} else {
|
||||||
|
internal::vcm_offset(points.begin(), points.end(),
|
||||||
|
point_map,
|
||||||
|
cov,
|
||||||
|
offset_radius,
|
||||||
|
20,
|
||||||
|
Kernel());
|
||||||
|
|
||||||
|
if (nb_neighbors_convolve > 0)
|
||||||
|
{
|
||||||
|
std::vector<Covariance> ccov;
|
||||||
|
ccov.reserve(cov.size());
|
||||||
|
internal::vcm_convolve(points.begin(), points.end(),
|
||||||
|
point_map,
|
||||||
|
cov,
|
||||||
|
ccov,
|
||||||
|
(unsigned int) nb_neighbors_convolve,
|
||||||
|
Kernel());
|
||||||
|
|
||||||
|
cov.clear();
|
||||||
|
std::copy(ccov.begin(), ccov.end(), std::back_inserter(cov));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// And finally, compute the normals
|
||||||
|
int i = 0;
|
||||||
|
for (typename PointRange::iterator it = points.begin(); it != points.end(); ++it) {
|
||||||
|
cpp11::array<double, 3> enormal = {{ 0,0,0 }};
|
||||||
|
DiagonalizeTraits::extract_largest_eigenvector_of_covariance_matrix
|
||||||
|
(cov[i], enormal);
|
||||||
|
|
||||||
|
typename Kernel::Vector_3 normal(enormal[0],
|
||||||
|
enormal[1],
|
||||||
|
enormal[2]);
|
||||||
|
put(normal_map, *it, normal);
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/// @endcond
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
\ingroup PkgPointSetProcessing3Algorithms
|
||||||
|
Estimates normal directions of the range of `points`
|
||||||
|
using the Voronoi Covariance Measure with a radius for the convolution.
|
||||||
|
The output normals are randomly oriented.
|
||||||
|
|
||||||
|
See `compute_vcm()` for a detailed description of the parameters `offset_radius` and `convolution_radius`
|
||||||
|
and of the Voronoi Covariance Measure.
|
||||||
|
|
||||||
|
\tparam PointRange is a model of `Range`. The value type of
|
||||||
|
its iterator is the key type of the named parameter `point_map`.
|
||||||
|
|
||||||
|
\param points input point range.
|
||||||
|
\param offset_radius offset_radius.
|
||||||
|
\param convolution_radius convolution_radius.
|
||||||
|
\param np optional sequence of \ref psp_namedparameters "Named Parameters" among the ones listed below.
|
||||||
|
|
||||||
|
\cgalNamedParamsBegin
|
||||||
|
\cgalParamBegin{point_map} a model of `ReadablePropertyMap` with value type `geom_traits::Point_3`.
|
||||||
|
If this parameter is omitted, `CGAL::Identity_property_map<geom_traits::Point_3>` is used.\cgalParamEnd
|
||||||
|
\cgalParamBegin{normal_map} a model of `WritablePropertyMap` with value type
|
||||||
|
`geom_traits::Vector_3`.\cgalParamEnd
|
||||||
|
\cgalParamBegin{diagonalize_traits} a model of `DiagonalizeTraits`. It can be omitted:
|
||||||
|
if Eigen 3 (or greater) is available and `CGAL_EIGEN3_ENABLED` is defined then an overload
|
||||||
|
using `Eigen_diagonalize_traits` is provided. Otherwise, the internal implementation
|
||||||
|
`CGAL::Diagonalize_traits` is used.\cgalParamEnd
|
||||||
|
\cgalParamBegin{geom_traits} an instance of a geometric traits class, model of `Kernel`\cgalParamEnd
|
||||||
|
\cgalNamedParamsEnd
|
||||||
|
|
||||||
|
*/
|
||||||
|
template <typename PointRange,
|
||||||
|
typename NamedParameters
|
||||||
|
>
|
||||||
|
void
|
||||||
|
vcm_estimate_normals (PointRange& points,
|
||||||
|
double offset_radius,
|
||||||
|
double convolution_radius,
|
||||||
|
const NamedParameters& np
|
||||||
|
)
|
||||||
|
{
|
||||||
|
vcm_estimate_normals_internal(points, offset_radius, convolution_radius, np);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// \cond SKIP_IN_MANUAL
|
||||||
|
// variant with default NP
|
||||||
|
template <typename PointRange>
|
||||||
|
void
|
||||||
|
vcm_estimate_normals (PointRange& points,
|
||||||
|
double offset_radius, ///< offset radius.
|
||||||
|
double convolution_radius) ///< convolution radius.
|
||||||
|
{
|
||||||
|
return vcm_estimate_normals
|
||||||
|
(points, offset_radius, convolution_radius,
|
||||||
|
CGAL::Point_set_processing_3::parameters::all_default(points));
|
||||||
|
}
|
||||||
|
|
||||||
|
/// \endcond
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
\ingroup PkgPointSetProcessing3Algorithms
|
||||||
|
Estimates normal directions of the range of `points`
|
||||||
|
using the Voronoi Covariance Measure with a number of neighbors for the convolution.
|
||||||
|
The output normals are randomly oriented.
|
||||||
|
|
||||||
|
See `compute_vcm()` for a detailed description of the parameter `offset_radius`
|
||||||
|
and of the Voronoi Covariance Measure.
|
||||||
|
|
||||||
|
\tparam PointRange is a model of `Range`. The value type of
|
||||||
|
its iterator is the key type of the named parameter `point_map`.
|
||||||
|
|
||||||
|
\param points input point range.
|
||||||
|
\param offset_radius offset_radius.
|
||||||
|
\param k number of neighbor points used for convolution.
|
||||||
|
\param np optional sequence of \ref psp_namedparameters "Named Parameters" among the ones listed below.
|
||||||
|
|
||||||
|
\cgalNamedParamsBegin
|
||||||
|
\cgalParamBegin{point_map} a model of `ReadablePropertyMap` with value type `geom_traits::Point_3`.
|
||||||
|
If this parameter is omitted, `CGAL::Identity_property_map<geom_traits::Point_3>` is used.\cgalParamEnd
|
||||||
|
\cgalParamBegin{normal_map} a model of `WritablePropertyMap` with value type
|
||||||
|
`geom_traits::Vector_3`.\cgalParamEnd
|
||||||
|
\cgalParamBegin{diagonalize_traits} a model of `DiagonalizeTraits`. It can be omitted:
|
||||||
|
if Eigen 3 (or greater) is available and `CGAL_EIGEN3_ENABLED` is defined then an overload
|
||||||
|
using `Eigen_diagonalize_traits` is provided. Otherwise, the internal implementation
|
||||||
|
`CGAL::Diagonalize_traits` is used.\cgalParamEnd
|
||||||
|
\cgalParamBegin{geom_traits} an instance of a geometric traits class, model of `Kernel`\cgalParamEnd
|
||||||
|
\cgalNamedParamsEnd
|
||||||
|
*/
|
||||||
|
template < typename PointRange,
|
||||||
|
typename NamedParameters
|
||||||
|
>
|
||||||
|
void
|
||||||
|
vcm_estimate_normals (PointRange& points,
|
||||||
|
double offset_radius,
|
||||||
|
unsigned int k,
|
||||||
|
const NamedParameters& np
|
||||||
|
)
|
||||||
|
{
|
||||||
|
vcm_estimate_normals_internal(points, offset_radius, 0, np, k);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// \cond SKIP_IN_MANUAL
|
||||||
|
// variant with default NP
|
||||||
|
template <typename PointRange>
|
||||||
|
void
|
||||||
|
vcm_estimate_normals (PointRange& points,
|
||||||
|
double offset_radius, ///< offset radius.
|
||||||
|
unsigned int k)
|
||||||
|
{
|
||||||
|
return vcm_estimate_normals
|
||||||
|
(points, offset_radius, k,
|
||||||
|
CGAL::Point_set_processing_3::parameters::all_default(points));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/// \endcond
|
/// \endcond
|
||||||
|
|
||||||
} // namespace CGAL
|
} // namespace CGAL
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue