Move GH calculators to internal namespace

This commit is contained in:
Mael Rouxel-Labbé 2022-03-14 20:51:57 +01:00
parent 1020a401c1
commit 56a3e64a16
4 changed files with 49 additions and 37 deletions

View File

@ -21,12 +21,13 @@
namespace CGAL { namespace CGAL {
namespace Surface_mesh_simplification { namespace Surface_mesh_simplification {
namespace internal {
template <typename TriangleMesh, typename GeomTraits> template <typename TriangleMesh, typename GeomTraits>
class Plane_quadric_calculator class Plane_quadric_calculator
{ {
typedef typename internal::GarlandHeckbert_matrix_types<GeomTraits>::Mat_4 Mat_4; typedef typename GarlandHeckbert_matrix_types<GeomTraits>::Mat_4 Mat_4;
typedef typename internal::GarlandHeckbert_matrix_types<GeomTraits>::Col_4 Col_4; typedef typename GarlandHeckbert_matrix_types<GeomTraits>::Col_4 Col_4;
public: public:
Plane_quadric_calculator() { } Plane_quadric_calculator() { }
@ -37,7 +38,7 @@ public:
const VertexPointMap point_map, const VertexPointMap point_map,
const GeomTraits& gt) const const GeomTraits& gt) const
{ {
return internal::construct_classic_plane_quadric_from_edge(he, tmesh, point_map, gt); return construct_classic_plane_quadric_from_edge(he, tmesh, point_map, gt);
} }
template <typename VertexPointMap> template <typename VertexPointMap>
@ -46,7 +47,7 @@ public:
const VertexPointMap point_map, const VertexPointMap point_map,
const GeomTraits& gt) const const GeomTraits& gt) const
{ {
return internal::construct_classic_plane_quadric_from_face(f, tmesh, point_map, gt); return construct_classic_plane_quadric_from_face(f, tmesh, point_map, gt);
} }
// @fixme unused? // @fixme unused?
@ -73,19 +74,21 @@ public:
const Col_4& p0, const Col_4& p0,
const Col_4& p1) const const Col_4& p1) const
{ {
return internal::construct_optimal_point_singular<GeomTraits>(quadric, p0, p1); return construct_optimal_point_singular<GeomTraits>(quadric, p0, p1);
} }
}; };
} // namespace internal
template<typename TriangleMesh, typename GeomTraits> template<typename TriangleMesh, typename GeomTraits>
class GarlandHeckbert_plane_policies class GarlandHeckbert_plane_policies
: public internal::GarlandHeckbert_placement_base< : public internal::GarlandHeckbert_placement_base<
Plane_quadric_calculator<TriangleMesh, GeomTraits>, TriangleMesh, GeomTraits>, internal::Plane_quadric_calculator<TriangleMesh, GeomTraits>, TriangleMesh, GeomTraits>,
public internal::GarlandHeckbert_cost_base< public internal::GarlandHeckbert_cost_base<
Plane_quadric_calculator<TriangleMesh, GeomTraits>, TriangleMesh, GeomTraits> internal::Plane_quadric_calculator<TriangleMesh, GeomTraits>, TriangleMesh, GeomTraits>
{ {
public: public:
typedef Plane_quadric_calculator<TriangleMesh, GeomTraits> Quadric_calculator; typedef internal::Plane_quadric_calculator<TriangleMesh, GeomTraits> Quadric_calculator;
private: private:
typedef internal::GarlandHeckbert_placement_base< typedef internal::GarlandHeckbert_placement_base<

View File

@ -27,6 +27,7 @@
namespace CGAL { namespace CGAL {
namespace Surface_mesh_simplification { namespace Surface_mesh_simplification {
namespace internal {
template <typename TriangleMesh, typename GeomTraits, typename FaceVarianceMap> template <typename TriangleMesh, typename GeomTraits, typename FaceVarianceMap>
class Probabilistic_plane_quadric_calculator class Probabilistic_plane_quadric_calculator
@ -39,8 +40,8 @@ class Probabilistic_plane_quadric_calculator
typedef Constant_property_map<face_descriptor, std::pair<FT, FT> > Default_FVM; typedef Constant_property_map<face_descriptor, std::pair<FT, FT> > Default_FVM;
typedef typename Default::Get<FaceVarianceMap, Default_FVM>::type Face_variance_map; typedef typename Default::Get<FaceVarianceMap, Default_FVM>::type Face_variance_map;
typedef typename internal::GarlandHeckbert_matrix_types<GeomTraits>::Mat_4 Mat_4; typedef typename GarlandHeckbert_matrix_types<GeomTraits>::Mat_4 Mat_4;
typedef typename internal::GarlandHeckbert_matrix_types<GeomTraits>::Col_4 Col_4; typedef typename GarlandHeckbert_matrix_types<GeomTraits>::Col_4 Col_4;
private: private:
// @fixme check the magic values // @fixme check the magic values
@ -83,13 +84,13 @@ public:
typedef typename GeomTraits::Point_3 Point_3; typedef typename GeomTraits::Point_3 Point_3;
typedef typename GeomTraits::Vector_3 Vector_3; typedef typename GeomTraits::Vector_3 Vector_3;
const Vector_3 normal = internal::construct_edge_normal(he, tmesh, vpm, gt); const Vector_3 normal = construct_edge_normal(he, tmesh, vpm, gt);
const Point_3 p = get(vpm, source(he, tmesh)); const Point_3 p = get(vpm, source(he, tmesh));
FT n_variance, p_variance; FT n_variance, p_variance;
std::tie(n_variance, p_variance) = get(m_face_variance_map, face(he, tmesh)); std::tie(n_variance, p_variance) = get(m_face_variance_map, face(he, tmesh));
return internal::construct_prob_plane_quadric_from_normal(normal, p, gt, n_variance, p_variance); return construct_prob_plane_quadric_from_normal(normal, p, gt, n_variance, p_variance);
} }
template <typename VertexPointMap> template <typename VertexPointMap>
@ -102,13 +103,13 @@ public:
typedef typename GeomTraits::Point_3 Point_3; typedef typename GeomTraits::Point_3 Point_3;
typedef typename GeomTraits::Vector_3 Vector_3; typedef typename GeomTraits::Vector_3 Vector_3;
const Vector_3 normal = internal::construct_unit_normal_from_face(f, tmesh, vpm, gt); const Vector_3 normal = construct_unit_normal_from_face(f, tmesh, vpm, gt);
const Point_3 p = get(vpm, source(halfedge(f, tmesh), tmesh)); const Point_3 p = get(vpm, source(halfedge(f, tmesh), tmesh));
FT n_variance, p_variance; FT n_variance, p_variance;
std::tie(n_variance, p_variance) = get(m_face_variance_map, f); std::tie(n_variance, p_variance) = get(m_face_variance_map, f);
return internal::construct_prob_plane_quadric_from_normal(normal, p, gt, n_variance, p_variance); return construct_prob_plane_quadric_from_normal(normal, p, gt, n_variance, p_variance);
} }
Col_4 construct_optimal_point(const Mat_4& quadric, Col_4 construct_optimal_point(const Mat_4& quadric,
@ -116,10 +117,12 @@ public:
const Col_4& /*p1*/) const const Col_4& /*p1*/) const
{ {
// @fixme check this // @fixme check this
return internal::construct_optimal_point_invertible<GeomTraits>(quadric); return construct_optimal_point_invertible<GeomTraits>(quadric);
} }
}; };
} // namespace internal
// Implements probabilistic plane quadrics, // Implements probabilistic plane quadrics,
// optionally takes a face variance map giving a per-face variance // optionally takes a face variance map giving a per-face variance
template<typename TriangleMesh, template<typename TriangleMesh,
@ -127,14 +130,14 @@ template<typename TriangleMesh,
typename FaceVarianceMap = CGAL::Default> typename FaceVarianceMap = CGAL::Default>
class GarlandHeckbert_probabilistic_plane_policies class GarlandHeckbert_probabilistic_plane_policies
: public internal::GarlandHeckbert_placement_base< : public internal::GarlandHeckbert_placement_base<
Probabilistic_plane_quadric_calculator<TriangleMesh, GeomTraits, FaceVarianceMap>, internal::Probabilistic_plane_quadric_calculator<TriangleMesh, GeomTraits, FaceVarianceMap>,
TriangleMesh, GeomTraits>, TriangleMesh, GeomTraits>,
public internal::GarlandHeckbert_cost_base< public internal::GarlandHeckbert_cost_base<
Probabilistic_plane_quadric_calculator<TriangleMesh, GeomTraits, FaceVarianceMap>, internal::Probabilistic_plane_quadric_calculator<TriangleMesh, GeomTraits, FaceVarianceMap>,
TriangleMesh, GeomTraits> TriangleMesh, GeomTraits>
{ {
public: public:
typedef Probabilistic_plane_quadric_calculator< typedef internal::Probabilistic_plane_quadric_calculator<
TriangleMesh, GeomTraits, FaceVarianceMap> Quadric_calculator; TriangleMesh, GeomTraits, FaceVarianceMap> Quadric_calculator;
private: private:

View File

@ -24,6 +24,7 @@
namespace CGAL { namespace CGAL {
namespace Surface_mesh_simplification { namespace Surface_mesh_simplification {
namespace internal {
template <typename TriangleMesh, typename GeomTraits, typename FaceVarianceMap> template <typename TriangleMesh, typename GeomTraits, typename FaceVarianceMap>
class Probabilistic_triangle_quadric_calculator class Probabilistic_triangle_quadric_calculator
@ -37,8 +38,8 @@ class Probabilistic_triangle_quadric_calculator
typedef Constant_property_map<face_descriptor, FT> Default_FVM; typedef Constant_property_map<face_descriptor, FT> Default_FVM;
typedef typename Default::Get<FaceVarianceMap, Default_FVM>::type Face_variance_map; typedef typename Default::Get<FaceVarianceMap, Default_FVM>::type Face_variance_map;
typedef typename internal::GarlandHeckbert_matrix_types<GeomTraits>::Mat_4 Mat_4; typedef typename GarlandHeckbert_matrix_types<GeomTraits>::Mat_4 Mat_4;
typedef typename internal::GarlandHeckbert_matrix_types<GeomTraits>::Col_4 Col_4; typedef typename GarlandHeckbert_matrix_types<GeomTraits>::Col_4 Col_4;
private: private:
// same meaning as for probabilistic plane quadrics // same meaning as for probabilistic plane quadrics
@ -65,7 +66,7 @@ public:
// parameters are constants defined for this class // parameters are constants defined for this class
FT variance, discard_position; FT variance, discard_position;
std::tie(variance, discard_position) = std::tie(variance, discard_position) =
internal::estimate_variances(tmesh, GeomTraits(), default_variance_unit, position_variance_factor); estimate_variances(tmesh, GeomTraits(), default_variance_unit, position_variance_factor);
// see probabilistic plane quadrics // see probabilistic plane quadrics
m_face_variance_map = Default_FVM { variance }; m_face_variance_map = Default_FVM { variance };
@ -81,14 +82,14 @@ public:
const GeomTraits& gt) const const GeomTraits& gt) const
{ {
// same as in probabilistic plane policy // same as in probabilistic plane policy
const Vector_3 normal = internal::construct_edge_normal(he, tmesh, point_map, gt); const Vector_3 normal = construct_edge_normal(he, tmesh, point_map, gt);
const Point_3 p = get(point_map, source(he, tmesh)); const Point_3 p = get(point_map, source(he, tmesh));
const FT variance = get(m_face_variance_map, face(he, tmesh)); const FT variance = get(m_face_variance_map, face(he, tmesh));
// @fixme plane? // @fixme plane?
return internal::construct_prob_plane_quadric_from_normal(normal, p, gt, variance, return construct_prob_plane_quadric_from_normal(normal, p, gt, variance,
position_variance_factor * variance); position_variance_factor * variance);
} }
template<typename VertexPointMap> template<typename VertexPointMap>
@ -99,16 +100,18 @@ public:
{ {
const FT variance = get(m_face_variance_map, f); const FT variance = get(m_face_variance_map, f);
return internal::construct_prob_triangle_quadric_from_face(f, variance, tmesh, point_map, gt); return construct_prob_triangle_quadric_from_face(f, variance, tmesh, point_map, gt);
} }
Col_4 construct_optimal_point(const Mat_4& quadric, const Col_4& /*p0*/, const Col_4& /*p1*/) const Col_4 construct_optimal_point(const Mat_4& quadric, const Col_4& /*p0*/, const Col_4& /*p1*/) const
{ {
// @fixme check this // @fixme check this
return internal::construct_optimal_point_invertible<GeomTraits>(quadric); return construct_optimal_point_invertible<GeomTraits>(quadric);
} }
}; };
} // namespace internal
// implements probabilistic triangle faces and optionally takes a face variance map // implements probabilistic triangle faces and optionally takes a face variance map
// analogously to probabilistic plane quadrics // analogously to probabilistic plane quadrics
template<typename TriangleMesh, template<typename TriangleMesh,
@ -116,14 +119,14 @@ template<typename TriangleMesh,
typename FaceVarianceMap = CGAL::Default> typename FaceVarianceMap = CGAL::Default>
class GarlandHeckbert_probabilistic_triangle_policies class GarlandHeckbert_probabilistic_triangle_policies
: public internal::GarlandHeckbert_placement_base< : public internal::GarlandHeckbert_placement_base<
Probabilistic_triangle_quadric_calculator<TriangleMesh, GeomTraits, FaceVarianceMap>, internal::Probabilistic_triangle_quadric_calculator<TriangleMesh, GeomTraits, FaceVarianceMap>,
TriangleMesh, GeomTraits>, TriangleMesh, GeomTraits>,
public internal::GarlandHeckbert_cost_base< public internal::GarlandHeckbert_cost_base<
Probabilistic_triangle_quadric_calculator<TriangleMesh, GeomTraits, FaceVarianceMap>, internal::Probabilistic_triangle_quadric_calculator<TriangleMesh, GeomTraits, FaceVarianceMap>,
TriangleMesh, GeomTraits> TriangleMesh, GeomTraits>
{ {
public: public:
typedef Probabilistic_triangle_quadric_calculator< typedef internal::Probabilistic_triangle_quadric_calculator<
TriangleMesh, GeomTraits, FaceVarianceMap> Quadric_calculator; TriangleMesh, GeomTraits, FaceVarianceMap> Quadric_calculator;
private: private:

View File

@ -21,12 +21,13 @@
namespace CGAL { namespace CGAL {
namespace Surface_mesh_simplification { namespace Surface_mesh_simplification {
namespace internal {
template <typename TriangleMesh, typename GeomTraits> template <typename TriangleMesh, typename GeomTraits>
class Triangle_quadric_calculator class Triangle_quadric_calculator
{ {
typedef typename internal::GarlandHeckbert_matrix_types<GeomTraits>::Mat_4 Mat_4; typedef typename GarlandHeckbert_matrix_types<GeomTraits>::Mat_4 Mat_4;
typedef typename internal::GarlandHeckbert_matrix_types<GeomTraits>::Col_4 Col_4; typedef typename GarlandHeckbert_matrix_types<GeomTraits>::Col_4 Col_4;
public: public:
Triangle_quadric_calculator() { } Triangle_quadric_calculator() { }
@ -38,7 +39,7 @@ public:
const GeomTraits& gt) const const GeomTraits& gt) const
{ {
// @fixme "plane"? why not incident triangles? // @fixme "plane"? why not incident triangles?
return internal::construct_classic_plane_quadric_from_edge(he, tmesh, point_map, gt); return construct_classic_plane_quadric_from_edge(he, tmesh, point_map, gt);
} }
template <typename VertexPointMap> template <typename VertexPointMap>
@ -47,17 +48,19 @@ public:
const VertexPointMap point_map, const VertexPointMap point_map,
const GeomTraits& gt) const const GeomTraits& gt) const
{ {
return internal::construct_classic_triangle_quadric_from_face(f, tmesh, point_map, gt); return construct_classic_triangle_quadric_from_face(f, tmesh, point_map, gt);
} }
Col_4 construct_optimal_point(const Mat_4& quadric, Col_4 construct_optimal_point(const Mat_4& quadric,
const Col_4& p0, const Col_4& p0,
const Col_4& p1) const const Col_4& p1) const
{ {
return internal::construct_optimal_point_singular<GeomTraits>(quadric, p0, p1); return construct_optimal_point_singular<GeomTraits>(quadric, p0, p1);
} }
}; };
} // namespace internal
// use triangle quadrics for the faces, classical plane quadrics for the edges // use triangle quadrics for the faces, classical plane quadrics for the edges
// and optimize with a check for singular matrices // and optimize with a check for singular matrices
// //
@ -65,12 +68,12 @@ public:
template<typename TriangleMesh, typename GeomTraits> template<typename TriangleMesh, typename GeomTraits>
class GarlandHeckbert_triangle_policies class GarlandHeckbert_triangle_policies
: public internal::GarlandHeckbert_placement_base< : public internal::GarlandHeckbert_placement_base<
Triangle_quadric_calculator<TriangleMesh, GeomTraits>, TriangleMesh, GeomTraits>, internal::Triangle_quadric_calculator<TriangleMesh, GeomTraits>, TriangleMesh, GeomTraits>,
public internal::GarlandHeckbert_cost_base< public internal::GarlandHeckbert_cost_base<
Triangle_quadric_calculator<TriangleMesh, GeomTraits>, TriangleMesh, GeomTraits> internal::Triangle_quadric_calculator<TriangleMesh, GeomTraits>, TriangleMesh, GeomTraits>
{ {
public: public:
typedef Triangle_quadric_calculator<TriangleMesh, GeomTraits> Quadric_calculator; typedef internal::Triangle_quadric_calculator<TriangleMesh, GeomTraits> Quadric_calculator;
private: private:
typedef internal::GarlandHeckbert_placement_base< typedef internal::GarlandHeckbert_placement_base<