import * as THREE from "@intelligentgraphics/three";
import { IGXE } from "@intelligentgraphics/igd.productdata";
import { ThreeJS_API, LetterGeometryCache } from "@intelligentgraphics/ig.gfx.threejs";
import { IMeasurementRenderer, IMeasurementDimensionsProvider, MeasurementRendererAnyTarget } from "../Types";
export interface LabeledAxisOptions {
    lineColor?: string;
    textColor?: string;
    textBoxBackground?: string;
    textBoxBorder?: string;
    unit?: IGXE.EPropertyValueUnit.LENGTH_CM | IGXE.EPropertyValueUnit.LENGTH_MM | IGXE.EPropertyValueUnit.LENGTH_M;
    createLabelText?(value: number, unit: IGXE.EPropertyValueUnit): string;
}
/**
 * Draws are wireframe around each target and
 * renders all provided dimensions as labels on each axis.
 *
 * @export
 * @class LabeledAxis
 * @implements {IMeasurementRenderer}
 */
export declare class LabeledAxis implements IMeasurementRenderer {
    private readonly api;
    private readonly dimensionsProvider;
    private camera;
    private readonly renderScene;
    private readonly options;
    private readonly textObjectDefaults;
    private objectLabels;
    constructor(options: LabeledAxisOptions, api: ThreeJS_API, dimensionsProvider: IMeasurementDimensionsProvider, camera: THREE.Camera, letterGeometryCache: LetterGeometryCache);
    /**
     * Updates the internal camera and the orientation of the labels towards the new camera's position
     *
     * @param {THREE.Camera} camera
     */
    setCamera(camera: THREE.Camera): void;
    /**
     * Updates the orientation of the labels towards the camera's position
     *
     */
    updateLabelLookat(): void;
    renderMeasurement(targets: MeasurementRendererAnyTarget[]): void;
    private renderGroupMeasurement;
    private renderArticleMeasurement;
    private calculateLabelPositions;
    private createLabelText;
}
