mirror of https://github.com/CGAL/cgal
Replace stop criterion with split criterion
This commit is contained in:
parent
ed1395d63b
commit
cdd3ad38ff
|
|
@ -23,7 +23,7 @@
|
||||||
#define CGAL_OCTREE_3_H
|
#define CGAL_OCTREE_3_H
|
||||||
|
|
||||||
#include <CGAL/Octree/Octree_node.h>
|
#include <CGAL/Octree/Octree_node.h>
|
||||||
#include <CGAL/Octree/Stop_criterion.h>
|
#include <CGAL/Octree/Split_criterion.h>
|
||||||
|
|
||||||
#include <CGAL/bounding_box.h>
|
#include <CGAL/bounding_box.h>
|
||||||
#include <boost/iterator/transform_iterator.hpp>
|
#include <boost/iterator/transform_iterator.hpp>
|
||||||
|
|
@ -128,7 +128,7 @@ namespace CGAL {
|
||||||
m_root.unsplit();
|
m_root.unsplit();
|
||||||
}
|
}
|
||||||
|
|
||||||
void refine(std::function<bool(const Node &)> stop_criterion) {
|
void refine(std::function<bool(const Node &)> split_criterion) {
|
||||||
|
|
||||||
// create a side length map
|
// create a side length map
|
||||||
for (int i = 0; i <= (int) 10; i++)
|
for (int i = 0; i <= (int) 10; i++)
|
||||||
|
|
@ -147,7 +147,7 @@ namespace CGAL {
|
||||||
int depth = current->depth();
|
int depth = current->depth();
|
||||||
|
|
||||||
// Check if this node needs to be processed
|
// Check if this node needs to be processed
|
||||||
if (!stop_criterion(*current)) {
|
if (split_criterion(*current)) {
|
||||||
|
|
||||||
// Split this node
|
// Split this node
|
||||||
current->split();
|
current->split();
|
||||||
|
|
@ -164,7 +164,7 @@ namespace CGAL {
|
||||||
}
|
}
|
||||||
|
|
||||||
void refine(size_t max_depth, size_t bucket_size) {
|
void refine(size_t max_depth, size_t bucket_size) {
|
||||||
refine(Stop_at_max_depth_or_bucket_size(max_depth, bucket_size));
|
refine(Split_to_max_depth_or_bucket_size(max_depth, bucket_size));
|
||||||
}
|
}
|
||||||
|
|
||||||
Node &root() { return m_root; }
|
Node &root() { return m_root; }
|
||||||
|
|
|
||||||
|
|
@ -1,50 +1,39 @@
|
||||||
|
|
||||||
#ifndef OCTREE_STOP_CRITERION_H
|
#ifndef OCTREE_SPLIT_CRITERION_H
|
||||||
#define OCTREE_STOP_CRITERION_H
|
#define OCTREE_SPLIT_CRITERION_H
|
||||||
|
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
namespace CGAL {
|
namespace CGAL {
|
||||||
|
|
||||||
struct Stop_at_max_depth_or_bucket_size {
|
struct Split_to_max_depth_or_bucket_size {
|
||||||
|
|
||||||
std::size_t m_max_depth, m_bucket_size;
|
std::size_t m_max_depth, m_bucket_size;
|
||||||
|
|
||||||
Stop_at_max_depth_or_bucket_size(std::size_t max_depth, std::size_t bucket_size) :
|
Split_to_max_depth_or_bucket_size(std::size_t max_depth, std::size_t bucket_size) :
|
||||||
m_max_depth(max_depth), m_bucket_size(bucket_size) {}
|
m_max_depth(max_depth), m_bucket_size(bucket_size) {}
|
||||||
|
|
||||||
template<class Node>
|
template<class Node>
|
||||||
bool operator()(const Node &n) const {
|
bool operator()(const Node &n) const {
|
||||||
return (n.num_points() <= m_bucket_size || n.depth() == m_max_depth);
|
return (n.num_points() > m_bucket_size && n.depth() < m_max_depth);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
struct Stop_at_max_depth {
|
struct Split_to_max_depth {
|
||||||
|
|
||||||
std::size_t m_max_depth;
|
std::size_t m_max_depth;
|
||||||
|
|
||||||
Stop_at_max_depth(std::size_t max_depth) : m_max_depth(max_depth) {}
|
Split_to_max_depth(std::size_t max_depth) : m_max_depth(max_depth) {}
|
||||||
|
|
||||||
template<class Node>
|
template<class Node>
|
||||||
bool operator()(const Node &n) const {
|
bool operator()(const Node &n) const {
|
||||||
return n.depth() == m_max_depth;
|
return n.depth() < m_max_depth;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
||||||
struct Stop_at_max_number_of_points {
|
|
||||||
std::size_t max_nb_points;
|
|
||||||
|
|
||||||
Stop_at_max_number_of_points(const std::size_t &max_nb_points)
|
|
||||||
: max_nb_points(max_nb_points) {}
|
|
||||||
|
|
||||||
bool operator()(const Node &n) const {
|
|
||||||
return n.number_of_points() // internally, the node can use std::distance(begin, end)
|
|
||||||
< max_nb_points;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
// Just for an example using outside info (like a normal map)
|
// Just for an example using outside info (like a normal map)
|
||||||
// The normals remain unknown to the octree but are used for construction
|
// The normals remain unknown to the octree but are used for construction
|
||||||
struct Stop_at_normal_deviation {
|
struct Stop_at_normal_deviation {
|
||||||
|
|
@ -71,4 +60,4 @@ struct Stop_at_normal_deviation {
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#endif //OCTREE_STOP_CRITERION_H
|
#endif //OCTREE_SPLIT_CRITERION_H
|
||||||
Loading…
Reference in New Issue