#pragma once #include "vde/core/aabb.h" #include "vde/core/line.h" #include #include namespace vde::spatial { template class SpatialIndex { public: virtual ~SpatialIndex() = default; virtual void build(const std::vector& items) = 0; virtual void insert(const T& item) = 0; virtual bool remove(const T& item) = 0; virtual std::vector query_range(const AABB3D& range) const = 0; virtual std::vector query_knn(const Point3D& point, size_t k) const = 0; virtual std::vector query_ray(const Ray3Dd& ray) const = 0; virtual void clear() = 0; virtual size_t size() const = 0; }; } // namespace vde::spatial