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 Surface_mesh_simplification {
namespace internal {
template <typename TriangleMesh, typename GeomTraits>
class Plane_quadric_calculator
{
typedef typename internal::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>::Mat_4 Mat_4;
typedef typename GarlandHeckbert_matrix_types<GeomTraits>::Col_4 Col_4;
public:
Plane_quadric_calculator() { }
@ -37,7 +38,7 @@ public:
const VertexPointMap point_map,
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>
@ -46,7 +47,7 @@ public:
const VertexPointMap point_map,
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?
@ -73,19 +74,21 @@ public:
const Col_4& p0,
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>
class GarlandHeckbert_plane_policies
: 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<
Plane_quadric_calculator<TriangleMesh, GeomTraits>, TriangleMesh, GeomTraits>
internal::Plane_quadric_calculator<TriangleMesh, GeomTraits>, TriangleMesh, GeomTraits>
{
public:
typedef Plane_quadric_calculator<TriangleMesh, GeomTraits> Quadric_calculator;
typedef internal::Plane_quadric_calculator<TriangleMesh, GeomTraits> Quadric_calculator;
private:
typedef internal::GarlandHeckbert_placement_base<

View File

@ -27,6 +27,7 @@
namespace CGAL {
namespace Surface_mesh_simplification {
namespace internal {
template <typename TriangleMesh, typename GeomTraits, typename FaceVarianceMap>
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 typename Default::Get<FaceVarianceMap, Default_FVM>::type Face_variance_map;
typedef typename internal::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>::Mat_4 Mat_4;
typedef typename GarlandHeckbert_matrix_types<GeomTraits>::Col_4 Col_4;
private:
// @fixme check the magic values
@ -83,13 +84,13 @@ public:
typedef typename GeomTraits::Point_3 Point_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));
FT n_variance, p_variance;
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>
@ -102,13 +103,13 @@ public:
typedef typename GeomTraits::Point_3 Point_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));
FT n_variance, p_variance;
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,
@ -116,10 +117,12 @@ public:
const Col_4& /*p1*/) const
{
// @fixme check this
return internal::construct_optimal_point_invertible<GeomTraits>(quadric);
return construct_optimal_point_invertible<GeomTraits>(quadric);
}
};
} // namespace internal
// Implements probabilistic plane quadrics,
// optionally takes a face variance map giving a per-face variance
template<typename TriangleMesh,
@ -127,14 +130,14 @@ template<typename TriangleMesh,
typename FaceVarianceMap = CGAL::Default>
class GarlandHeckbert_probabilistic_plane_policies
: public internal::GarlandHeckbert_placement_base<
Probabilistic_plane_quadric_calculator<TriangleMesh, GeomTraits, FaceVarianceMap>,
internal::Probabilistic_plane_quadric_calculator<TriangleMesh, GeomTraits, FaceVarianceMap>,
TriangleMesh, GeomTraits>,
public internal::GarlandHeckbert_cost_base<
Probabilistic_plane_quadric_calculator<TriangleMesh, GeomTraits, FaceVarianceMap>,
internal::Probabilistic_plane_quadric_calculator<TriangleMesh, GeomTraits, FaceVarianceMap>,
TriangleMesh, GeomTraits>
{
public:
typedef Probabilistic_plane_quadric_calculator<
typedef internal::Probabilistic_plane_quadric_calculator<
TriangleMesh, GeomTraits, FaceVarianceMap> Quadric_calculator;
private:

View File

@ -24,6 +24,7 @@
namespace CGAL {
namespace Surface_mesh_simplification {
namespace internal {
template <typename TriangleMesh, typename GeomTraits, typename FaceVarianceMap>
class Probabilistic_triangle_quadric_calculator
@ -37,8 +38,8 @@ class Probabilistic_triangle_quadric_calculator
typedef Constant_property_map<face_descriptor, FT> Default_FVM;
typedef typename Default::Get<FaceVarianceMap, Default_FVM>::type Face_variance_map;
typedef typename internal::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>::Mat_4 Mat_4;
typedef typename GarlandHeckbert_matrix_types<GeomTraits>::Col_4 Col_4;
private:
// same meaning as for probabilistic plane quadrics
@ -65,7 +66,7 @@ public:
// parameters are constants defined for this class
FT 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
m_face_variance_map = Default_FVM { variance };
@ -81,14 +82,14 @@ public:
const GeomTraits& gt) const
{
// 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 FT variance = get(m_face_variance_map, face(he, tmesh));
// @fixme plane?
return internal::construct_prob_plane_quadric_from_normal(normal, p, gt, variance,
position_variance_factor * variance);
return construct_prob_plane_quadric_from_normal(normal, p, gt, variance,
position_variance_factor * variance);
}
template<typename VertexPointMap>
@ -99,16 +100,18 @@ public:
{
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
{
// @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
// analogously to probabilistic plane quadrics
template<typename TriangleMesh,
@ -116,14 +119,14 @@ template<typename TriangleMesh,
typename FaceVarianceMap = CGAL::Default>
class GarlandHeckbert_probabilistic_triangle_policies
: public internal::GarlandHeckbert_placement_base<
Probabilistic_triangle_quadric_calculator<TriangleMesh, GeomTraits, FaceVarianceMap>,
internal::Probabilistic_triangle_quadric_calculator<TriangleMesh, GeomTraits, FaceVarianceMap>,
TriangleMesh, GeomTraits>,
public internal::GarlandHeckbert_cost_base<
Probabilistic_triangle_quadric_calculator<TriangleMesh, GeomTraits, FaceVarianceMap>,
internal::Probabilistic_triangle_quadric_calculator<TriangleMesh, GeomTraits, FaceVarianceMap>,
TriangleMesh, GeomTraits>
{
public:
typedef Probabilistic_triangle_quadric_calculator<
typedef internal::Probabilistic_triangle_quadric_calculator<
TriangleMesh, GeomTraits, FaceVarianceMap> Quadric_calculator;
private:

View File

@ -21,12 +21,13 @@
namespace CGAL {
namespace Surface_mesh_simplification {
namespace internal {
template <typename TriangleMesh, typename GeomTraits>
class Triangle_quadric_calculator
{
typedef typename internal::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>::Mat_4 Mat_4;
typedef typename GarlandHeckbert_matrix_types<GeomTraits>::Col_4 Col_4;
public:
Triangle_quadric_calculator() { }
@ -38,7 +39,7 @@ public:
const GeomTraits& gt) const
{
// @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>
@ -47,17 +48,19 @@ public:
const VertexPointMap point_map,
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,
const Col_4& p0,
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
// and optimize with a check for singular matrices
//
@ -65,12 +68,12 @@ public:
template<typename TriangleMesh, typename GeomTraits>
class GarlandHeckbert_triangle_policies
: 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<
Triangle_quadric_calculator<TriangleMesh, GeomTraits>, TriangleMesh, GeomTraits>
internal::Triangle_quadric_calculator<TriangleMesh, GeomTraits>, TriangleMesh, GeomTraits>
{
public:
typedef Triangle_quadric_calculator<TriangleMesh, GeomTraits> Quadric_calculator;
typedef internal::Triangle_quadric_calculator<TriangleMesh, GeomTraits> Quadric_calculator;
private:
typedef internal::GarlandHeckbert_placement_base<