import { Vector3 } from '@vertexvis/geometry';
/**
 * A type representing the different types of supported distance units.
 */
export type DistanceUnitType = 'millimeters' | 'centimeters' | 'meters' | 'inches' | 'feet' | 'yards';
export type AngleUnitType = 'degrees' | 'radians';
export interface Unit {
    name: string;
    abbreviatedName: string;
    converter: UnitConverter<number>;
}
interface UnitConverter<T> {
    convertTo(value: T): T;
    convertFrom(value: T): T;
}
/**
 * A class that contains helpers for transforming values and points between
 * world space distances and real space distances.
 */
export declare class DistanceUnits {
    readonly unitType: DistanceUnitType;
    private static units;
    /**
     * The unit of this measurement.
     */
    readonly unit: Unit;
    constructor(unitType: DistanceUnitType);
    /**
     * Translates a world space value to a real space value.
     *
     * @param value A world space value to translate.
     * @returns A value in real space units.
     */
    convertWorldValueToReal(value: number): number;
    /**
     * Translates a real space value to a world space value.
     *
     * @param value A real space value to translate.
     * @returns A world space value.
     */
    convertRealValueToWorld(value: number): number;
    /**
     * Translates a world space point to a point in real space.
     *
     * @param pt A point in world space.
     * @returns A point in real space.
     */
    convertWorldPointToReal(pt: Vector3.Vector3): Vector3.Vector3;
    /**
     * Translates a real space point to a point in world space.
     *
     * @param pt A point in real space.
     * @returns A point in world space.
     */
    convertRealPointToWorld(pt: Vector3.Vector3): Vector3.Vector3;
}
/**
 * A class that contains helpers for transforming angle units.
 */
export declare class AngleUnits {
    readonly unitType: AngleUnitType;
    private static units;
    /**
     * The unit of this measurement.
     */
    readonly unit: Unit;
    constructor(unitType: AngleUnitType);
    /**
     * Converts radians to the chosen unit type.
     *
     * @param radians An angle in radians.
     * @returns An angle in the chosen unit type.
     */
    convertTo(radians: number): number;
    /**
     * Converts the chosen unit type back to radians.
     *
     * @param value The value to convert
     * @returns An angle in radians.
     */
    convertFrom(value: number): number;
}
/**
 * A class that contains helpers for transforming area units.
 */
export declare class AreaUnits {
    readonly unitType: DistanceUnitType;
    private static units;
    /**
     * The unit of this measurement.
     */
    readonly unit: Unit;
    constructor(unitType: DistanceUnitType);
    /**
     * Translates a world space value to a real space value.
     *
     * @param value A world space value to translate.
     * @returns A value in real space units.
     */
    convertWorldValueToReal(value: number): number;
    /**
     * Translates a real space value to a world space value.
     *
     * @param value A real space value to translate.
     * @returns A world space value.
     */
    convertRealValueToWorld(value: number): number;
}
export {};
