import { Quaternion } from "./three";
export type JointRotations = {
    childCoordsRotation?: JointRotations;
    quat: {
        raw: Quaternion;
        norm: Quaternion;
        preapplied?: {
            raw: Quaternion;
            norm: Quaternion;
        };
    };
    angles?: {
        raw: readonly [number, number, number];
        norm: readonly [number, number, number];
        preapplied: {
            raw: readonly [number, number, number];
            norm: readonly [number, number, number];
        };
    };
    normalizedAngles: [number, number, number];
    rawAngles: [number, number, number];
};
type JointNode<T extends string> = {
    position: [number, number, number];
    tiltTo: [number, number, number];
    relPosition?: [number, number, number];
    relMutPosition?: [number, number, number];
    relTiltTo?: [number, number, number];
    relMutTiltTo?: [number, number, number];
    rotation?: [T, JointRotations][];
    offset?: [number, number, number];
    parent?: T | undefined;
    coordinateConversion?: {
        x: "x" | "y" | "z";
        y: "x" | "y" | "z";
        z: "x" | "y" | "z";
    };
    children?: [T, JointNode<T>][];
};
export declare class Pose3DBoneMapper {
    static calculateNodeForVec3(origin: {
        x: number;
        y: number;
        z: number;
    }, target: {
        x: number;
        y: number;
        z: number;
    }, tiltTo?: {
        x: number;
        y: number;
        z: number;
    }): {
        origin: any;
        target: any;
        tiltTo: [number, number, number] | undefined;
        quat: Quaternion;
        angles: readonly [number, number, number];
        normalizedAngles: [number, number, number];
        rawAngles: [number, number, number];
    };
    static calculateNode(origin: [number, number, number], target: [number, number, number], tiltTo?: [number, number, number], coordinateConversion?: {
        x: "x" | "y" | "z";
        y: "x" | "y" | "z";
        z: "x" | "y" | "z";
    }, parent?: {
        rotation: {
            quat: Quaternion;
            angles: readonly [number, number, number];
            rawAngles: [number, number, number];
            normalizedAngles: [number, number, number];
        };
        position: {
            origin: [number, number, number];
        };
    }): {
        origin: any;
        target: any;
        tiltTo: [number, number, number] | undefined;
        quat: Quaternion;
        angles: readonly [number, number, number];
        normalizedAngles: [number, number, number];
        rawAngles: [number, number, number];
    };
    _findChildren<T extends string>(parent: T, nodeEntries: [
        T,
        {
            position: [number, number, number];
            tiltTo: [number, number, number];
            parent?: T;
        }
    ][]): [string, JointNode<T>][];
    private _getRotationsForCoordinates;
    private _convertCoordinates;
    private _addRawRotation;
    private _addTreeRotations;
    _flattenTreeChildren<T extends string>(rootChildren: [T, JointNode<T>][]): [T, JointNode<T>][];
    _flattenTree<T extends string>(rootNode: [T, JointNode<T>]): {
        [key: string]: JointNode<T>;
    };
    _tree<T extends string>(nodes: Record<T, {
        position: [number, number, number];
        tiltTo: [number, number, number];
        offset?: [number, number, number];
        coordinateConversion?: {
            x: "x" | "y" | "z";
            y: "x" | "y" | "z";
            z: "x" | "y" | "z";
        };
        parent?: T;
    }>): [string, JointNode<T>] & {
        flatten: () => {
            [key: string]: {
                [key: string]: JointRotations;
            };
        };
    };
}
export {};
//# sourceMappingURL=rotator.d.ts.map