mirror of https://github.com/CGAL/cgal
Merge pull request #4244 from maxGimeno/AABB_tree-Make_accelerate_distance_queries_default-maxGimeno
AABB_tree: make accelerate distance queries default
This commit is contained in:
commit
0fa0c4fbb9
|
|
@ -806,7 +806,6 @@ void Scene::build_facet_tree()
|
||||||
timer.start();
|
timer.start();
|
||||||
std::cout << "Construct Facet AABB tree...";
|
std::cout << "Construct Facet AABB tree...";
|
||||||
m_facet_tree.rebuild(faces(*m_pPolyhedron).first, faces(*m_pPolyhedron).second,*m_pPolyhedron);
|
m_facet_tree.rebuild(faces(*m_pPolyhedron).first, faces(*m_pPolyhedron).second,*m_pPolyhedron);
|
||||||
m_facet_tree.accelerate_distance_queries();
|
|
||||||
std::cout << "done (" << timer.time() << " s)" << std::endl;
|
std::cout << "done (" << timer.time() << " s)" << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -826,7 +825,6 @@ void Scene::build_edge_tree()
|
||||||
timer.start();
|
timer.start();
|
||||||
std::cout << "Construct Edge AABB tree...";
|
std::cout << "Construct Edge AABB tree...";
|
||||||
m_edge_tree.rebuild(edges(*m_pPolyhedron).first,edges(*m_pPolyhedron).second,*m_pPolyhedron);
|
m_edge_tree.rebuild(edges(*m_pPolyhedron).first,edges(*m_pPolyhedron).second,*m_pPolyhedron);
|
||||||
m_edge_tree.accelerate_distance_queries();
|
|
||||||
std::cout << "done (" << timer.time() << " s)" << std::endl;
|
std::cout << "done (" << timer.time() << " s)" << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -77,7 +77,6 @@ void Scene::benchmark_distances(const double duration)
|
||||||
timer.start();
|
timer.start();
|
||||||
std::cout << "Construct AABB tree and internal KD tree...";
|
std::cout << "Construct AABB tree and internal KD tree...";
|
||||||
Facet_tree tree(faces(*m_pPolyhedron).first, faces(*m_pPolyhedron).second,*m_pPolyhedron);
|
Facet_tree tree(faces(*m_pPolyhedron).first, faces(*m_pPolyhedron).second,*m_pPolyhedron);
|
||||||
tree.accelerate_distance_queries();
|
|
||||||
std::cout << "done (" << timer.time() << " s)" << std::endl;
|
std::cout << "done (" << timer.time() << " s)" << std::endl;
|
||||||
|
|
||||||
// benchmark
|
// benchmark
|
||||||
|
|
@ -123,7 +122,7 @@ void Scene::bench_memory()
|
||||||
typedef CGAL::Memory_sizer::size_type size_type;
|
typedef CGAL::Memory_sizer::size_type size_type;
|
||||||
size_type before = CGAL::Memory_sizer().virtual_size();
|
size_type before = CGAL::Memory_sizer().virtual_size();
|
||||||
Facet_tree tree(faces(*m_pPolyhedron).first, faces(*m_pPolyhedron).second,*m_pPolyhedron);
|
Facet_tree tree(faces(*m_pPolyhedron).first, faces(*m_pPolyhedron).second,*m_pPolyhedron);
|
||||||
// tree.accelerate_distance_queries(); // 150 vs 61 bytes per primitive!
|
tree.do_not_accelerate_distance_queries(); // 150 vs 61 bytes per primitive!
|
||||||
|
|
||||||
size_type after = CGAL::Memory_sizer().virtual_size();
|
size_type after = CGAL::Memory_sizer().virtual_size();
|
||||||
size_type bytes = after - before; // in Bytes
|
size_type bytes = after - before; // in Bytes
|
||||||
|
|
@ -165,7 +164,6 @@ void Scene::bench_construction()
|
||||||
CGAL::Timer time2;
|
CGAL::Timer time2;
|
||||||
time2.start();
|
time2.start();
|
||||||
Facet_tree tree2(faces(*m_pPolyhedron).first, faces(*m_pPolyhedron).second,*m_pPolyhedron);
|
Facet_tree tree2(faces(*m_pPolyhedron).first, faces(*m_pPolyhedron).second,*m_pPolyhedron);
|
||||||
tree2.accelerate_distance_queries();
|
|
||||||
double duration_construction_and_kdtree = time2.time();
|
double duration_construction_and_kdtree = time2.time();
|
||||||
|
|
||||||
std::cout << m_pPolyhedron->size_of_facets() << "\t"
|
std::cout << m_pPolyhedron->size_of_facets() << "\t"
|
||||||
|
|
@ -248,7 +246,6 @@ void Scene::bench_distances_vs_nbt()
|
||||||
|
|
||||||
// constructs tree (out of timing)
|
// constructs tree (out of timing)
|
||||||
Facet_tree tree(faces(*m_pPolyhedron).first, faces(*m_pPolyhedron).second, *m_pPolyhedron);
|
Facet_tree tree(faces(*m_pPolyhedron).first, faces(*m_pPolyhedron).second, *m_pPolyhedron);
|
||||||
tree.accelerate_distance_queries();
|
|
||||||
|
|
||||||
// calls queries
|
// calls queries
|
||||||
CGAL::Timer timer;
|
CGAL::Timer timer;
|
||||||
|
|
|
||||||
|
|
@ -25,7 +25,6 @@ void run(const FaceGraph& graph){
|
||||||
// constructs the AABB tree and the internal search tree for
|
// constructs the AABB tree and the internal search tree for
|
||||||
// efficient distance queries.
|
// efficient distance queries.
|
||||||
Tree tree( faces(graph).first, faces(graph).second, graph);
|
Tree tree( faces(graph).first, faces(graph).second, graph);
|
||||||
tree.accelerate_distance_queries();
|
|
||||||
|
|
||||||
// counts #intersections with a triangle query
|
// counts #intersections with a triangle query
|
||||||
Segment segment_query(p,q);
|
Segment segment_query(p,q);
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,6 @@ void run(const HalfedgeGraph& graph){
|
||||||
// efficient distance queries.
|
// efficient distance queries.
|
||||||
Tree tree( CGAL::edges(graph).first,
|
Tree tree( CGAL::edges(graph).first,
|
||||||
CGAL::edges(graph).second, graph);
|
CGAL::edges(graph).second, graph);
|
||||||
tree.accelerate_distance_queries();
|
|
||||||
|
|
||||||
// counts #intersections with a triangle query
|
// counts #intersections with a triangle query
|
||||||
Triangle triangle_query(p,q,r);
|
Triangle triangle_query(p,q,r);
|
||||||
|
|
|
||||||
|
|
@ -37,8 +37,6 @@ int main()
|
||||||
// data structure to accelerate distance queries
|
// data structure to accelerate distance queries
|
||||||
Tree tree(faces(polyhedron1).first, faces(polyhedron1).second, polyhedron1);
|
Tree tree(faces(polyhedron1).first, faces(polyhedron1).second, polyhedron1);
|
||||||
|
|
||||||
tree.accelerate_distance_queries();
|
|
||||||
|
|
||||||
tree.insert(faces(polyhedron2).first, faces(polyhedron2).second, polyhedron2);
|
tree.insert(faces(polyhedron2).first, faces(polyhedron2).second, polyhedron2);
|
||||||
|
|
||||||
// query point
|
// query point
|
||||||
|
|
|
||||||
|
|
@ -31,7 +31,6 @@ int main()
|
||||||
Tree tree( CGAL::edges(polyhedron).first,
|
Tree tree( CGAL::edges(polyhedron).first,
|
||||||
CGAL::edges(polyhedron).second,
|
CGAL::edges(polyhedron).second,
|
||||||
polyhedron);
|
polyhedron);
|
||||||
tree.accelerate_distance_queries();
|
|
||||||
|
|
||||||
// counts #intersections with a triangle query
|
// counts #intersections with a triangle query
|
||||||
Triangle triangle_query(p,q,r);
|
Triangle triangle_query(p,q,r);
|
||||||
|
|
|
||||||
|
|
@ -31,7 +31,6 @@ int main()
|
||||||
// constructs AABB tree and computes internal KD-tree
|
// constructs AABB tree and computes internal KD-tree
|
||||||
// data structure to accelerate distance queries
|
// data structure to accelerate distance queries
|
||||||
Tree tree(faces(polyhedron).first, faces(polyhedron).second, polyhedron);
|
Tree tree(faces(polyhedron).first, faces(polyhedron).second, polyhedron);
|
||||||
tree.accelerate_distance_queries();
|
|
||||||
|
|
||||||
// query point
|
// query point
|
||||||
Point query(0.0, 0.0, 3.0);
|
Point query(0.0, 0.0, 3.0);
|
||||||
|
|
|
||||||
|
|
@ -36,7 +36,6 @@ int main()
|
||||||
// constructs the AABB tree and the internal search tree for
|
// constructs the AABB tree and the internal search tree for
|
||||||
// efficient distance computations.
|
// efficient distance computations.
|
||||||
Tree tree(segments.begin(),segments.end());
|
Tree tree(segments.begin(),segments.end());
|
||||||
tree.accelerate_distance_queries();
|
|
||||||
|
|
||||||
// counts #intersections with a plane query
|
// counts #intersections with a plane query
|
||||||
Plane plane_query(a,b,d);
|
Plane plane_query(a,b,d);
|
||||||
|
|
|
||||||
|
|
@ -176,7 +176,7 @@ namespace CGAL {
|
||||||
clear_nodes();
|
clear_nodes();
|
||||||
m_primitives.clear();
|
m_primitives.clear();
|
||||||
clear_search_tree();
|
clear_search_tree();
|
||||||
m_default_search_tree_constructed = false;
|
m_default_search_tree_constructed = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Returns the axis-aligned bounding box of the whole tree.
|
/// Returns the axis-aligned bounding box of the whole tree.
|
||||||
|
|
@ -430,6 +430,8 @@ public:
|
||||||
/// a point set taken on the internal primitives
|
/// a point set taken on the internal primitives
|
||||||
/// returns `true` iff successful memory allocation
|
/// returns `true` iff successful memory allocation
|
||||||
bool accelerate_distance_queries() const;
|
bool accelerate_distance_queries() const;
|
||||||
|
///Turns off the lazy construction of the internal search tree.
|
||||||
|
void do_not_accelerate_distance_queries() const;
|
||||||
|
|
||||||
/// Constructs an internal KD-tree containing the specified point
|
/// Constructs an internal KD-tree containing the specified point
|
||||||
/// set, to be used as the set of potential hints for accelerating
|
/// set, to be used as the set of potential hints for accelerating
|
||||||
|
|
@ -601,7 +603,7 @@ public:
|
||||||
, m_p_root_node(nullptr)
|
, m_p_root_node(nullptr)
|
||||||
, m_p_search_tree(nullptr)
|
, m_p_search_tree(nullptr)
|
||||||
, m_search_tree_constructed(false)
|
, m_search_tree_constructed(false)
|
||||||
, m_default_search_tree_constructed(false)
|
, m_default_search_tree_constructed(true)
|
||||||
, m_need_build(false)
|
, m_need_build(false)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
@ -615,7 +617,7 @@ public:
|
||||||
, m_p_root_node(nullptr)
|
, m_p_root_node(nullptr)
|
||||||
, m_p_search_tree(nullptr)
|
, m_p_search_tree(nullptr)
|
||||||
, m_search_tree_constructed(false)
|
, m_search_tree_constructed(false)
|
||||||
, m_default_search_tree_constructed(false)
|
, m_default_search_tree_constructed(true)
|
||||||
, m_need_build(false)
|
, m_need_build(false)
|
||||||
{
|
{
|
||||||
// Insert each primitive into tree
|
// Insert each primitive into tree
|
||||||
|
|
@ -673,7 +675,6 @@ public:
|
||||||
void AABB_tree<Tr>::build()
|
void AABB_tree<Tr>::build()
|
||||||
{
|
{
|
||||||
clear_nodes();
|
clear_nodes();
|
||||||
|
|
||||||
if(m_primitives.size() > 1) {
|
if(m_primitives.size() > 1) {
|
||||||
|
|
||||||
// allocates tree nodes
|
// allocates tree nodes
|
||||||
|
|
@ -695,8 +696,9 @@ public:
|
||||||
// In case the users has switched on the accelerated distance query
|
// In case the users has switched on the accelerated distance query
|
||||||
// data structure with the default arguments, then it has to be
|
// data structure with the default arguments, then it has to be
|
||||||
// /built/rebuilt.
|
// /built/rebuilt.
|
||||||
if(m_default_search_tree_constructed)
|
if(m_default_search_tree_constructed && !empty()){
|
||||||
build_kd_tree();
|
build_kd_tree();
|
||||||
|
}
|
||||||
m_need_build = false;
|
m_need_build = false;
|
||||||
}
|
}
|
||||||
// constructs the search KD tree from given points
|
// constructs the search KD tree from given points
|
||||||
|
|
@ -741,6 +743,14 @@ public:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template<typename Tr>
|
||||||
|
void AABB_tree<Tr>::do_not_accelerate_distance_queries()const
|
||||||
|
{
|
||||||
|
clear_search_tree();
|
||||||
|
m_default_search_tree_constructed = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// constructs the search KD tree from internal primitives
|
// constructs the search KD tree from internal primitives
|
||||||
template<typename Tr>
|
template<typename Tr>
|
||||||
bool AABB_tree<Tr>::accelerate_distance_queries() const
|
bool AABB_tree<Tr>::accelerate_distance_queries() const
|
||||||
|
|
|
||||||
|
|
@ -34,7 +34,6 @@ int main()
|
||||||
// Test calls to all functions but those who have `!empty()` as
|
// Test calls to all functions but those who have `!empty()` as
|
||||||
// precondition.
|
// precondition.
|
||||||
CGAL::Emptyset_iterator devnull;
|
CGAL::Emptyset_iterator devnull;
|
||||||
tree.accelerate_distance_queries();
|
|
||||||
tree.all_intersections(triangle_query, devnull);
|
tree.all_intersections(triangle_query, devnull);
|
||||||
tree.all_intersected_primitives(triangle_query, devnull);
|
tree.all_intersected_primitives(triangle_query, devnull);
|
||||||
assert(!tree.any_intersected_primitive(triangle_query));
|
assert(!tree.any_intersected_primitive(triangle_query));
|
||||||
|
|
|
||||||
|
|
@ -36,7 +36,6 @@ int main()
|
||||||
|
|
||||||
// Test calls to all functions
|
// Test calls to all functions
|
||||||
CGAL::Emptyset_iterator devnull;
|
CGAL::Emptyset_iterator devnull;
|
||||||
tree.accelerate_distance_queries();
|
|
||||||
tree.all_intersections(triangle_query, devnull);
|
tree.all_intersections(triangle_query, devnull);
|
||||||
tree.all_intersected_primitives(triangle_query, devnull);
|
tree.all_intersected_primitives(triangle_query, devnull);
|
||||||
assert(tree.any_intersected_primitive(triangle_query));
|
assert(tree.any_intersected_primitive(triangle_query));
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,13 @@
|
||||||
Release History
|
Release History
|
||||||
===============
|
===============
|
||||||
|
Release 5.1
|
||||||
|
-----------
|
||||||
|
Release date: March 2020
|
||||||
|
|
||||||
|
### 3D Fast Intersection and Distance Computation
|
||||||
|
- **Breaking change**: the internal search tree is now lazily constructed. To disable it, one must call
|
||||||
|
the new function `do_not_accelerate_distance_queries()` before the first distance query.
|
||||||
|
|
||||||
|
|
||||||
[Release 5.0](https://github.com/CGAL/cgal/releases/tag/releases%2FCGAL-5.0)
|
[Release 5.0](https://github.com/CGAL/cgal/releases/tag/releases%2FCGAL-5.0)
|
||||||
-----------
|
-----------
|
||||||
|
|
|
||||||
|
|
@ -310,7 +310,6 @@ public:
|
||||||
|
|
||||||
m_own_ptree.reset(new Tree(triangles.begin(), triangles.end()));
|
m_own_ptree.reset(new Tree(triangles.begin(), triangles.end()));
|
||||||
m_own_ptree->build();
|
m_own_ptree->build();
|
||||||
m_own_ptree->accelerate_distance_queries();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
|
||||||
|
|
@ -131,7 +131,6 @@ public:
|
||||||
|
|
||||||
m_own_ptree.reset(new Tree(triangles.begin(), triangles.end()));
|
m_own_ptree.reset(new Tree(triangles.begin(), triangles.end()));
|
||||||
m_own_ptree->build();
|
m_own_ptree->build();
|
||||||
m_own_ptree->accelerate_distance_queries();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
|
||||||
|
|
@ -90,7 +90,7 @@ public:
|
||||||
, step_size_(step_size)
|
, step_size_(step_size)
|
||||||
, first_level_(first_level)
|
, first_level_(first_level)
|
||||||
{
|
{
|
||||||
tree_->accelerate_distance_queries();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Default copy constructor and assignment operator are ok
|
// Default copy constructor and assignment operator are ok
|
||||||
|
|
@ -207,7 +207,6 @@ public:
|
||||||
, sq_tolerance_size_(tolerance_size*tolerance_size)
|
, sq_tolerance_size_(tolerance_size*tolerance_size)
|
||||||
, hint_(p.facets_begin()->halfedge()->vertex()->point())
|
, hint_(p.facets_begin()->halfedge()->vertex()->point())
|
||||||
{
|
{
|
||||||
tree_->accelerate_distance_queries();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Default copy constructor and assignment operator are ok
|
// Default copy constructor and assignment operator are ok
|
||||||
|
|
@ -283,7 +282,6 @@ public:
|
||||||
, sq_tolerance_size_(tolerance_size*tolerance_size)
|
, sq_tolerance_size_(tolerance_size*tolerance_size)
|
||||||
, hint_(p.facets_begin()->halfedge()->vertex()->point())
|
, hint_(p.facets_begin()->halfedge()->vertex()->point())
|
||||||
{
|
{
|
||||||
tree_->accelerate_distance_queries();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Default copy constructor and assignment operator are ok
|
// Default copy constructor and assignment operator are ok
|
||||||
|
|
|
||||||
|
|
@ -360,7 +360,6 @@ int main(int argc, char * argv[])
|
||||||
// Constructs AABB tree and computes internal KD-tree
|
// Constructs AABB tree and computes internal KD-tree
|
||||||
// data structure to accelerate distance queries
|
// data structure to accelerate distance queries
|
||||||
AABB_tree tree(faces(output_mesh).first, faces(output_mesh).second, output_mesh);
|
AABB_tree tree(faces(output_mesh).first, faces(output_mesh).second, output_mesh);
|
||||||
tree.accelerate_distance_queries();
|
|
||||||
|
|
||||||
// Computes distance from each input point to reconstructed mesh
|
// Computes distance from each input point to reconstructed mesh
|
||||||
double max_distance = DBL_MIN;
|
double max_distance = DBL_MIN;
|
||||||
|
|
|
||||||
|
|
@ -549,7 +549,6 @@ double approximate_Hausdorff_distance(
|
||||||
|
|
||||||
Tree tree( faces(tm).first, faces(tm).second, tm);
|
Tree tree( faces(tm).first, faces(tm).second, tm);
|
||||||
tree.build();
|
tree.build();
|
||||||
tree.accelerate_distance_queries();
|
|
||||||
Point_3 hint = get(vpm, *vertices(tm).first);
|
Point_3 hint = get(vpm, *vertices(tm).first);
|
||||||
|
|
||||||
return internal::approximate_Hausdorff_distance_impl<Concurrency_tag, Kernel>
|
return internal::approximate_Hausdorff_distance_impl<Concurrency_tag, Kernel>
|
||||||
|
|
|
||||||
|
|
@ -372,7 +372,6 @@ namespace internal {
|
||||||
}
|
}
|
||||||
for(std::size_t i=0; i < trees.size(); ++i){
|
for(std::size_t i=0; i < trees.size(); ++i){
|
||||||
trees[i]->build();
|
trees[i]->build();
|
||||||
trees[i]->accelerate_distance_queries();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -74,7 +74,6 @@ namespace internal {
|
||||||
if(do_project)
|
if(do_project)
|
||||||
{
|
{
|
||||||
tree.rebuild(faces(tmesh).first, faces(tmesh).second, tmesh);
|
tree.rebuild(faces(tmesh).first, faces(tmesh).second, tmesh);
|
||||||
tree.accelerate_distance_queries();
|
|
||||||
}
|
}
|
||||||
typename GT::Construct_translated_point_3 translate
|
typename GT::Construct_translated_point_3 translate
|
||||||
= gt.construct_translated_point_3_object();
|
= gt.construct_translated_point_3_object();
|
||||||
|
|
|
||||||
|
|
@ -221,7 +221,6 @@ void smooth_mesh(const FaceRange& faces,
|
||||||
}
|
}
|
||||||
|
|
||||||
Tree aabb_tree(input_triangles.begin(), input_triangles.end());
|
Tree aabb_tree(input_triangles.begin(), input_triangles.end());
|
||||||
aabb_tree.accelerate_distance_queries();
|
|
||||||
|
|
||||||
// Setup the working ranges and check some preconditions
|
// Setup the working ranges and check some preconditions
|
||||||
Angle_smoother angle_smoother(tmesh, vpmap, vcmap, gt);
|
Angle_smoother angle_smoother(tmesh, vpmap, vcmap, gt);
|
||||||
|
|
|
||||||
|
|
@ -133,7 +133,6 @@ private:
|
||||||
typedef CGAL::AABB_tree< Traits > Tree;
|
typedef CGAL::AABB_tree< Traits > Tree;
|
||||||
|
|
||||||
Tree tree( faces(m).first, faces(m).second, m);
|
Tree tree( faces(m).first, faces(m).second, m);
|
||||||
tree.accelerate_distance_queries();
|
|
||||||
tree.build();
|
tree.build();
|
||||||
boost::graph_traits<Face_graph>::vertex_descriptor vd = *(vertices(m).first);
|
boost::graph_traits<Face_graph>::vertex_descriptor vd = *(vertices(m).first);
|
||||||
Traits::Point_3 hint = get(CGAL::vertex_point,m, vd);
|
Traits::Point_3 hint = get(CGAL::vertex_point,m, vd);
|
||||||
|
|
|
||||||
|
|
@ -77,7 +77,6 @@ double compute_distances(const Mesh& m,
|
||||||
typedef CGAL::AABB_tree< Traits > Tree;
|
typedef CGAL::AABB_tree< Traits > Tree;
|
||||||
|
|
||||||
Tree tree( faces(m).first, faces(m).second, m);
|
Tree tree( faces(m).first, faces(m).second, m);
|
||||||
tree.accelerate_distance_queries();
|
|
||||||
tree.build();
|
tree.build();
|
||||||
typedef typename boost::property_map<Mesh, boost::vertex_point_t>::const_type VPMap;
|
typedef typename boost::property_map<Mesh, boost::vertex_point_t>::const_type VPMap;
|
||||||
VPMap vpmap = get(boost::vertex_point, m);
|
VPMap vpmap = get(boost::vertex_point, m);
|
||||||
|
|
|
||||||
|
|
@ -358,7 +358,6 @@ SMesh* poisson_reconstruct(Point_set& points,
|
||||||
// Constructs AABB tree and computes internal KD-tree
|
// Constructs AABB tree and computes internal KD-tree
|
||||||
// data structure to accelerate distance queries
|
// data structure to accelerate distance queries
|
||||||
AABB_tree tree(faces(*mesh).first, faces(*mesh).second, *mesh);
|
AABB_tree tree(faces(*mesh).first, faces(*mesh).second, *mesh);
|
||||||
tree.accelerate_distance_queries();
|
|
||||||
|
|
||||||
// Computes distance from each input point to reconstructed mesh
|
// Computes distance from each input point to reconstructed mesh
|
||||||
double max_distance = DBL_MIN;
|
double max_distance = DBL_MIN;
|
||||||
|
|
|
||||||
|
|
@ -58,7 +58,6 @@ public:
|
||||||
, m_is_closed( is_closed(tm) )
|
, m_is_closed( is_closed(tm) )
|
||||||
{
|
{
|
||||||
CGAL_assertion(!m_tree_ptr->empty());
|
CGAL_assertion(!m_tree_ptr->empty());
|
||||||
m_tree_ptr->accelerate_distance_queries();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
double operator()(const typename GeomTraits::Point_3& p) const
|
double operator()(const typename GeomTraits::Point_3& p) const
|
||||||
|
|
@ -188,7 +187,6 @@ public:
|
||||||
, m_offset_distance(offset_distance)
|
, m_offset_distance(offset_distance)
|
||||||
{
|
{
|
||||||
CGAL_assertion(! m_tree_ptr->empty() );
|
CGAL_assertion(! m_tree_ptr->empty() );
|
||||||
m_tree_ptr->accelerate_distance_queries();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
double operator()(const EPICK::Point_3& p) const
|
double operator()(const EPICK::Point_3& p) const
|
||||||
|
|
|
||||||
|
|
@ -163,11 +163,10 @@ public:
|
||||||
if(!test)
|
if(!test)
|
||||||
tree.insert(Primitive(it, mesh, vertex_point_map));
|
tree.insert(Primitive(it, mesh, vertex_point_map));
|
||||||
}
|
}
|
||||||
tree.build();
|
if(!build_kd_tree) {
|
||||||
|
tree.do_not_accelerate_distance_queries();
|
||||||
if(build_kd_tree) {
|
|
||||||
tree.accelerate_distance_queries();
|
|
||||||
}
|
}
|
||||||
|
tree.build();
|
||||||
|
|
||||||
if(use_diagonal) {
|
if(use_diagonal) {
|
||||||
CGAL::Bbox_3 bbox = tree.bbox();
|
CGAL::Bbox_3 bbox = tree.bbox();
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue