mirror of https://github.com/CGAL/cgal
remove requirements of having get_reference_point and get_datum in the traits
This commit is contained in:
parent
567e637484
commit
21283eab97
|
|
@ -51,6 +51,7 @@ AABB_tree/include/CGAL/AABB_polyhedron_triangle_primitive.h -text
|
||||||
AABB_tree/include/CGAL/AABB_primitive.h -text
|
AABB_tree/include/CGAL/AABB_primitive.h -text
|
||||||
AABB_tree/include/CGAL/AABB_traits.h -text
|
AABB_tree/include/CGAL/AABB_traits.h -text
|
||||||
AABB_tree/include/CGAL/internal/AABB_tree/Has_nested_type_Shared_data.h -text
|
AABB_tree/include/CGAL/internal/AABB_tree/Has_nested_type_Shared_data.h -text
|
||||||
|
AABB_tree/include/CGAL/internal/AABB_tree/Primitive_helper.h -text
|
||||||
AABB_tree/test/AABB_tree/AABB_test_util.h -text
|
AABB_tree/test/AABB_tree/AABB_test_util.h -text
|
||||||
AABB_tree/test/AABB_tree/aabb_correctness_triangle_test.cpp -text
|
AABB_tree/test/AABB_tree/aabb_correctness_triangle_test.cpp -text
|
||||||
AABB_tree/test/AABB_tree/aabb_distance_edge_test.cpp -text
|
AABB_tree/test/AABB_tree/aabb_distance_edge_test.cpp -text
|
||||||
|
|
|
||||||
|
|
@ -18,7 +18,7 @@ The concept is similar to \ccc{AABBPrimitive} except that some data stored outsi
|
||||||
|
|
||||||
\ccNestedType{Datum_reference}{The type of a reference to an element of type \ccc{Datum} returned by the \ccc{datum(const Shared_data&)} function.}
|
\ccNestedType{Datum_reference}{The type of a reference to an element of type \ccc{Datum} returned by the \ccc{datum(const Shared_data&)} function.}
|
||||||
|
|
||||||
\ccNestedType{Shared_data}{An arbitrary type.}
|
\ccNestedType{Shared_data}{An arbitrary type default constructible.}
|
||||||
|
|
||||||
% variable name
|
% variable name
|
||||||
\ccCreationVariable{primitive}
|
\ccCreationVariable{primitive}
|
||||||
|
|
|
||||||
|
|
@ -94,18 +94,15 @@ for which the class \ccc{AABB_tree<AT>} may receive a distance query.
|
||||||
|
|
||||||
\ccMethod{Closest_point closest_point_object();}{Returns the closest point constructor.}
|
\ccMethod{Closest_point closest_point_object();}{Returns the closest point constructor.}
|
||||||
|
|
||||||
\ccMethod{typename Primitive::Point_reference get_reference_point(const Primitive& p);}
|
|
||||||
{Returns the reference point of \ccc{p}. The \ccc{AABB_tree} will access the reference point of a primitive only through this function.}
|
|
||||||
|
|
||||||
\ccMethod{typename Primitive::Datum_reference get_datum(const Primitive& p);}
|
|
||||||
{Returns the datum of \ccc{p}. The \ccc{AABB_tree} will access the datum of a primitive only through this function.}
|
|
||||||
|
|
||||||
In addition, if \ccc{Primitive} is a model of the concept \ccc{AABBPrimitiveWithSharedData}, the following function is part of the concept:
|
In addition, if \ccc{Primitive} is a model of the concept \ccc{AABBPrimitiveWithSharedData}, the following function is part of the concept:
|
||||||
|
|
||||||
\ccMethod{template <class ... T> void set_shared_data(T ... t);}
|
\ccMethod{template <class ... T> void set_shared_data(T ... t);}
|
||||||
{the signature of that function must be the same as the static function \ccc{Primitive::construct_shared_data}. The type \ccc{Primitive} expects that the data constructed
|
{the signature of that function must be the same as the static function \ccc{Primitive::construct_shared_data}. The type \ccc{Primitive} expects that the data constructed
|
||||||
by a call to \ccc{Primitive::construct_shared_data(t...)} is the one given back when accessing the reference point and the datum of a primitive.}
|
by a call to \ccc{Primitive::construct_shared_data(t...)} is the one given back when accessing the reference point and the datum of a primitive.}
|
||||||
|
|
||||||
|
\ccMethod{const Primitive::Shared_data& shared_data() const;}{Returns the shared data of the primitive constructed after a call to \ccc{set_shared_data}. If no call to \ccc{set_shared_data}
|
||||||
|
has been done, Primitive::Shared_data() is returned.}
|
||||||
|
|
||||||
\ccHasModels
|
\ccHasModels
|
||||||
\ccc{AABB_traits<GeomTraits,Primitive>}.
|
\ccc{AABB_traits<GeomTraits,Primitive>}.
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -94,11 +94,13 @@ class AABB_primitive<Id, ObjectPropertyMap, PointPropertyMap,Tag_false,Tag_true>
|
||||||
typename boost::property_traits< ObjectPropertyMap >::value_type m_datum;
|
typename boost::property_traits< ObjectPropertyMap >::value_type m_datum;
|
||||||
PointPropertyMap m_pt_pmap;
|
PointPropertyMap m_pt_pmap;
|
||||||
public:
|
public:
|
||||||
|
typedef const typename Base::Datum& Datum_reference;
|
||||||
|
|
||||||
AABB_primitive(Id id, ObjectPropertyMap obj_pmap=ObjectPropertyMap(), PointPropertyMap pt_pmap=PointPropertyMap())
|
AABB_primitive(Id id, ObjectPropertyMap obj_pmap=ObjectPropertyMap(), PointPropertyMap pt_pmap=PointPropertyMap())
|
||||||
: Base(id), m_datum( get(obj_pmap,id) ), m_pt_pmap(pt_pmap){}
|
: Base(id), m_datum( get(obj_pmap,id) ), m_pt_pmap(pt_pmap){}
|
||||||
|
|
||||||
const typename Base::Datum&
|
|
||||||
datum() const { return m_datum; }
|
Datum_reference datum() const { return m_datum; }
|
||||||
|
|
||||||
typename Base::Point_reference
|
typename Base::Point_reference
|
||||||
reference_point() const { return get(m_pt_pmap,this->m_id); }
|
reference_point() const { return get(m_pt_pmap,this->m_id); }
|
||||||
|
|
@ -139,15 +141,15 @@ class AABB_primitive<Id, ObjectPropertyMap, PointPropertyMap,Tag_true,Tag_true>
|
||||||
typename boost::property_traits< ObjectPropertyMap >::value_type m_datum;
|
typename boost::property_traits< ObjectPropertyMap >::value_type m_datum;
|
||||||
public:
|
public:
|
||||||
typedef PointPropertyMap Shared_data;
|
typedef PointPropertyMap Shared_data;
|
||||||
|
typedef const typename Base::Datum& Datum_reference;
|
||||||
|
|
||||||
AABB_primitive(Id id, ObjectPropertyMap obj_pmap=ObjectPropertyMap(), PointPropertyMap=PointPropertyMap())
|
AABB_primitive(Id id, ObjectPropertyMap obj_pmap=ObjectPropertyMap(), PointPropertyMap=PointPropertyMap())
|
||||||
: Base(id), m_datum( get(obj_pmap,id) ) {}
|
: Base(id), m_datum( get(obj_pmap,id) ) {}
|
||||||
|
|
||||||
const typename Base::Datum&
|
Datum_reference datum(Shared_data) const { return m_datum; }
|
||||||
datum(Shared_data) const { return m_datum; }
|
|
||||||
|
|
||||||
typename Base::Point_reference
|
typename Base::Point_reference
|
||||||
reference_point(Shared_data data) const { return get(data,this->m_id); }
|
reference_point(const Shared_data& data) const { return get(data,this->m_id); }
|
||||||
|
|
||||||
static Shared_data construct_shared_data(ObjectPropertyMap, PointPropertyMap pt) {return pt;}
|
static Shared_data construct_shared_data(ObjectPropertyMap, PointPropertyMap pt) {return pt;}
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -29,8 +29,8 @@
|
||||||
#include <CGAL/Bbox_3.h>
|
#include <CGAL/Bbox_3.h>
|
||||||
#include <CGAL/AABB_intersections.h>
|
#include <CGAL/AABB_intersections.h>
|
||||||
#include <CGAL/internal/AABB_tree/Has_nested_type_Shared_data.h>
|
#include <CGAL/internal/AABB_tree/Has_nested_type_Shared_data.h>
|
||||||
|
#include <CGAL/internal/AABB_tree/Primitive_helper.h>
|
||||||
#include <boost/optional.hpp>
|
#include <boost/optional.hpp>
|
||||||
#include <boost/mpl/has_xxx.hpp>
|
|
||||||
#include <boost/bind.hpp>
|
#include <boost/bind.hpp>
|
||||||
|
|
||||||
namespace CGAL {
|
namespace CGAL {
|
||||||
|
|
@ -38,34 +38,17 @@ namespace CGAL {
|
||||||
|
|
||||||
namespace internal{
|
namespace internal{
|
||||||
|
|
||||||
//for backward compatibility (if auto is available, use it)
|
|
||||||
BOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF(Has_nested_type_Datum_reference,Datum_reference,false)
|
|
||||||
BOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF(Has_nested_type_Point_reference,Point_reference,false)
|
|
||||||
|
|
||||||
template<class Primitive,bool has_nested_type=Has_nested_type_Datum_reference<Primitive>::value>
|
|
||||||
struct Datum_result_type{ typedef typename Primitive::Datum_reference type; };
|
|
||||||
|
|
||||||
template<class Primitive>
|
|
||||||
struct Datum_result_type<Primitive,false>{ typedef typename Primitive::Datum type; };
|
|
||||||
|
|
||||||
template<class Primitive,bool has_nested_type=Has_nested_type_Point_reference<Primitive>::value>
|
|
||||||
struct Point_result_type{ typedef typename Primitive::Point_reference type; };
|
|
||||||
|
|
||||||
template<class Primitive>
|
|
||||||
struct Point_result_type<Primitive,false>{ typedef typename Primitive::Point type; };
|
|
||||||
|
|
||||||
//helper controlling whether extra data should be stored in the AABB_tree traits class
|
//helper controlling whether extra data should be stored in the AABB_tree traits class
|
||||||
template <class Primitive, bool has_shared_data=Has_nested_type_Shared_data<Primitive>::value>
|
template <class Primitive, bool has_shared_data=Has_nested_type_Shared_data<Primitive>::value>
|
||||||
struct Primitive_helper;
|
struct AABB_traits_base;
|
||||||
|
|
||||||
template <class Primitive>
|
template <class Primitive>
|
||||||
struct Primitive_helper<Primitive,false>{
|
struct AABB_traits_base<Primitive,false>{};
|
||||||
typename Datum_result_type<Primitive>::type get_datum(const Primitive& p) const {return p.datum();}
|
|
||||||
typename Point_result_type<Primitive>::type get_reference_point(const Primitive& p) const {return p.reference_point();}
|
|
||||||
};
|
|
||||||
|
|
||||||
template <class Primitive>
|
template <class Primitive>
|
||||||
struct Primitive_helper<Primitive,true>{
|
struct AABB_traits_base<Primitive,true>{
|
||||||
typename Primitive::Shared_data m_primitive_data;
|
typename Primitive::Shared_data m_primitive_data;
|
||||||
|
|
||||||
#ifndef CGAL_CFG_NO_CPP0X_VARIADIC_TEMPLATES
|
#ifndef CGAL_CFG_NO_CPP0X_VARIADIC_TEMPLATES
|
||||||
|
|
@ -99,9 +82,7 @@ struct Primitive_helper<Primitive,true>{
|
||||||
m_primitive_data=PrimitiveType::construct_shared_data(t1,t2,t3,t4,t5);
|
m_primitive_data=PrimitiveType::construct_shared_data(t1,t2,t3,t4,t5);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
const typename Primitive::Shared_data& shared_data() const {return m_primitive_data;}
|
||||||
typename Datum_result_type<Primitive>::type get_datum(const Primitive& p) const {return p.datum(m_primitive_data);}
|
|
||||||
typename Point_result_type<Primitive>::type get_reference_point(const Primitive& p) const {return p.reference_point(m_primitive_data);}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
@ -113,7 +94,7 @@ struct Primitive_helper<Primitive,true>{
|
||||||
*/
|
*/
|
||||||
template<typename GeomTraits, typename AABBPrimitive>
|
template<typename GeomTraits, typename AABBPrimitive>
|
||||||
class AABB_traits:
|
class AABB_traits:
|
||||||
public internal::Primitive_helper<AABBPrimitive>
|
public internal::AABB_traits_base<AABBPrimitive>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
typedef AABB_traits<GeomTraits, AABBPrimitive> AT;
|
typedef AABB_traits<GeomTraits, AABBPrimitive> AT;
|
||||||
|
|
@ -239,7 +220,7 @@ public:
|
||||||
template<typename Query>
|
template<typename Query>
|
||||||
bool operator()(const Query& q, const Primitive& pr) const
|
bool operator()(const Query& q, const Primitive& pr) const
|
||||||
{
|
{
|
||||||
return GeomTraits().do_intersect_3_object()(q, m_traits.get_datum(pr));
|
return GeomTraits().do_intersect_3_object()(q, internal::Primitive_helper<AT>::get_datum(pr,m_traits));
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -257,7 +238,7 @@ public:
|
||||||
{
|
{
|
||||||
typedef boost::optional<Object_and_primitive_id> Intersection;
|
typedef boost::optional<Object_and_primitive_id> Intersection;
|
||||||
|
|
||||||
CGAL::Object object = GeomTraits().intersect_3_object()(m_traits.get_datum(primitive),query);
|
CGAL::Object object = GeomTraits().intersect_3_object()(internal::Primitive_helper<AT>::get_datum(primitive,m_traits),query);
|
||||||
if ( object.empty() )
|
if ( object.empty() )
|
||||||
return Intersection();
|
return Intersection();
|
||||||
else
|
else
|
||||||
|
|
@ -280,7 +261,7 @@ public:
|
||||||
|
|
||||||
Point operator()(const Point& p, const Primitive& pr, const Point& bound) const
|
Point operator()(const Point& p, const Primitive& pr, const Point& bound) const
|
||||||
{
|
{
|
||||||
return CGAL::nearest_point_3(p, m_traits.get_datum(pr), bound);
|
return CGAL::nearest_point_3(p, internal::Primitive_helper<AT>::get_datum(pr,m_traits), bound);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -326,7 +307,7 @@ private:
|
||||||
static Bounding_box compute_bbox (const Primitive& pr,
|
static Bounding_box compute_bbox (const Primitive& pr,
|
||||||
const AABB_traits<GeomTraits,AABBPrimitive>& traits)
|
const AABB_traits<GeomTraits,AABBPrimitive>& traits)
|
||||||
{
|
{
|
||||||
return traits.get_datum(pr).bbox();
|
return internal::Primitive_helper<AT>::get_datum(pr,traits).bbox();
|
||||||
}
|
}
|
||||||
|
|
||||||
typedef enum { CGAL_AXIS_X = 0,
|
typedef enum { CGAL_AXIS_X = 0,
|
||||||
|
|
@ -336,11 +317,11 @@ private:
|
||||||
static Axis longest_axis(const Bounding_box& bbox);
|
static Axis longest_axis(const Bounding_box& bbox);
|
||||||
/// Comparison functions
|
/// Comparison functions
|
||||||
static bool less_x(const Primitive& pr1, const Primitive& pr2,const AABB_traits<GeomTraits,AABBPrimitive>& traits)
|
static bool less_x(const Primitive& pr1, const Primitive& pr2,const AABB_traits<GeomTraits,AABBPrimitive>& traits)
|
||||||
{ return traits.get_reference_point(pr1).x() < traits.get_reference_point(pr2).x(); }
|
{ return internal::Primitive_helper<AT>::get_reference_point(pr1,traits).x() < internal::Primitive_helper<AT>::get_reference_point(pr2,traits).x(); }
|
||||||
static bool less_y(const Primitive& pr1, const Primitive& pr2,const AABB_traits<GeomTraits,AABBPrimitive>& traits)
|
static bool less_y(const Primitive& pr1, const Primitive& pr2,const AABB_traits<GeomTraits,AABBPrimitive>& traits)
|
||||||
{ return traits.get_reference_point(pr1).y() < traits.get_reference_point(pr2).y(); }
|
{ return internal::Primitive_helper<AT>::get_reference_point(pr1,traits).y() < internal::Primitive_helper<AT>::get_reference_point(pr2,traits).y(); }
|
||||||
static bool less_z(const Primitive& pr1, const Primitive& pr2,const AABB_traits<GeomTraits,AABBPrimitive>& traits)
|
static bool less_z(const Primitive& pr1, const Primitive& pr2,const AABB_traits<GeomTraits,AABBPrimitive>& traits)
|
||||||
{ return traits.get_reference_point(pr1).z() < traits.get_reference_point(pr2).z(); }
|
{ return internal::Primitive_helper<AT>::get_reference_point(pr1,traits).z() < internal::Primitive_helper<AT>::get_reference_point(pr2,traits).z(); }
|
||||||
|
|
||||||
}; // end class AABB_traits
|
}; // end class AABB_traits
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -27,6 +27,7 @@
|
||||||
#include <CGAL/internal/AABB_tree/AABB_node.h>
|
#include <CGAL/internal/AABB_tree/AABB_node.h>
|
||||||
#include <CGAL/internal/AABB_tree/AABB_search_tree.h>
|
#include <CGAL/internal/AABB_tree/AABB_search_tree.h>
|
||||||
#include <CGAL/internal/AABB_tree/Has_nested_type_Shared_data.h>
|
#include <CGAL/internal/AABB_tree/Has_nested_type_Shared_data.h>
|
||||||
|
#include <CGAL/internal/AABB_tree/Primitive_helper.h>
|
||||||
#include <boost/optional.hpp>
|
#include <boost/optional.hpp>
|
||||||
|
|
||||||
#ifdef CGAL_HAS_THREADS
|
#ifdef CGAL_HAS_THREADS
|
||||||
|
|
@ -342,7 +343,9 @@ public:
|
||||||
Point_and_primitive_id any_reference_point_and_id() const
|
Point_and_primitive_id any_reference_point_and_id() const
|
||||||
{
|
{
|
||||||
CGAL_assertion(!empty());
|
CGAL_assertion(!empty());
|
||||||
return Point_and_primitive_id(m_traits.get_reference_point(m_primitives[0]), m_primitives[0].id());
|
return Point_and_primitive_id(
|
||||||
|
internal::Primitive_helper<AABB_traits>::get_reference_point(m_primitives[0],m_traits), m_primitives[0].id()
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
@ -811,7 +814,11 @@ public:
|
||||||
points.reserve(m_primitives.size());
|
points.reserve(m_primitives.size());
|
||||||
typename Primitives::const_iterator it;
|
typename Primitives::const_iterator it;
|
||||||
for(it = m_primitives.begin(); it != m_primitives.end(); ++it)
|
for(it = m_primitives.begin(); it != m_primitives.end(); ++it)
|
||||||
points.push_back(Point_and_primitive_id(m_traits.get_reference_point(*it), it->id()));
|
points.push_back(
|
||||||
|
Point_and_primitive_id(
|
||||||
|
internal::Primitive_helper<AABB_traits>::get_reference_point(*it,m_traits), it->id()
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
// clears current KD tree
|
// clears current KD tree
|
||||||
clear_search_tree();
|
clear_search_tree();
|
||||||
|
|
|
||||||
|
|
@ -70,7 +70,7 @@ public:
|
||||||
// constructors
|
// constructors
|
||||||
AABB_triangle_primitive(Iterator it) : Base(it){}
|
AABB_triangle_primitive(Iterator it) : Base(it){}
|
||||||
|
|
||||||
static typename Base::Shared_data construct_primitive_data() {return typename Base::Shared_data();}
|
static typename Base::Shared_data construct_shared_data() {return typename Base::Shared_data();}
|
||||||
};
|
};
|
||||||
|
|
||||||
} // end namespace CGAL
|
} // end namespace CGAL
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,68 @@
|
||||||
|
// Copyright (c) 2012 INRIA Sophia-Antipolis (France).
|
||||||
|
// All rights reserved.
|
||||||
|
//
|
||||||
|
// This file is part of CGAL (www.cgal.org).
|
||||||
|
// You can redistribute it and/or modify it under the terms of the GNU
|
||||||
|
// General Public License as published by the Free Software Foundation,
|
||||||
|
// either version 3 of the License, or (at your option) any later version.
|
||||||
|
//
|
||||||
|
// Licensees holding a valid commercial license may use this file in
|
||||||
|
// accordance with the commercial license agreement provided with the software.
|
||||||
|
//
|
||||||
|
// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
|
||||||
|
// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||||
|
//
|
||||||
|
// $URL: svn+ssh://sloriot@scm.gforge.inria.fr/svn/cgal/branches/features/AABB_tree-one_primitive_per_object-sloriot/AABB_tree/include/CGAL/AABB_tree.h $
|
||||||
|
// $Id: AABB_tree.h 69132 2012-05-15 08:46:42Z sloriot $
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// Author(s) : Sébastien Loriot
|
||||||
|
|
||||||
|
#ifndef CGAL_INTERNAL_AABB_TREE_PRIMITIVE_HELPER
|
||||||
|
#define CGAL_INTERNAL_AABB_TREE_PRIMITIVE_HELPER
|
||||||
|
|
||||||
|
#include <CGAL/internal/AABB_tree/Has_nested_type_Shared_data.h>
|
||||||
|
#include <boost/mpl/has_xxx.hpp>
|
||||||
|
|
||||||
|
namespace CGAL{
|
||||||
|
namespace internal{
|
||||||
|
|
||||||
|
//for backward compatibility: if Datum_reference and Point_reference are not defined in the primitive
|
||||||
|
//(using auto would solve the pb)
|
||||||
|
BOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF(Has_nested_type_Datum_reference,Datum_reference,false)
|
||||||
|
BOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF(Has_nested_type_Point_reference,Point_reference,false)
|
||||||
|
|
||||||
|
template<class Primitive,bool has_nested_type=Has_nested_type_Datum_reference<Primitive>::value>
|
||||||
|
struct Datum_result_type{ typedef typename Primitive::Datum_reference type; };
|
||||||
|
template<class Primitive>
|
||||||
|
struct Datum_result_type<Primitive,false>{ typedef typename Primitive::Datum type; };
|
||||||
|
template<class Primitive,bool has_nested_type=Has_nested_type_Point_reference<Primitive>::value>
|
||||||
|
struct Point_result_type{ typedef typename Primitive::Point_reference type; };
|
||||||
|
template<class Primitive>
|
||||||
|
struct Point_result_type<Primitive,false>{ typedef typename Primitive::Point type; };
|
||||||
|
|
||||||
|
|
||||||
|
//helper controlling whether extra data should be stored in the AABB_tree traits class
|
||||||
|
template <class AABBTraits, bool has_shared_data=Has_nested_type_Shared_data<typename AABBTraits::Primitive>::value>
|
||||||
|
struct Primitive_helper;
|
||||||
|
|
||||||
|
template <class AABBTraits>
|
||||||
|
struct Primitive_helper<AABBTraits,true>{
|
||||||
|
static typename Datum_result_type<typename AABBTraits::Primitive>::type get_datum(const typename AABBTraits::Primitive& p,const AABBTraits& traits)
|
||||||
|
{
|
||||||
|
return p.datum(traits.shared_data());
|
||||||
|
}
|
||||||
|
static typename Point_result_type<typename AABBTraits::Primitive>::type get_reference_point(const typename AABBTraits::Primitive& p,const AABBTraits& traits) {
|
||||||
|
return p.reference_point(traits.shared_data());
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <class AABBTraits>
|
||||||
|
struct Primitive_helper<AABBTraits,false>{
|
||||||
|
static typename Datum_result_type<typename AABBTraits::Primitive>::type get_datum(const typename AABBTraits::Primitive& p,const AABBTraits&) {return p.datum();}
|
||||||
|
static typename Point_result_type<typename AABBTraits::Primitive>::type get_reference_point(const typename AABBTraits::Primitive& p,const AABBTraits&) {return p.reference_point();}
|
||||||
|
};
|
||||||
|
|
||||||
|
} } //namespace CGAL::internal
|
||||||
|
|
||||||
|
#endif //CGAL_INTERNAL_AABB_TREE_PRIMITIVE_HELPER
|
||||||
|
|
@ -29,7 +29,7 @@
|
||||||
|
|
||||||
#include <CGAL/AABB_FaceGraph_triangle_primitive.h>
|
#include <CGAL/AABB_FaceGraph_triangle_primitive.h>
|
||||||
#include <CGAL/AABB_HalfedgeGraph_segment_primitive.h>
|
#include <CGAL/AABB_HalfedgeGraph_segment_primitive.h>
|
||||||
|
#include <CGAL/internal/AABB_tree/Primitive_helper.h>
|
||||||
|
|
||||||
double random_in(const double a,
|
double random_in(const double a,
|
||||||
const double b)
|
const double b)
|
||||||
|
|
@ -388,7 +388,7 @@ public:
|
||||||
assert ( it != Pr_generator().end(p) );
|
assert ( it != Pr_generator().end(p) );
|
||||||
|
|
||||||
// Get a point on the primitive
|
// Get a point on the primitive
|
||||||
Point closest_point = m_traits.get_reference_point(Pr(it));
|
Point closest_point = CGAL::internal::Primitive_helper<Traits>::get_reference_point(Pr(it),m_traits);
|
||||||
|
|
||||||
for ( ; it != Pr_generator().end(p) ; ++it )
|
for ( ; it != Pr_generator().end(p) ; ++it )
|
||||||
{
|
{
|
||||||
|
|
@ -407,7 +407,7 @@ public:
|
||||||
|
|
||||||
// Get a point on the primitive
|
// Get a point on the primitive
|
||||||
Pr closest_primitive = Pr(it);
|
Pr closest_primitive = Pr(it);
|
||||||
Point closest_point = m_traits.get_reference_point(closest_primitive);
|
Point closest_point = CGAL::internal::Primitive_helper<Traits>::get_reference_point(closest_primitive,m_traits);
|
||||||
|
|
||||||
for ( ; it != Pr_generator().end(p) ; ++it )
|
for ( ; it != Pr_generator().end(p) ; ++it )
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue