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 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<
|
||||||
|
|
|
||||||
|
|
@ -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:
|
||||||
|
|
|
||||||
|
|
@ -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:
|
||||||
|
|
|
||||||
|
|
@ -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<
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue