mirror of https://github.com/CGAL/cgal
Update refine method of Direct octree to match indexed
This commit is contained in:
parent
939ba23f39
commit
ee2a93e8e1
|
|
@ -561,11 +561,13 @@ public:
|
|||
do {
|
||||
|
||||
do {
|
||||
|
||||
first_sample = get_default_random()(
|
||||
static_cast<unsigned int>(m_num_available_points));
|
||||
first_sample = get_default_random()(static_cast<unsigned int>(m_num_available_points));
|
||||
} while (m_shape_index[first_sample] != -1);
|
||||
std::cerr << first_sample << std::endl;
|
||||
std::cerr << "first sample: " << first_sample << std::endl;
|
||||
std::cerr << "point index: " << *(m_input_iterator_first + first_sample) << std::endl;
|
||||
|
||||
auto point = get(m_point_pmap,
|
||||
*(m_input_iterator_first + first_sample));
|
||||
|
||||
done =
|
||||
drawSamplesFromCellContainingPoint(m_global_octree,
|
||||
|
|
@ -576,8 +578,6 @@ public:
|
|||
m_shape_index,
|
||||
required_samples);
|
||||
|
||||
std::cerr << m_shape_index[first_sample] << std::endl;
|
||||
|
||||
if (callback && !callback(num_invalid / double(m_num_total_points)))
|
||||
return false;
|
||||
|
||||
|
|
@ -1121,6 +1121,8 @@ private:
|
|||
const std::vector<int> &shapeIndex,
|
||||
std::size_t requiredSamples) {
|
||||
|
||||
std::cerr << " point: " << p << std::endl;
|
||||
|
||||
typedef typename Octree::Node Cell;
|
||||
|
||||
const Cell *cur = node_containing_point(octree, p, level);
|
||||
|
|
|
|||
|
|
@ -135,6 +135,7 @@ class Indexed_octree {
|
|||
|
||||
typedef typename Traits::Input_range::iterator Input_iterator;
|
||||
typedef typename Traits::Point_map Point_map;
|
||||
typedef typename Traits::FT FT;
|
||||
typedef std::vector<std::size_t> Input_range;
|
||||
typedef Point_map_to_indexed_point_map<Input_iterator, Point_map> Indexed_point_map;
|
||||
|
||||
|
|
@ -177,7 +178,21 @@ public:
|
|||
void refine(double cluster_epsilon_for_max_level_recomputation = -1., std::size_t bucketSize = 2,
|
||||
std::size_t maxLevel = 10) {
|
||||
|
||||
// TODO: I need to find out what cluster_epsilon is used for
|
||||
if (cluster_epsilon_for_max_level_recomputation > 0.) {
|
||||
|
||||
auto m_bBox = m_octree.bbox(m_octree.root());
|
||||
|
||||
FT bbox_diagonal = (FT) CGAL::sqrt(
|
||||
(m_bBox.xmax() - m_bBox.xmin()) * (m_bBox.xmax() - m_bBox.xmin())
|
||||
+ (m_bBox.ymax() - m_bBox.ymin()) * (m_bBox.ymax() - m_bBox.ymin())
|
||||
+ (m_bBox.zmax() - m_bBox.zmin()) * (m_bBox.zmax() - m_bBox.zmin()));
|
||||
|
||||
maxLevel = std::size_t(std::log(bbox_diagonal
|
||||
/ cluster_epsilon_for_max_level_recomputation)
|
||||
/ std::log(2.0));
|
||||
|
||||
}
|
||||
|
||||
m_octree.refine(maxLevel, bucketSize);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue