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