mirror of https://github.com/CGAL/cgal
AABB tree: replace xref/yref/zref and point_on by a single reference_point() function for primitive.
NOTE: the reference point is used both for sorting the primitives and for constructing the search KD-tree
This commit is contained in:
parent
b9c28d07aa
commit
18c93be7bc
|
|
@ -23,8 +23,6 @@ The concept \ccRefName\ describes the requirements for the primitives stored in
|
||||||
|
|
||||||
\ccTypes
|
\ccTypes
|
||||||
|
|
||||||
\ccNestedType{FT}{Field number type.}
|
|
||||||
|
|
||||||
\ccNestedType{Point}{3D point type.}
|
\ccNestedType{Point}{3D point type.}
|
||||||
|
|
||||||
\ccNestedType{Datum}{Type of input datum.}
|
\ccNestedType{Datum}{Type of input datum.}
|
||||||
|
|
@ -43,17 +41,8 @@ The concept \ccRefName\ describes the requirements for the primitives stored in
|
||||||
\ccMethod{Id id();}
|
\ccMethod{Id id();}
|
||||||
{Returns the corresponding identifier. This identifier is only used as a reference for the objects in the output of the \ccc{AABB_tree} methods.}
|
{Returns the corresponding identifier. This identifier is only used as a reference for the objects in the output of the \ccc{AABB_tree} methods.}
|
||||||
|
|
||||||
\ccMethod{FT xref();}
|
\ccMethod{Point reference_point();}
|
||||||
{Returns the \ccc{x} reference coordinate of the primitive used for sorting the primitives. It can be the x coordinate of either one vertex of the geometric object, or of its centroid, or any other reference point taken on the object.}
|
{Returns a 3D point located on the geometric object wrapped by the primitive. This function is used to sort the primitives during the AABB tree construction and to construct the search KD-tree internal to the AABB tree in order to accelerate projection queries.}
|
||||||
|
|
||||||
\ccMethod{FT yref();}
|
|
||||||
{Returns the \ccc{y} reference coordinate of the primitive used for sorting the primitives.}
|
|
||||||
|
|
||||||
\ccMethod{FT zref();}
|
|
||||||
{Returns the \ccc{z} reference coordinate of the primitive used for sorting the primitives.}
|
|
||||||
|
|
||||||
\ccMethod{Point point_on();}
|
|
||||||
{Returns a 3D point located on the geometric object wrapped by the primitive. This function is used to construct the search KD-tree internal to the AABB tree in order to accelerate projection queries.}
|
|
||||||
|
|
||||||
\ccSeeAlso
|
\ccSeeAlso
|
||||||
\ccc{AABB_tree<Traits>}
|
\ccc{AABB_tree<Traits>}
|
||||||
|
|
|
||||||
|
|
@ -37,7 +37,6 @@ namespace CGAL {
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
/// AABBTrianglePrimitive types
|
/// AABBTrianglePrimitive types
|
||||||
typedef typename GeomTraits::FT FT;
|
|
||||||
typedef typename GeomTraits::Point_3 Point;
|
typedef typename GeomTraits::Point_3 Point;
|
||||||
typedef typename GeomTraits::Segment_3 Datum;
|
typedef typename GeomTraits::Segment_3 Datum;
|
||||||
typedef typename Polyhedron::Halfedge_handle Id;
|
typedef typename Polyhedron::Halfedge_handle Id;
|
||||||
|
|
@ -60,13 +59,7 @@ namespace CGAL {
|
||||||
const Id id() const { return m_halfedge_handle; }
|
const Id id() const { return m_halfedge_handle; }
|
||||||
|
|
||||||
/// Returns a point on the primitive
|
/// Returns a point on the primitive
|
||||||
Point point_on() const;
|
Point reference_point() const;
|
||||||
|
|
||||||
/// Returns the x/y/z reference coordinate for sorting
|
|
||||||
/// here simply one vertex of the triangle
|
|
||||||
const FT xref() const { return m_halfedge_handle->vertex()->point().x(); }
|
|
||||||
const FT yref() const { return m_halfedge_handle->vertex()->point().y(); }
|
|
||||||
const FT zref() const { return m_halfedge_handle->vertex()->point().z(); }
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
/// Id, here a polyhedron halfedge handle
|
/// Id, here a polyhedron halfedge handle
|
||||||
|
|
@ -86,7 +79,7 @@ namespace CGAL {
|
||||||
|
|
||||||
template<typename GT, typename P_>
|
template<typename GT, typename P_>
|
||||||
typename AABB_polyhedron_edge_primitive<GT,P_>::Point
|
typename AABB_polyhedron_edge_primitive<GT,P_>::Point
|
||||||
AABB_polyhedron_edge_primitive<GT,P_>::point_on() const
|
AABB_polyhedron_edge_primitive<GT,P_>::reference_point() const
|
||||||
{
|
{
|
||||||
return m_halfedge_handle->vertex()->point();
|
return m_halfedge_handle->vertex()->point();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -37,7 +37,6 @@ namespace CGAL {
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
/// AABBTrianglePrimitive types
|
/// AABBTrianglePrimitive types
|
||||||
typedef typename GeomTraits::FT FT;
|
|
||||||
typedef typename GeomTraits::Point_3 Point;
|
typedef typename GeomTraits::Point_3 Point;
|
||||||
typedef typename GeomTraits::Triangle_3 Datum;
|
typedef typename GeomTraits::Triangle_3 Datum;
|
||||||
typedef typename Polyhedron::Facet_handle Id;
|
typedef typename Polyhedron::Facet_handle Id;
|
||||||
|
|
@ -58,17 +57,11 @@ namespace CGAL {
|
||||||
Datum datum() const;
|
Datum datum() const;
|
||||||
|
|
||||||
/// Returns a point on the primitive
|
/// Returns a point on the primitive
|
||||||
Point point_on() const;
|
Point reference_point() const;
|
||||||
|
|
||||||
/// Returns the identifier
|
/// Returns the identifier
|
||||||
const Id id() const { return m_facet_handle; }
|
const Id id() const { return m_facet_handle; }
|
||||||
|
|
||||||
/// Returns the x/y/z reference coordinate for sorting
|
|
||||||
/// here simply one vertex of the triangle
|
|
||||||
const FT xref() const { return m_facet_handle->halfedge()->vertex()->point().x(); }
|
|
||||||
const FT yref() const { return m_facet_handle->halfedge()->vertex()->point().y(); }
|
|
||||||
const FT zref() const { return m_facet_handle->halfedge()->vertex()->point().z(); }
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
/// The id, here a polyhedron facet handle
|
/// The id, here a polyhedron facet handle
|
||||||
Id m_facet_handle;
|
Id m_facet_handle;
|
||||||
|
|
@ -88,7 +81,7 @@ namespace CGAL {
|
||||||
|
|
||||||
template<typename GT, typename P_>
|
template<typename GT, typename P_>
|
||||||
typename AABB_polyhedron_triangle_primitive<GT,P_>::Point
|
typename AABB_polyhedron_triangle_primitive<GT,P_>::Point
|
||||||
AABB_polyhedron_triangle_primitive<GT,P_>::point_on() const
|
AABB_polyhedron_triangle_primitive<GT,P_>::reference_point() const
|
||||||
{
|
{
|
||||||
return m_facet_handle->halfedge()->vertex()->point();
|
return m_facet_handle->halfedge()->vertex()->point();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -32,7 +32,6 @@ class AABB_segment_primitive
|
||||||
{
|
{
|
||||||
// type
|
// type
|
||||||
public:
|
public:
|
||||||
typedef typename GeomTraits::FT FT; // field number type
|
|
||||||
typedef typename GeomTraits::Point_3 Point; // point type
|
typedef typename GeomTraits::Point_3 Point; // point type
|
||||||
typedef typename GeomTraits::Segment_3 Datum; // datum type
|
typedef typename GeomTraits::Segment_3 Datum; // datum type
|
||||||
typedef Iterator Id; // Id type
|
typedef Iterator Id; // Id type
|
||||||
|
|
@ -54,15 +53,8 @@ public:
|
||||||
Datum& datum() { return m_datum; }
|
Datum& datum() { return m_datum; }
|
||||||
const Datum& datum() const { return m_datum; }
|
const Datum& datum() const { return m_datum; }
|
||||||
|
|
||||||
/// Returns the x/y/z reference coordinate for sorting
|
|
||||||
/// here simply the source vertex of the segment
|
|
||||||
// (could be as well the centroid computed on the fly)
|
|
||||||
const FT xref() const { return m_datum.source().x(); }
|
|
||||||
const FT yref() const { return m_datum.source().y(); }
|
|
||||||
const FT zref() const { return m_datum.source().z(); }
|
|
||||||
|
|
||||||
/// Returns a point on the primitive
|
/// Returns a point on the primitive
|
||||||
Point point_on() const { m_datum.source(); }
|
Point reference_point() const { return m_datum.source(); }
|
||||||
};
|
};
|
||||||
|
|
||||||
} // end namespace CGAL
|
} // end namespace CGAL
|
||||||
|
|
|
||||||
|
|
@ -80,11 +80,11 @@ public:
|
||||||
|
|
||||||
/// Comparison functions
|
/// Comparison functions
|
||||||
static bool x_less_than(const Primitive& pr1, const Primitive& pr2)
|
static bool x_less_than(const Primitive& pr1, const Primitive& pr2)
|
||||||
{ return pr1.xref() < pr2.xref(); }
|
{ return pr1.reference_point().x() < pr2.reference_point().x(); }
|
||||||
static bool y_less_than(const Primitive& pr1, const Primitive& pr2)
|
static bool y_less_than(const Primitive& pr1, const Primitive& pr2)
|
||||||
{ return pr1.yref() < pr2.yref(); }
|
{ return pr1.reference_point().y() < pr2.reference_point().y(); }
|
||||||
static bool z_less_than(const Primitive& pr1, const Primitive& pr2)
|
static bool z_less_than(const Primitive& pr1, const Primitive& pr2)
|
||||||
{ return pr1.zref() < pr2.zref(); }
|
{ return pr1.reference_point().z() < pr2.reference_point().z(); }
|
||||||
|
|
||||||
/// UNDOCUMENTED FEATURE
|
/// UNDOCUMENTED FEATURE
|
||||||
/// TODO: see what to do
|
/// TODO: see what to do
|
||||||
|
|
|
||||||
|
|
@ -352,7 +352,7 @@ namespace CGAL {
|
||||||
for(it = m_data.begin(); it != m_data.end(); it++)
|
for(it = m_data.begin(); it != m_data.end(); it++)
|
||||||
{
|
{
|
||||||
const Primitive& pr = *it;
|
const Primitive& pr = *it;
|
||||||
points.push_back(pr.point_on());
|
points.push_back(pr.reference_point());
|
||||||
}
|
}
|
||||||
m_search_tree.init(points.begin(), points.end());
|
m_search_tree.init(points.begin(), points.end());
|
||||||
m_search_tree_constructed = true;
|
m_search_tree_constructed = true;
|
||||||
|
|
|
||||||
|
|
@ -33,7 +33,6 @@ namespace CGAL {
|
||||||
public:
|
public:
|
||||||
// types
|
// types
|
||||||
typedef Iterator Id; // Id type
|
typedef Iterator Id; // Id type
|
||||||
typedef typename GeomTraits::FT FT; // field number type
|
|
||||||
typedef typename GeomTraits::Point_3 Point; // point type
|
typedef typename GeomTraits::Point_3 Point; // point type
|
||||||
typedef typename GeomTraits::Triangle_3 Datum; // datum type
|
typedef typename GeomTraits::Triangle_3 Datum; // datum type
|
||||||
|
|
||||||
|
|
@ -54,14 +53,8 @@ namespace CGAL {
|
||||||
Datum& datum() { return m_datum; }
|
Datum& datum() { return m_datum; }
|
||||||
const Datum& datum() const { return m_datum; }
|
const Datum& datum() const { return m_datum; }
|
||||||
|
|
||||||
/// Returns the x/y/z reference coordinate for sorting
|
|
||||||
/// here simply the first vertex of the triangle
|
|
||||||
const FT xref() const { return m_datum.vertex(0).x(); }
|
|
||||||
const FT yref() const { return m_datum.vertex(0).y(); }
|
|
||||||
const FT zref() const { return m_datum.vertex(0).z(); }
|
|
||||||
|
|
||||||
/// Returns a point on the primitive
|
/// Returns a point on the primitive
|
||||||
Point point_on() const { m_datum.vertex(0); }
|
Point reference_point() const { return m_datum.vertex(0); }
|
||||||
};
|
};
|
||||||
|
|
||||||
} // end namespace CGAL
|
} // end namespace CGAL
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue