fix scoped metric and class naming

This commit is contained in:
Lingjie Zhu 2017-11-15 17:24:41 +08:00
parent 9e4a7a98e2
commit 618891c53c
6 changed files with 92 additions and 90 deletions

View File

@ -16,8 +16,8 @@ typedef boost::property_map<Polyhedron, boost::vertex_point_t>::type VertexPoint
typedef CGAL::VSA::Mesh_approximation<Polyhedron, VertexPointMap> Mesh_approximation;
// L21 error metric
typedef Mesh_approximation::L21_error_metric Metric;
typedef Mesh_approximation::L21_proxy_fitting Proxy_fitting;
typedef Mesh_approximation::Error_metric Metric;
typedef Mesh_approximation::Proxy_fitting Proxy_fitting;
int main()
{

View File

@ -19,19 +19,19 @@ typedef Polyhedron::Facet_handle Facet_handle;
typedef Polyhedron::Halfedge_handle Halfedge_handle;
typedef Polyhedron::Facet_iterator Facet_iterator;
typedef boost::property_map<Polyhedron, boost::vertex_point_t>::type VertexPointMap;
typedef boost::associative_property_map<std::map<Facet_handle, FT> > FacetAreaMap;
typedef boost::associative_property_map<std::map<Facet_handle, Point> > FacetCenterMap;
typedef boost::property_map<Polyhedron, boost::vertex_point_t>::type Vertex_point_map;
typedef boost::associative_property_map<std::map<Facet_handle, FT> > Facet_area_map;
typedef boost::associative_property_map<std::map<Facet_handle, Point> > Facet_center_map;
// use point as proxy
typedef Point PointProxy; // TOFIX: CGAL capitalization -> Point_proxy (everywhere)
typedef Point Point_proxy;
// user-defined "compact" error metric
struct CompactMetric {
typedef PointProxy Proxy;
struct Compact_metric {
typedef Point_proxy Proxy;
// we keep a precomputed property map to speed up computations
CompactMetric(const FacetCenterMap &_center_pmap)
Compact_metric(const Facet_center_map &_center_pmap)
: center_pmap(_center_pmap) {}
// compute and return error from a facet to a proxy,
@ -42,15 +42,15 @@ struct CompactMetric {
CGAL::squared_distance(center_pmap[f], px))));
}
const FacetCenterMap center_pmap;
const Facet_center_map center_pmap;
};
// proxy fitting functor
struct PointProxyFitting {
typedef PointProxy Proxy;
struct Point_proxy_fitting {
typedef Point_proxy Proxy;
// we keep a precomputed property map to speed up computations
PointProxyFitting(const FacetCenterMap &_center_pmap, const FacetAreaMap &_area_pmap)
Point_proxy_fitting(const Facet_center_map &_center_pmap, const Facet_area_map &_area_pmap)
: center_pmap(_center_pmap), area_pmap(_area_pmap) {}
// template functor to compute a best-fit
@ -68,12 +68,12 @@ struct PointProxyFitting {
return CGAL::ORIGIN + center;
}
const FacetCenterMap center_pmap;
const FacetAreaMap area_pmap;
const Facet_center_map center_pmap;
const Facet_area_map area_pmap;
};
typedef CGAL::VSA::Mesh_approximation<Polyhedron, VertexPointMap,
CompactMetric, PointProxyFitting> Approximation;
typedef CGAL::VSA::Mesh_approximation<Polyhedron, Vertex_point_map,
Compact_metric, Point_proxy_fitting> Approximation;
int main()
{
@ -98,16 +98,16 @@ int main()
facet_areas.insert(std::pair<Facet_handle, FT>(fitr, area));
facet_centers.insert(std::pair<Facet_handle, Point>(fitr, barycenter));
}
FacetAreaMap area_pmap(facet_areas);
FacetCenterMap center_pmap(facet_centers);
Facet_area_map area_pmap(facet_areas);
Facet_center_map center_pmap(facet_centers);
// create compact metric approximation algorithm instance
Approximation approx(input,
get(boost::vertex_point, const_cast<Polyhedron &>(input)));
// construct metric and fitting functors
CompactMetric metric(center_pmap);
PointProxyFitting proxy_fitting(center_pmap, area_pmap);
Compact_metric metric(center_pmap);
Point_proxy_fitting proxy_fitting(center_pmap, area_pmap);
approx.set_metric(metric, proxy_fitting);
// approximation via 200 proxies and 30 iterations

View File

@ -57,39 +57,39 @@ namespace VSA {
*/
template <typename TriangleMesh,
typename VertexPointMap,
typename ErrorMetric_ = CGAL::Default,
typename ProxyFitting_ = CGAL::Default,
typename GeomTraits_ = CGAL::Default>
typename ErrorMetric = CGAL::Default,
typename ProxyFitting = CGAL::Default,
typename GeomTraits = CGAL::Default>
class Mesh_approximation {
// public typedefs
public:
// Default typdefs
// Default typedefs
/// Geometric trait type
typedef typename CGAL::Default::Get<
GeomTraits_,
GeomTraits,
typename Kernel_traits<
typename boost::property_traits<VertexPointMap>::value_type
>::Kernel >::type GeomTraits;
>::Kernel >::type Geom_traits;
/// ErrorMetric type
typedef typename CGAL::Default::Get<ErrorMetric_,
CGAL::L21Metric<TriangleMesh, VertexPointMap, false, GeomTraits> >::type ErrorMetric;
typedef typename CGAL::Default::Get<ErrorMetric,
CGAL::VSA::L21_metric<TriangleMesh, VertexPointMap, false, Geom_traits> >::type Error_metric;
/// ProxyFitting type
typedef typename CGAL::Default::Get<ProxyFitting_,
CGAL::L21ProxyFitting<TriangleMesh, VertexPointMap, GeomTraits> >::type ProxyFitting;
typedef typename CGAL::Default::Get<ProxyFitting,
CGAL::VSA::L21_proxy_fitting<TriangleMesh, VertexPointMap, Geom_traits> >::type Proxy_fitting;
/// Proxy type
typedef typename ErrorMetric::Proxy Proxy;
typedef typename Error_metric::Proxy Proxy;
// private typedefs and data member
private:
// GeomTraits typedefs
typedef typename GeomTraits::FT FT;
typedef typename GeomTraits::Point_3 Point_3;
typedef typename GeomTraits::Vector_3 Vector_3;
typedef typename GeomTraits::Plane_3 Plane_3;
typedef typename GeomTraits::Construct_vector_3 Construct_vector_3;
typedef typename GeomTraits::Construct_scaled_vector_3 Construct_scaled_vector_3;
typedef typename GeomTraits::Construct_sum_of_vectors_3 Construct_sum_of_vectors_3;
typedef typename GeomTraits::Compute_scalar_product_3 Compute_scalar_product_3;
// Geom_traits typedefs
typedef typename Geom_traits::FT FT;
typedef typename Geom_traits::Point_3 Point_3;
typedef typename Geom_traits::Vector_3 Vector_3;
typedef typename Geom_traits::Plane_3 Plane_3;
typedef typename Geom_traits::Construct_vector_3 Construct_vector_3;
typedef typename Geom_traits::Construct_scaled_vector_3 Construct_scaled_vector_3;
typedef typename Geom_traits::Construct_sum_of_vectors_3 Construct_sum_of_vectors_3;
typedef typename Geom_traits::Compute_scalar_product_3 Compute_scalar_product_3;
// graph_traits typedefs
typedef typename boost::graph_traits<TriangleMesh>::vertex_descriptor vertex_descriptor;
@ -216,9 +216,9 @@ private:
// The mesh vertex point map.
VertexPointMap point_pmap;
// The error metric.
const ErrorMetric *fit_error;
const Error_metric *fit_error;
// The proxy fitting functor.
const ProxyFitting *proxy_fitting;
const Proxy_fitting *proxy_fitting;
Construct_vector_3 vector_functor;
Construct_scaled_vector_3 scale_functor;
@ -255,7 +255,7 @@ public:
proxy_fitting(NULL),
fproxy_map(internal_fidx_map),
vanchor_map(internal_vidx_map) {
GeomTraits traits;
Geom_traits traits;
vector_functor = traits.construct_vector_3_object();
scale_functor = traits.construct_scaled_vector_3_object();
sum_functor = traits.construct_sum_of_vectors_3_object();
@ -275,7 +275,7 @@ public:
proxy_fitting(NULL),
fproxy_map(internal_fidx_map),
vanchor_map(internal_vidx_map) {
GeomTraits traits;
Geom_traits traits;
vector_functor = traits.construct_vector_3_object();
scale_functor = traits.construct_scaled_vector_3_object();
sum_functor = traits.construct_sum_of_vectors_3_object();
@ -299,8 +299,8 @@ public:
* @param _error_metric a `ErrorMetric` functor.
* @param _proxy_fitting a `ProxyFitting` functor.
*/
void set_metric(const ErrorMetric &_error_metric,
const ProxyFitting &_proxy_fitting) {
void set_metric(const Error_metric &_error_metric,
const Proxy_fitting &_proxy_fitting) {
fit_error = &_error_metric;
proxy_fitting = &_proxy_fitting;
}
@ -1783,7 +1783,7 @@ private:
Plane_3 fit_plane_pca(const FacetIterator &beg, const FacetIterator &end) {
CGAL_assertion(beg != end);
typedef typename GeomTraits::Triangle_3 Triangle_3;
typedef typename Geom_traits::Triangle_3 Triangle_3;
std::list<Triangle_3> tri_list;
for (FacetIterator fitr = beg; fitr != end; ++fitr) {
halfedge_descriptor he = halfedge(*fitr, *m_pmesh);

View File

@ -82,20 +82,20 @@ bool mesh_approximation(const TriangleMesh &tm_in,
using boost::get_param;
using boost::choose_param;
typedef typename GetGeomTraits<TriangleMesh, NamedParameters>::type GeomTraits;
typedef typename GeomTraits::FT FT;
typedef typename GetGeomTraits<TriangleMesh, NamedParameters>::type Geom_traits;
typedef typename Geom_traits::FT FT;
typedef typename GetVertexPointMap<TriangleMesh, NamedParameters>::type VPMap;
VPMap point_pmap = choose_param(get_param(np, internal_np::vertex_point),
get_property_map(vertex_point, const_cast<TriangleMesh &>(tm_in)));
typedef CGAL::VSA::Mesh_approximation<TriangleMesh, VPMap> VSAL21;
typedef typename VSAL21::ErrorMetric L21Metric;
typedef typename VSAL21::ProxyFitting L21ProxyFitting;
typedef typename VSAL21::Error_metric L21_metric;
typedef typename VSAL21::Proxy_fitting L21_proxy_fitting;
VSAL21 vsa_l21(tm_in, point_pmap);
L21Metric l21_metric(tm_in);
L21ProxyFitting l21_fitting(tm_in);
L21_metric l21_metric(tm_in);
L21_proxy_fitting l21_fitting(tm_in);
vsa_l21.set_metric(l21_metric, l21_fitting);
// default random initialization
@ -129,7 +129,7 @@ bool mesh_approximation(const TriangleMesh &tm_in,
get_param(np, internal_np::facet_proxy_map), internal_np::vsa_no_output);
get_proxy_map(vsa_l21, fproxymap);
typedef CGAL::Polyhedron_3<GeomTraits> PolyhedronSurface;
typedef CGAL::Polyhedron_3<Geom_traits> PolyhedronSurface;
PolyhedronSurface tmp_poly;
PolyhedronSurface * const tm_out = choose_param(get_param(np, internal_np::output_mesh), &tmp_poly);
FT split_criterion = choose_param(get_param(np, internal_np::chord_subdivide), FT(1));

View File

@ -61,20 +61,20 @@ void mesh_segmentation(const TriangleMesh &tm_in, const NamedParameters &np)
using boost::get_param;
using boost::choose_param;
typedef typename GetGeomTraits<TriangleMesh, NamedParameters>::type GeomTraits;
typedef typename GeomTraits::FT FT;
typedef typename GetGeomTraits<TriangleMesh, NamedParameters>::type Geom_traits;
typedef typename Geom_traits::FT FT;
typedef typename GetVertexPointMap<TriangleMesh, NamedParameters>::type VPMap;
VPMap point_pmap = choose_param(get_param(np, internal_np::vertex_point),
get_property_map(vertex_point, const_cast<TriangleMesh &>(tm_in)));
typedef CGAL::VSA::Mesh_approximation<TriangleMesh, VPMap> VSAL21;
typedef typename VSAL21::ErrorMetric L21Metric;
typedef typename VSAL21::ProxyFitting L21ProxyFitting;
typedef typename VSAL21::Error_metric L21_metric;
typedef typename VSAL21::Proxy_fitting L21_proxy_fitting;
VSAL21 vsa_l21(tm_in, point_pmap);
L21Metric l21_metric(tm_in);
L21ProxyFitting l21_fitting(tm_in);
L21_metric l21_metric(tm_in);
L21_proxy_fitting l21_fitting(tm_in);
vsa_l21.set_metric(l21_metric, l21_fitting);
// default random initialization

View File

@ -12,8 +12,9 @@
#include <map>
#include <list>
namespace CGAL
{
namespace CGAL {
namespace VSA {
/*!
* \ingroup PkgTSMA
* @brief Plane proxy class for the Variational Shape Approximation algorithm.
@ -26,7 +27,7 @@ namespace CGAL
* @tparam GeomTraits geometric traits
*/
template <typename GeomTraits>
class PlaneProxy
class Plane_proxy
{
typedef typename GeomTraits::Vector_3 Vector_3;
typedef typename GeomTraits::Plane_3 Plane_3;
@ -58,8 +59,8 @@ template <typename TriangleMesh,
= typename boost::property_map<TriangleMesh, boost::vertex_point_t>::type,
bool with_area_weighing = true,
typename GeomTraits = typename TriangleMesh::Traits,
typename PlaneProxy = CGAL::PlaneProxy<GeomTraits> >
class L21Metric
typename PlaneProxy = CGAL::VSA::Plane_proxy<GeomTraits> >
class L21_metric
{
typedef typename GeomTraits::FT FT;
typedef typename GeomTraits::Vector_3 Vector_3;
@ -79,7 +80,7 @@ public:
typedef PlaneProxy Proxy;
// constructor
L21Metric(const TriangleMesh &tm, const VertexPointMap &point_pmap)
L21_metric(const TriangleMesh &tm, const VertexPointMap &point_pmap)
: normal_pmap(facet_normals), area_pmap(facet_areas) {
GeomTraits traits;
scalar_product_functor = traits.compute_scalar_product_3_object();
@ -120,7 +121,7 @@ template <typename TriangleMesh,
bool with_area_weighing,
typename GeomTraits,
typename PlaneProxy>
class L21Metric<TriangleMesh,
class L21_metric<TriangleMesh,
typename boost::property_map<TriangleMesh, boost::vertex_point_t>::type,
with_area_weighing,
GeomTraits,
@ -145,7 +146,7 @@ public:
typedef PlaneProxy Proxy;
// constructor
L21Metric(const TriangleMesh &tm)
L21_metric(const TriangleMesh &tm)
: normal_pmap(facet_normals), area_pmap(facet_areas) {
GeomTraits traits;
scalar_product_functor = traits.compute_scalar_product_3_object();
@ -187,7 +188,7 @@ template <typename TriangleMesh,
typename VertexPointMap,
typename GeomTraits,
typename PlaneProxy>
class L21Metric<TriangleMesh,
class L21_metric<TriangleMesh,
VertexPointMap,
false,
GeomTraits,
@ -210,7 +211,7 @@ public:
typedef PlaneProxy Proxy;
// constructor
L21Metric(const TriangleMesh &tm, const VertexPointMap &point_pmap)
L21_metric(const TriangleMesh &tm, const VertexPointMap &point_pmap)
: normal_pmap(facet_normals) {
GeomTraits traits;
scalar_product_functor = traits.compute_scalar_product_3_object();
@ -247,7 +248,7 @@ private:
template <typename TriangleMesh,
typename GeomTraits,
typename PlaneProxy>
class L21Metric<TriangleMesh,
class L21_metric<TriangleMesh,
typename boost::property_map<TriangleMesh, boost::vertex_point_t>::type,
false,
GeomTraits,
@ -271,7 +272,7 @@ public:
typedef PlaneProxy Proxy;
// constructor
L21Metric(const TriangleMesh &tm)
L21_metric(const TriangleMesh &tm)
: normal_pmap(facet_normals) {
GeomTraits traits;
scalar_product_functor = traits.compute_scalar_product_3_object();
@ -322,8 +323,8 @@ template <typename TriangleMesh,
typename VertexPointMap
= typename boost::property_map<TriangleMesh, boost::vertex_point_t>::type,
typename GeomTraits = typename TriangleMesh::Traits,
typename PlaneProxy = CGAL::PlaneProxy<GeomTraits> >
class L21ProxyFitting
typename PlaneProxy = CGAL::VSA::Plane_proxy<GeomTraits> >
class L21_proxy_fitting
{
typedef typename GeomTraits::FT FT;
typedef typename GeomTraits::Vector_3 Vector_3;
@ -342,7 +343,7 @@ public:
typedef PlaneProxy Proxy;
// constructor.
L21ProxyFitting(const TriangleMesh &tm, const VertexPointMap &point_pmap)
L21_proxy_fitting(const TriangleMesh &tm, const VertexPointMap &point_pmap)
: normal_pmap(facet_normals), area_pmap(facet_areas) {
GeomTraits traits;
sum_functor = traits.construct_sum_of_vectors_3_object();
@ -395,7 +396,7 @@ private:
template <typename TriangleMesh,
typename GeomTraits,
typename PlaneProxy>
class L21ProxyFitting<TriangleMesh,
class L21_proxy_fitting<TriangleMesh,
typename boost::property_map<TriangleMesh, boost::vertex_point_t>::type,
GeomTraits,
PlaneProxy>
@ -418,7 +419,7 @@ public:
typedef PlaneProxy Proxy;
// constructor.
L21ProxyFitting(const TriangleMesh &tm)
L21_proxy_fitting(const TriangleMesh &tm)
: normal_pmap(facet_normals), area_pmap(facet_areas) {
GeomTraits traits;
sum_functor = traits.construct_sum_of_vectors_3_object();
@ -486,8 +487,8 @@ template <typename TriangleMesh,
typename VertexPointMap
= typename boost::property_map<TriangleMesh, boost::vertex_point_t>::type,
typename GeomTraits = typename TriangleMesh::Traits,
typename PlaneProxy = CGAL::PlaneProxy<GeomTraits> >
class L2Metric
typename PlaneProxy = CGAL::VSA::Plane_proxy<GeomTraits> >
class L2_metric
{
typedef typename GeomTraits::FT FT;
typedef typename GeomTraits::Point_3 Point_3;
@ -502,7 +503,7 @@ public:
typedef PlaneProxy Proxy;
// constructor
L2Metric(const TriangleMesh &tm, const VertexPointMap &_point_pmap)
L2_metric(const TriangleMesh &tm, const VertexPointMap &_point_pmap)
: mesh(&tm), area_pmap(facet_areas), point_pmap(_point_pmap) {
BOOST_FOREACH(face_descriptor f, faces(tm)) {
const halfedge_descriptor he = halfedge(f, tm);
@ -515,7 +516,7 @@ public:
}
// returns l2 fitting error from facet f to proxy px.
FT operator()(const face_descriptor &f, const PlaneProxy &px) const {
FT operator()(const face_descriptor &f, const Proxy &px) const {
halfedge_descriptor he = halfedge(f, *mesh);
const Point_3 &p0 = point_pmap[source(he, *mesh)];
const Point_3 &p1 = point_pmap[target(he, *mesh)];
@ -541,7 +542,7 @@ private:
template <typename TriangleMesh,
typename GeomTraits,
typename PlaneProxy>
class L2Metric<TriangleMesh,
class L2_metric<TriangleMesh,
typename boost::property_map<TriangleMesh, boost::vertex_point_t>::type,
GeomTraits,
PlaneProxy>
@ -560,7 +561,7 @@ public:
typedef PlaneProxy Proxy;
// constructor
L2Metric(const TriangleMesh &tm)
L2_metric(const TriangleMesh &tm)
: mesh(&tm), area_pmap(facet_areas),
point_pmap(get(boost::vertex_point, const_cast<TriangleMesh &>(tm))) {
BOOST_FOREACH(face_descriptor f, faces(tm)) {
@ -574,7 +575,7 @@ public:
}
// returns l2 fitting error from facet f to proxy px.
FT operator()(const face_descriptor &f, const PlaneProxy &px) const {
FT operator()(const face_descriptor &f, const Proxy &px) const {
halfedge_descriptor he = halfedge(f, *mesh);
const Point_3 &p0 = point_pmap[source(he, *mesh)];
const Point_3 &p1 = point_pmap[target(he, *mesh)];
@ -615,8 +616,8 @@ template <typename TriangleMesh,
typename VertexPointMap
= typename boost::property_map<TriangleMesh, boost::vertex_point_t>::type,
typename GeomTraits = typename TriangleMesh::Traits,
typename PlaneProxy = CGAL::PlaneProxy<GeomTraits> >
class L2ProxyFitting
typename PlaneProxy = CGAL::VSA::Plane_proxy<GeomTraits> >
class L2_proxy_fitting
{
typedef typename GeomTraits::Point_3 Point_3;
typedef typename GeomTraits::Triangle_3 Triangle_3;
@ -627,7 +628,7 @@ public:
typedef PlaneProxy Proxy;
// construct L2 proxy fitting functor from a triangle mesh and the vertex point map.
L2ProxyFitting(const TriangleMesh &_mesh, const VertexPointMap &_point_pmap)
L2_proxy_fitting(const TriangleMesh &_mesh, const VertexPointMap &_point_pmap)
: mesh(&_mesh), point_pmap(_point_pmap) {}
// returns proxy fitted from range of facets.
@ -664,7 +665,7 @@ private:
template <typename TriangleMesh,
typename GeomTraits,
typename PlaneProxy>
class L2ProxyFitting<TriangleMesh,
class L2_proxy_fitting<TriangleMesh,
typename boost::property_map<TriangleMesh, boost::vertex_point_t>::type,
GeomTraits,
PlaneProxy>
@ -681,7 +682,7 @@ public:
typedef PlaneProxy Proxy;
// construct L2 proxy fitting functor from a triangle mesh.
L2ProxyFitting(const TriangleMesh &_mesh)
L2_proxy_fitting(const TriangleMesh &_mesh)
: mesh(&_mesh),
point_pmap(get(boost::vertex_point, const_cast<TriangleMesh &>(_mesh))) {}
@ -715,6 +716,7 @@ private:
const VertexPointMap point_pmap;
};
} // end namespace VSA
} // end namespace CGAL
#endif // CGAL_SURFACE_MESH_APPROXIMATION_VSA_METRICS_H