/**
 * @template D
 * @extends AABB2
 */
export class QuadTreeNode<D> extends AABB2 {
    constructor(x0: number, y0: number, x1: number, y1: number);
    constructor();
    /**
     *
     * @type {QuadTreeNode|null}
     */
    topLeft: QuadTreeNode<any> | null;
    /**
     *
     * @type {QuadTreeNode|null}
     */
    topRight: QuadTreeNode<any> | null;
    /**
     *
     * @type {QuadTreeNode|null}
     */
    bottomLeft: QuadTreeNode<any> | null;
    /**
     *
     * @type {QuadTreeNode|null}
     */
    bottomRight: QuadTreeNode<any> | null;
    /**
     *
     * @type {QuadTreeNode|null}
     */
    parentNode: QuadTreeNode<any> | null;
    /**
     *
     * @type {number}
     */
    treeDataCount: number;
    /**
     *
     * @type {QuadTreeDatum<D>[]}
     */
    data: QuadTreeDatum<D>[];
    /**
     * Internal method. Assesses whether splitting this node would be beneficial.
     * @returns {boolean}
     */
    isSplitMeaningful(): boolean;
    balance(): 0 | 1 | 2;
    balanceBubbleUp(): void;
    /**
     *
     * @param {number} x0
     * @param {number} y0
     * @param {number} x1
     * @param {number} y1
     */
    resize(x0: number, y0: number, x1: number, y1: number): void;
    /**
     * @template T
     * @param {T} data
     * @param {number} x0
     * @param {number} y0
     * @param {number} x1
     * @param {number} y1
     * @returns {QuadTreeDatum}
     */
    add<T>(data: T, x0: number, y0: number, x1: number, y1: number): QuadTreeDatum<any>;
    /**
     *
     * @param {QuadTreeDatum} datum
     */
    insertDatum(datum: QuadTreeDatum<any>): void;
    /**
     * @private
     * @param {QuadTreeDatum} datum
     */
    private addDatum;
    /**
     *
     * @return {boolean}
     */
    isSplit(): boolean;
    split(): void;
    /**
     * Pull all data from descendants to this node
     */
    pullDataUp(): void;
    /**
     * Move data from supplied node to this one
     * @param {QuadTreeNode} node
     */
    absorbDataFrom(node: QuadTreeNode<any>): void;
    /**
     * Push data down to descendants as far as possible
     */
    pushDataDown(): void;
    merge(): void;
    clear(): void;
    /**
     * @param {D[]} result
     */
    getRawData(result: D[]): void;
    /**
     *
     * @param {function(QuadTreeDatum<D>)} visitor
     * @param {*} [thisArg]
     */
    traverseData(visitor: (arg0: QuadTreeDatum<D>) => any, thisArg?: any): void;
    /**
     *
     * @param {function(QuadTreeNode<D>):boolean} visitor
     * @param {*} [thisArg]
     */
    traversePreOrder(visitor: (arg0: QuadTreeNode<D>) => boolean, thisArg?: any): void;
    /**
     * @deprecated use {@link qt_collect_by_point} directly
     * @param {Array<QuadTreeDatum<D>>} result
     * @param {number} x
     * @param {number} y
     * @returns {number} number of intersecting objects added to the result
     */
    requestDatumIntersectionsPoint(result: Array<QuadTreeDatum<D>>, x: number, y: number): number;
    /**
     * @deprecated use {@link qt_collect_by_box} instead
     * @param {Array<QuadTreeDatum<D>>} result
     * @param {number} x0
     * @param {number} y0
     * @param {number} x1
     * @param {number} y1
     * @returns {number} number of intersecting objects added to the result
     */
    requestDatumIntersectionsRectangle(result: Array<QuadTreeDatum<D>>, x0: number, y0: number, x1: number, y1: number): number;
    /**
     * NOTE: touching is not counted as intersection
     * @deprecated use {@link qt_collect_by_box} instead
     * @param {number} x0
     * @param {number} y0
     * @param {number} x1
     * @param {number} y1
     * @param {function(QuadTreeDatum<D>)} visitor
     * @param {*} [thisArg]
     */
    traverseRectangleIntersections(x0: number, y0: number, x1: number, y1: number, visitor: (arg0: QuadTreeDatum<D>) => any, thisArg?: any): void;
    /**
     * @readonly
     * @type {boolean}
     */
    readonly isQuadTreeNode: boolean;
}
import AABB2 from "../../2d/aabb/AABB2.js";
import { QuadTreeDatum } from "./QuadTreeDatum.js";
//# sourceMappingURL=QuadTreeNode.d.ts.map