mirror of https://github.com/CGAL/cgal
Move GH calculators to internal namespace
This commit is contained in:
parent
1020a401c1
commit
56a3e64a16
|
|
@ -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<
|
||||
|
|
|
|||
|
|
@ -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:
|
||||
|
|
|
|||
|
|
@ -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:
|
||||
|
|
|
|||
|
|
@ -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<
|
||||
|
|
|
|||
Loading…
Reference in New Issue