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
TypeScript
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;
}