Merge branch 'cgal/5.5.x-branch'

This commit is contained in:
Sébastien Loriot 2022-12-05 19:00:39 +01:00
commit d3b13fb11c
16 changed files with 45 additions and 46 deletions

View File

@ -335,10 +335,10 @@ struct Point_set_processing_3_np_helper
return parameters::choose_parameter<Geom_traits>(parameters::get_parameter(np, internal_np::geom_traits)); return parameters::choose_parameter<Geom_traits>(parameters::get_parameter(np, internal_np::geom_traits));
} }
static constexpr bool has_normal_map() static constexpr bool has_normal_map(const PointRange&, const NamedParameters&)
{ {
return !std::is_same< typename internal_np::Get_param<typename NamedParameters::base, internal_np::normal_t>::type, using CGAL::parameters::is_default_parameter;
internal_np::Param_not_found> ::value; return !(is_default_parameter<NamedParameters, internal_np::normal_t>::value);
} }
}; };

View File

@ -465,8 +465,9 @@ public:
\note Properties of the added point other than its normal vector \note Properties of the added point other than its normal vector
are initialized to their default value. are initialized to their default value.
\note A normal property must have been added to the point set \note If not already added, a normal property is automatically
before using this method. added to the point set when using this method. The default value
for normal vectors is `CGAL::NULL_VECTOR`.
\note If a reallocation happens, all iterators, pointers and \note If a reallocation happens, all iterators, pointers and
references related to the container are invalidated. Otherwise, references related to the container are invalidated. Otherwise,
@ -479,8 +480,7 @@ public:
iterator insert (const Point& p, const Vector& n) iterator insert (const Point& p, const Vector& n)
{ {
iterator out = insert (p); iterator out = insert (p);
CGAL_assertion(has_normal_map()); normal_map()[size()-1] = n;
m_normals[size()-1] = n;
return out; return out;
} }
@ -550,17 +550,17 @@ public:
/*! /*!
\brief returns a reference to the normal corresponding to `index`. \brief returns a reference to the normal corresponding to `index`.
\note The normal property must have been added to the point set \note If not already added, a normal property is automatically
before calling this method (see `add_normal_map()`). added to the point set (see `add_normal_map()`).
*/ */
Vector& normal (const Index& index) { return m_normals[index]; } Vector& normal (const Index& index) { return normal_map()[index]; }
/*! /*!
\brief returns a constant reference to the normal corresponding to `index`. \brief returns a constant reference to the normal corresponding to `index`.
\note The normal property must have been added to the point set \note If not already added, a normal property is automatically
before calling this method (see `add_normal_map()`). added to the point set (see `add_normal_map()`).
*/ */
const Vector& normal (const Index& index) const { return m_normals[index]; } const Vector& normal (const Index& index) const { return normal_map()[index]; }
/// @} /// @}
@ -869,11 +869,14 @@ public:
/*! /*!
\brief returns the property map of the normal property. \brief returns the property map of the normal property.
\note The normal property must have been added to the point set \note If the normal property has not been added yet to the point set
before calling this method (see `add_normal_map()`). before calling this method, the property map is automatically added
with `add_normal_map()`.
*/ */
Vector_map normal_map () Vector_map normal_map ()
{ {
if (!m_normals)
add_normal_map();
return m_normals; return m_normals;
} }
/*! /*!
@ -982,7 +985,7 @@ public:
inline parameters() const inline parameters() const
{ {
return CGAL::parameters::point_map (m_points). return CGAL::parameters::point_map (m_points).
normal_map (m_normals). normal_map (normal_map()).
geom_traits (typename Kernel_traits<Point>::Kernel()); geom_traits (typename Kernel_traits<Point>::Kernel());
} }
@ -1036,7 +1039,7 @@ public:
*/ */
Vector_range normals () const Vector_range normals () const
{ {
return this->range<Vector> (m_normals); return this->range<Vector> (normal_map());
} }
/// @} /// @}
@ -1354,11 +1357,18 @@ struct Point_set_processing_3_np_helper<Point_set_3<Point, Vector>, NamedParamet
return parameters::choose_parameter<Geom_traits>(parameters::get_parameter(np, internal_np::geom_traits)); return parameters::choose_parameter<Geom_traits>(parameters::get_parameter(np, internal_np::geom_traits));
} }
static constexpr bool has_normal_map() static bool has_normal_map(const Point_set_3<Point, Vector>& ps, const NamedParameters&)
{ {
return true; if (ps.has_normal_map())
return true;
using CGAL::parameters::is_default_parameter;
return !(is_default_parameter<NamedParameters, internal_np::normal_t>::value);
} }
static constexpr bool has_normal_map(Point_set_3<Point, Vector>&, const NamedParameters&)
{
return true; // either available in named parameters, and always available in Point_set_3 otherwise
}
}; };
/// \endcond /// \endcond

View File

@ -97,8 +97,6 @@ bool read_OFF(std::istream& is,
typedef typename NP_helper::Geom_traits Kernel; typedef typename NP_helper::Geom_traits Kernel;
typedef typename Kernel::FT FT; typedef typename Kernel::FT FT;
bool has_normals = NP_helper::has_normal_map();
PointMap point_map = NP_helper::get_point_map(np); PointMap point_map = NP_helper::get_point_map(np);
NormalMap normal_map = NP_helper::get_normal_map(np); NormalMap normal_map = NP_helper::get_normal_map(np);
@ -182,8 +180,7 @@ bool read_OFF(std::istream& is,
Enriched_point pwn; Enriched_point pwn;
put(point_map, pwn, point); // point_map[&pwn] = point put(point_map, pwn, point); // point_map[&pwn] = point
if (has_normals) put(normal_map, pwn, normal); // normal_map[&pwn] = normal
put(normal_map, pwn, normal); // normal_map[&pwn] = normal
*output++ = pwn; *output++ = pwn;
++pointsRead; ++pointsRead;

View File

@ -257,17 +257,12 @@ bool read_PLY(std::istream& is,
typedef typename NP_helper::Point_map PointMap; typedef typename NP_helper::Point_map PointMap;
typedef typename NP_helper::Normal_map NormalMap; typedef typename NP_helper::Normal_map NormalMap;
bool has_normals = NP_helper::has_normal_map();
PointMap point_map = NP_helper::get_point_map(np); PointMap point_map = NP_helper::get_point_map(np);
NormalMap normal_map = NP_helper::get_normal_map(np); NormalMap normal_map = NP_helper::get_normal_map(np);
if(has_normals) return read_PLY_with_properties(is, output,
return read_PLY_with_properties(is, output, make_ply_point_reader(point_map),
make_ply_point_reader(point_map), make_ply_normal_reader(normal_map));
make_ply_normal_reader(normal_map));
// else
return read_PLY_with_properties(is, output, make_ply_point_reader(point_map));
} }
/** /**

View File

@ -89,8 +89,6 @@ bool read_XYZ(std::istream& is,
typedef typename NP_helper::Normal_map NormalMap; typedef typename NP_helper::Normal_map NormalMap;
typedef typename NP_helper::Geom_traits Kernel; typedef typename NP_helper::Geom_traits Kernel;
bool has_normals = NP_helper::has_normal_map();
PointMap point_map = NP_helper::get_point_map(np); PointMap point_map = NP_helper::get_point_map(np);
NormalMap normal_map = NP_helper::get_normal_map(np); NormalMap normal_map = NP_helper::get_normal_map(np);
@ -155,8 +153,7 @@ bool read_XYZ(std::istream& is,
Enriched_point pwn; Enriched_point pwn;
put(point_map, pwn, point); // point_map[pwn] = point put(point_map, pwn, point); // point_map[pwn] = point
if (has_normals) put(normal_map, pwn, normal); // normal_map[pwn] = normal
put(normal_map, pwn, normal); // normal_map[pwn] = normal
*output++ = pwn; *output++ = pwn;
continue; continue;

View File

@ -45,7 +45,7 @@ bool write_OFF_PSP(std::ostream& os,
typedef typename NP_helper::Const_point_map PointMap; typedef typename NP_helper::Const_point_map PointMap;
typedef typename NP_helper::Normal_map NormalMap; typedef typename NP_helper::Normal_map NormalMap;
const bool has_normals = !(is_default_parameter<CGAL_NP_CLASS, internal_np::normal_t>::value); const bool has_normals = NP_helper::has_normal_map(points, np);
PointMap point_map = NP_helper::get_const_point_map(points, np); PointMap point_map = NP_helper::get_const_point_map(points, np);
NormalMap normal_map = NP_helper::get_normal_map(points, np); NormalMap normal_map = NP_helper::get_normal_map(points, np);

View File

@ -201,7 +201,7 @@ bool write_PLY(std::ostream& os,
typedef typename NP_helper::Const_point_map PointMap; typedef typename NP_helper::Const_point_map PointMap;
typedef typename NP_helper::Normal_map NormalMap; typedef typename NP_helper::Normal_map NormalMap;
bool has_normals = NP_helper::has_normal_map(); const bool has_normals = NP_helper::has_normal_map(points, np);
PointMap point_map = NP_helper::get_const_point_map(points, np); PointMap point_map = NP_helper::get_const_point_map(points, np);
NormalMap normal_map = NP_helper::get_normal_map(points, np); NormalMap normal_map = NP_helper::get_normal_map(points, np);

View File

@ -46,7 +46,7 @@ bool write_XYZ_PSP(std::ostream& os,
typedef typename NP_helper::Const_point_map PointMap; typedef typename NP_helper::Const_point_map PointMap;
typedef typename NP_helper::Normal_map NormalMap; typedef typename NP_helper::Normal_map NormalMap;
bool has_normals = NP_helper::has_normal_map(); const bool has_normals = NP_helper::has_normal_map(points, np);
PointMap point_map = NP_helper::get_const_point_map(points, np); PointMap point_map = NP_helper::get_const_point_map(points, np);
NormalMap normal_map = NP_helper::get_normal_map(points, np); NormalMap normal_map = NP_helper::get_normal_map(points, np);

View File

@ -278,7 +278,7 @@ bilateral_smooth_point_set(
typedef typename Kernel::Point_3 Point_3; typedef typename Kernel::Point_3 Point_3;
typedef typename Kernel::Vector_3 Vector_3; typedef typename Kernel::Vector_3 Vector_3;
CGAL_static_assertion_msg(NP_helper::has_normal_map(), "Error: no normal map"); CGAL_assertion_msg(NP_helper::has_normal_map(points, np), "Error: no normal map");
typedef typename Kernel::FT FT; typedef typename Kernel::FT FT;

View File

@ -367,7 +367,7 @@ edge_aware_upsample_point_set(
typedef typename NP_helper::Geom_traits Kernel; typedef typename NP_helper::Geom_traits Kernel;
CGAL_static_assertion_msg(NP_helper::has_normal_map(), "Error: no normal map"); CGAL_assertion_msg(NP_helper::has_normal_map(points, np), "Error: no normal map");
typedef typename Kernel::Point_3 Point; typedef typename Kernel::Point_3 Point;
typedef typename Kernel::Vector_3 Vector; typedef typename Kernel::Vector_3 Vector;

View File

@ -196,7 +196,7 @@ jet_estimate_normals(
typedef typename Kernel::FT FT; typedef typename Kernel::FT FT;
typedef typename GetSvdTraits<NamedParameters>::type SvdTraits; typedef typename GetSvdTraits<NamedParameters>::type SvdTraits;
CGAL_static_assertion_msg(NP_helper::has_normal_map(), "Error: no normal map"); CGAL_assertion_msg(NP_helper::has_normal_map(points, np), "Error: no normal map");
CGAL_static_assertion_msg(!(std::is_same<SvdTraits, CGAL_static_assertion_msg(!(std::is_same<SvdTraits,
typename GetSvdTraits<NamedParameters>::NoTraits>::value), typename GetSvdTraits<NamedParameters>::NoTraits>::value),
"Error: no SVD traits"); "Error: no SVD traits");

View File

@ -631,7 +631,7 @@ mst_orient_normals(
typedef typename NP_helper::Geom_traits Kernel; typedef typename NP_helper::Geom_traits Kernel;
typedef typename Point_set_processing_3::GetIsConstrainedMap<PointRange, NamedParameters>::type ConstrainedMap; typedef typename Point_set_processing_3::GetIsConstrainedMap<PointRange, NamedParameters>::type ConstrainedMap;
CGAL_static_assertion_msg(NP_helper::has_normal_map(), "Error: no normal map"); CGAL_assertion_msg(NP_helper::has_normal_map(points, np), "Error: no normal map");
PointMap point_map = NP_helper::get_point_map(points, np); PointMap point_map = NP_helper::get_point_map(points, np);
NormalMap normal_map = NP_helper::get_normal_map(points, np); NormalMap normal_map = NP_helper::get_normal_map(points, np);

View File

@ -168,7 +168,7 @@ pca_estimate_normals(
typedef typename NP_helper::Geom_traits Kernel; typedef typename NP_helper::Geom_traits Kernel;
typedef typename Kernel::FT FT; typedef typename Kernel::FT FT;
CGAL_static_assertion_msg(NP_helper::has_normal_map(), "Error: no normal map"); CGAL_assertion_msg(NP_helper::has_normal_map(points, np), "Error: no normal map");
PointMap point_map = NP_helper::get_point_map(points, np); PointMap point_map = NP_helper::get_point_map(points, np);
NormalMap normal_map = NP_helper::get_normal_map(points, np); NormalMap normal_map = NP_helper::get_normal_map(points, np);

View File

@ -479,7 +479,7 @@ void scanline_orient_normals (PointRange& points, const NamedParameters& np = pa
<internal_np::scanline_id_t, NamedParameters, No_map>::type; <internal_np::scanline_id_t, NamedParameters, No_map>::type;
using Fallback_scanline_ID = Boolean_tag<std::is_same<ScanlineIDMap, No_map>::value>; using Fallback_scanline_ID = Boolean_tag<std::is_same<ScanlineIDMap, No_map>::value>;
CGAL_static_assertion_msg(NP_helper::has_normal_map(), "Error: no normal map"); CGAL_assertion_msg(NP_helper::has_normal_map(points, np), "Error: no normal map");
PointMap point_map = NP_helper::get_point_map(points, np); PointMap point_map = NP_helper::get_point_map(points, np);
NormalMap normal_map = NP_helper::get_normal_map(points, np); NormalMap normal_map = NP_helper::get_normal_map(points, np);

View File

@ -233,7 +233,7 @@ public:
typedef typename Point_set_processing_3::GetPlaneMap<PlaneRange, NamedParameters>::type PlaneMap; typedef typename Point_set_processing_3::GetPlaneMap<PlaneRange, NamedParameters>::type PlaneMap;
typedef typename Point_set_processing_3::GetPlaneIndexMap<NamedParameters>::type PlaneIndexMap; typedef typename Point_set_processing_3::GetPlaneIndexMap<NamedParameters>::type PlaneIndexMap;
CGAL_static_assertion_msg(NP_helper::has_normal_map(), "Error: no normal map"); CGAL_assertion_msg(NP_helper::has_normal_map(points, np), "Error: no normal map");
CGAL_static_assertion_msg((!is_default_parameter<NamedParameters, internal_np::plane_index_t>::value), CGAL_static_assertion_msg((!is_default_parameter<NamedParameters, internal_np::plane_index_t>::value),
"Error: no plane index map"); "Error: no plane index map");

View File

@ -321,7 +321,7 @@ vcm_estimate_normals_internal (PointRange& points,
typedef typename NP_helper::Geom_traits Kernel; typedef typename NP_helper::Geom_traits Kernel;
typedef typename GetDiagonalizeTraits<NamedParameters, double, 3>::type DiagonalizeTraits; typedef typename GetDiagonalizeTraits<NamedParameters, double, 3>::type DiagonalizeTraits;
CGAL_static_assertion_msg(NP_helper::has_normal_map(), "Error: no normal map"); CGAL_assertion_msg(NP_helper::has_normal_map(points, np), "Error: no normal map");
PointMap point_map = NP_helper::get_point_map(points, np); PointMap point_map = NP_helper::get_point_map(points, np);
NormalMap normal_map = NP_helper::get_normal_map(points, np); NormalMap normal_map = NP_helper::get_normal_map(points, np);