ViewDesignEngine  3.1.0
高性能 CAD 计算几何引擎
r_tree.h
浏览该文件的文档.
1 
11 #pragma once
13 #include "vde/core/aabb.h"
14 #include <queue>
15 #include <limits>
16 
17 namespace vde::spatial {
18 using core::Point3D;
19 using core::Vector3D;
20 using core::Ray3Dd;
21 using core::Triangle3D;
22 
31 template <typename T>
32 struct RTreeNode {
34  bool is_leaf = true;
35  std::vector<size_t> children;
36  std::vector<size_t> item_indices;
37  size_t parent = static_cast<size_t>(-1);
38 };
39 
67 template <typename T>
68 class RTree : public SpatialIndex<T> {
69 public:
78  void build(const std::vector<T>& items) override;
79 
88  void insert(const T& item) override;
89 
99  bool remove(const T& item) override;
100 
110  std::vector<T> query_range(const AABB3D& range) const override;
111 
121  std::vector<T> query_knn(const Point3D& point, size_t k) const override;
122 
131  std::vector<T> query_ray(const Ray3Dd& ray) const override;
132 
136  void clear() override;
137 
143  size_t size() const override { return count_; }
144 
150  size_t node_count() const { return nodes_.size(); }
151 
152 private:
160  void query_range_recursive(size_t node_idx, const AABB3D& range,
161  std::vector<T>& result) const;
162 
163  std::vector<T> items_;
164  std::vector<AABB3D> item_bounds_;
165  std::vector<RTreeNode<T>> nodes_;
166  size_t root_idx_ = 0;
167  size_t count_ = 0;
168 };
169 
170 } // namespace vde::spatial
R 树动态空间索引
Definition: r_tree.h:68
void build(const std::vector< T > &items) override
批量构建 R 树
std::vector< T > query_knn(const Point3D &point, size_t k) const override
K 近邻查询
size_t size() const override
对象数量
Definition: r_tree.h:143
bool remove(const T &item) override
删除对象
size_t node_count() const
R 树节点总数
Definition: r_tree.h:150
std::vector< T > query_range(const AABB3D &range) const override
范围查询
void insert(const T &item) override
增量插入对象
void clear() override
清空 R 树
std::vector< T > query_ray(const Ray3Dd &ray) const override
射线查询
空间索引抽象基类
Definition: spatial_index.h:44
Ray3D< double > Ray3Dd
双精度三维射线
Definition: line.h:141
Triangle< double > Triangle3D
双精度三维三角形
Definition: triangle.h:105
AABB< double > AABB3D
双精度三维包围盒
Definition: aabb.h:131
foundation::Vector3D Vector3D
双精度三维向量(重新导出)
Definition: point.h:49
foundation::Point3D Point3D
双精度三维点(重新导出)
Definition: point.h:31
空间索引抽象基类
R 树节点
Definition: r_tree.h:32
std::vector< size_t > children
Definition: r_tree.h:35
std::vector< size_t > item_indices
Definition: r_tree.h:36