ViewDesignEngine  3.1.0
高性能 CAD 计算几何引擎
vde::spatial::SpatialIndex< T > 模板类 参考abstract

空间索引抽象基类 更多...

#include <spatial_index.h>

类 vde::spatial::SpatialIndex< T > 继承关系图:

Public 成员函数

virtual ~SpatialIndex ()=default
 
virtual void build (const std::vector< T > &items)=0
 批量构建索引 更多...
 
virtual void insert (const T &item)=0
 插入单个对象 更多...
 
virtual bool remove (const T &item)=0
 删除单个对象 更多...
 
virtual std::vector< T > query_range (const AABB3D &range) const =0
 范围查询:返回与 AABB 相交的所有对象 更多...
 
virtual std::vector< T > query_knn (const Point3D &point, size_t k) const =0
 K 近邻查询:返回距 point 最近的 k 个对象 更多...
 
virtual std::vector< T > query_ray (const Ray3Dd &ray) const =0
 射线查询:返回与射线相交的所有对象 更多...
 
virtual void clear ()=0
 清空索引中所有数据 更多...
 
virtual size_t size () const =0
 当前索引中的对象数量 更多...
 

详细描述

template<typename T>
class vde::spatial::SpatialIndex< T >

空间索引抽象基类

所有空间加速结构(BVH、Octree、KDTree、RTree)的公共接口。 模板参数 T 为被索引对象类型,需提供以下辅助函数:

  • get_position(T) → Point3D (空间位置)
  • get_aabb(T) → AABB3D (包围盒,用于范围查询)
  • ray_hits_item(T, Ray3Dd) → bool(与射线求交)
模板参数
T被索引的空间对象类型
注解
本类为纯虚接口,不可直接实例化

在文件 spatial_index.h44 行定义.

构造及析构函数说明

◆ ~SpatialIndex()

template<typename T >
virtual vde::spatial::SpatialIndex< T >::~SpatialIndex ( )
virtualdefault

成员函数说明

◆ build()

template<typename T >
virtual void vde::spatial::SpatialIndex< T >::build ( const std::vector< T > &  items)
pure virtual

批量构建索引

清空已有数据,将 items 全部插入并重建索引结构。 各子类实现不同的构建策略:

  • BVH: SAH 启发式自顶向下划分
  • KDTree: 中值分割递归构建
  • Octree: 自适应八等分递归剖分
  • RTree: 批量插入后优化重组
参数
items待索引的对象数组

vde::spatial::BVH, vde::spatial::RTree< T >, vde::spatial::Octree< T > , 以及 vde::spatial::KDTree< T > 内被实现.

◆ clear()

template<typename T >
virtual void vde::spatial::SpatialIndex< T >::clear ( )
pure virtual

清空索引中所有数据

vde::spatial::RTree< T >, vde::spatial::Octree< T >, vde::spatial::KDTree< T > , 以及 vde::spatial::BVH 内被实现.

◆ insert()

template<typename T >
virtual void vde::spatial::SpatialIndex< T >::insert ( const T &  item)
pure virtual

插入单个对象

将 item 加入索引。部分结构(如 BVH)仅支持一次性 build, 插入后可能需要重建。

参数
item待插入的空间对象

vde::spatial::BVH, vde::spatial::RTree< T >, vde::spatial::Octree< T > , 以及 vde::spatial::KDTree< T > 内被实现.

◆ query_knn()

template<typename T >
virtual std::vector<T> vde::spatial::SpatialIndex< T >::query_knn ( const Point3D &  point,
size_t  k 
) const
pure virtual

K 近邻查询:返回距 point 最近的 k 个对象

参数
point查询点
k需要返回的对象数量
返回
按距离升序排列的 k 个最近对象

vde::spatial::RTree< T >, vde::spatial::Octree< T >, vde::spatial::KDTree< T > , 以及 vde::spatial::BVH 内被实现.

◆ query_range()

template<typename T >
virtual std::vector<T> vde::spatial::SpatialIndex< T >::query_range ( const AABB3D &  range) const
pure virtual

范围查询:返回与 AABB 相交的所有对象

参数
range查询的轴对齐包围盒
返回
与 range 相交的对象列表

vde::spatial::RTree< T >, vde::spatial::Octree< T >, vde::spatial::KDTree< T > , 以及 vde::spatial::BVH 内被实现.

◆ query_ray()

template<typename T >
virtual std::vector<T> vde::spatial::SpatialIndex< T >::query_ray ( const Ray3Dd &  ray) const
pure virtual

射线查询:返回与射线相交的所有对象

参数
ray查询射线
返回
按命中距离升序排列的相交对象列表

vde::spatial::RTree< T >, vde::spatial::Octree< T >, vde::spatial::KDTree< T > , 以及 vde::spatial::BVH 内被实现.

◆ remove()

template<typename T >
virtual bool vde::spatial::SpatialIndex< T >::remove ( const T &  item)
pure virtual

删除单个对象

参数
item待删除的空间对象
返回
true 删除成功;false 对象不存在

vde::spatial::BVH, vde::spatial::RTree< T >, vde::spatial::Octree< T > , 以及 vde::spatial::KDTree< T > 内被实现.

◆ size()

template<typename T >
virtual size_t vde::spatial::SpatialIndex< T >::size ( ) const
pure virtual

当前索引中的对象数量

返回
对象计数

vde::spatial::RTree< T >, vde::spatial::Octree< T >, vde::spatial::KDTree< T > , 以及 vde::spatial::BVH 内被实现.


该类的文档由以下文件生成: