UNPKG

rbush-3d

Version:

High-performance 3D spatial index for cuboids (based on R*-tree with bulk loading and bulk insertion algorithms)

71 lines (70 loc) 2.19 kB
export interface GNode<L extends boolean> { children: L extends true ? BBox[] : Node[]; height: number; leaf: L; minX: number; minY: number; minZ: number; maxX: number; maxY: number; maxZ: number; } export declare type LeafNode = GNode<true>; export declare type NonLeafNode = GNode<false>; export declare type Node = LeafNode | NonLeafNode; export declare type NullableNode = Node | undefined; export declare type DetermineNode<L extends boolean> = L extends true ? LeafNode : NonLeafNode; export declare type DetermineLeaf<L extends boolean> = L extends true ? BBox : Node; export interface BBox { minX: number; minY: number; minZ: number; maxX: number; maxY: number; maxZ: number; [k: number]: any; [k: string]: any; } export interface CompareAxis { (a: BBox, b: BBox): number; } export interface CompareEqual { (a: BBox, b: BBox): boolean; } export interface DistNode { dist: number; node?: BBox; } export declare const intersects: (a: BBox, b: BBox) => boolean; export declare const boxRayIntersects: (box: BBox, ox: number, oy: number, oz: number, idx: number, idy: number, idz: number) => number; export declare class RBush3D { private data; private maxEntries; private minEntries; private static pool; static alloc(): RBush3D; static free(rbush: RBush3D): void; constructor(maxEntries?: number); search(bbox: BBox): BBox[]; collides(bbox: BBox): boolean; raycastInv(ox: number, oy: number, oz: number, idx: number, idy: number, idz: number, maxLen?: number): DistNode; raycast(ox: number, oy: number, oz: number, dx: number, dy: number, dz: number, maxLen?: number): DistNode; all(): BBox[]; load(data: BBox[]): this; insert(item?: BBox): this; clear(): this; remove(item?: BBox, equalsFn?: CompareEqual): this; toJSON(): Node; fromJSON(data: Node): this; private build; private _all; private chooseSubtree; private split; private splitRoot; private chooseSplitIndex; private chooseSplitAxis; private allDistMargin; private adjustParentBBoxes; private condense; private _insert; }