import type { Vector2, Vector3, BoundingBox } from '../types/Math';
import type { PartitionsRenderer } from '../procoregl/PartitionsRenderer';
export type AutodeskFormatClipPlane = {
    Type: 'ClipPlane';
    Version: 1;
    Normal: [number, number, number];
    Distance: number;
    Enabled: boolean;
};
export type AutodeskFormatClipBox = {
    Type: 'OrientedBox3D';
    Version: 1;
    Box: [[number, number, number], [number, number, number]];
    Rotation: [number, number, number];
};
export type SectionDataAutodeskFormat = {
    Type: 'ClipPlaneSet';
    Version: 1;
    Unit?: string;
    OrientedBox?: AutodeskFormatClipBox | null;
    Planes?: AutodeskFormatClipPlane[] | null;
    Linked: boolean;
    Enabled: boolean;
};
export type ProcoreFormatClipPlane = {
    unit?: string;
    direction: Vector3;
    location: Vector3;
};
export type SectionDataProcoreFormat = ProcoreFormatClipPlane[];
type SectionData = SectionDataAutodeskFormat | SectionDataProcoreFormat;
export type OrientedBox = {
    min: Vector3;
    max: Vector3;
    rotation?: Vector3 | null;
};
export declare class SectionController {
    static readonly TYPE: {
        NULL: number;
        BOX: number;
        PLANE: number;
    };
    private renderer;
    private sectionDisplay;
    private sectionDisplayEnabled;
    private defaultSection;
    private currentSectionType;
    private _globalOffset?;
    private box;
    constructor(params: {
        renderer: PartitionsRenderer;
    });
    /**
     * Existing SectionController Methods
     */
    get globalOffset(): THREE.Vector3;
    set globalOffset(offset: THREE.Vector3);
    setDefaultSection(min: THREE.Vector3, max: THREE.Vector3, rotation: THREE.Vector3): void;
    addSectionPlane(distance: number, normal: Vector3): void;
    removeSectionPlane(uuid: string): void;
    private getSectionsAsBcf;
    private getSectionsAsAutodesk;
    getSections(format: 'bcf' | 'autodesk'): SectionDataProcoreFormat | SectionDataAutodeskFormat | null;
    getSectionsAsBox(): OrientedBox | null;
    setSectionBox(min: Vector3, max: Vector3, rotation: Vector3 | null, applyOffset?: boolean): void;
    removeSectionBox(): void;
    clearSection(): void;
    private setSectionsAutodeskFormat;
    private setSectionsProcoreFormat;
    setSectionData(sectionData: SectionData, unit?: string): void;
    /**
     * SectionBoxDisplay Passthrough Methods
     */
    getSectionBoxDisplayBbox(): BoundingBox;
    clearSectionHover(): void;
    setSectionBoxHidden(hide: boolean): void;
    getSectionBoxHidden(): boolean;
    isSectionBoxHovered(): boolean;
    onMouseDown(): void;
    isSectionDisplayEnabled(): boolean;
    updateSectionDisplay(scene: THREE.Scene, camera: THREE.Camera): void;
    checkInsideSection(position: Vector3): boolean;
    resetSectionBox(): void;
    toggleSectionBoxDisplay(params: {
        enable: boolean;
        scene: THREE.Scene;
    }): void;
    setSectionBoxDisplay(bbox: BoundingBox): void;
    updateSectionHover(params: {
        camera: THREE.Camera;
        raycaster: THREE.Raycaster;
    }): boolean;
    insideSectionBox(position: THREE.Vector3): boolean;
    resizeSectionBox(params: {
        xyDelta: Vector2;
        cameraPosition: THREE.Vector3;
        cameraDirection: THREE.Vector3;
    }): void;
}
export {};
