Eliminate Indexed_octree

This commit is contained in:
Jackson Campolattaro 2020-08-17 14:59:56 -04:00
parent fff3472ffe
commit 9e1505ad8a
4 changed files with 4 additions and 88 deletions

View File

@ -123,11 +123,11 @@ private: // Private types
private: // data members :
Node m_root; /* root node of the octree */
Point_range &m_ranges; /* input point range */
Point_map m_points_map; /* property map: `value_type of InputIterator` -> `Point` (Position) */
Node m_root; /* root node of the octree */
Point m_bbox_min; /* input bounding box min value */
FT m_bbox_side; /* input bounding box side length (cube) */

View File

@ -77,8 +77,6 @@ public:
*/
typedef boost::iterator_range <Point_index> Point_range;
/// @}
// TODO: There's probably a better name for this
// TODO: Should I use an enum class?
enum Child {
@ -101,6 +99,7 @@ public:
FRONT
};
/// @}
private:

View File

@ -212,7 +212,7 @@ public:
private:
typedef internal::Direct_octree<Traits> Direct_octree;
typedef internal::Indexed_octree<Traits> Indexed_octree;
typedef internal::Direct_octree<Traits> Indexed_octree;
//--------------------------------------------typedef

View File

@ -130,89 +130,6 @@ public:
}
};
template<class Traits>
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;
typedef Octree::Octree<Input_range, Indexed_point_map> Octree;
Traits m_traits;
Input_range m_input_range;
Indexed_point_map m_index_map;
Octree m_octree;
public:
typedef typename Octree::Node Node;
Indexed_octree(const Traits &traits,
Input_iterator begin,
Input_iterator end,
Point_map point_map,
std::size_t offset = 0) :
m_traits(traits),
m_input_range(boost::counting_iterator<std::size_t>(0),
boost::counting_iterator<std::size_t>(end - begin)),
m_index_map(begin, point_map),
m_octree(m_input_range, m_index_map, 1.0) {}
std::size_t size() const {
return m_octree.root().size();
}
Bbox_3 bbox() const {
return m_octree.bbox(m_octree.root());
}
std::size_t maxLevel() const {
return m_octree.max_depth_reached();
}
std::size_t offset() const { return 0; }
void refine(double cluster_epsilon_for_max_level_recomputation = -1., std::size_t bucketSize = 2,
std::size_t maxLevel = 10) {
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);
}
std::size_t index(std::size_t i) { return m_index_map[i]; }
typename Traits::FT width() const {
return m_octree.bbox(m_octree.root()).xmax() - m_octree.bbox(m_octree.root()).xmin();
}
const Node &locate(const typename Traits::Point_3 &p) const {
return m_octree.locate(p);
}
const Node &root() const { return m_octree.root(); }
typename Traits::Point_3 barycenter(const Node &node) const {
return m_octree.barycenter(node);
}
};
}
}
}