import { CameraView } from "@intelligentgraphics/ig.gfx.support";
import * as THREE from "@intelligentgraphics/three";
import { IViewFrame } from "@intelligentgraphics/ig.gfx.core";
import { ISceneLike } from "./pointerHandling";
export declare const CAMERA_NAME_2D = "ORTHOGRAPHIC";
export declare const CAMERA_NAME_3D = "PERSPECTIVE";
export declare type ScenePerspective = "2D" | "3D";
export declare type SceneManagerParams = {
    container: HTMLElement;
    canvas: HTMLCanvasElement;
    perspectives?: ScenePerspective[];
    initialPerspective?: ScenePerspective;
};
export declare type CreateCameraParams = {
    perspectives?: ScenePerspective[];
    initialPerspective?: ScenePerspective;
    container: HTMLElement;
    viewFrame: IViewFrame;
    cameraName2D: string;
    cameraName3D: string;
    remoteControls?: boolean;
    onControlChange?(): void;
};
export declare type CreateEnvironmentParams = {
    scene: THREE.Scene;
    renderer: THREE.WebGLRenderer;
};
export declare type SceneState = {
    activePerspective: ScenePerspective;
};
export declare abstract class SceneManager implements ISceneLike {
    protected dimensions: IViewFrame;
    protected scene: THREE.Scene;
    protected renderer: THREE.WebGLRenderer;
    protected container: HTMLElement;
    protected canvas: HTMLCanvasElement;
    protected cameras: Map<ScenePerspective, CameraView>;
    constructor(options: SceneManagerParams);
    onResize(): void;
    getViewFrame(): IViewFrame;
    setPerspective(newPerspective: ScenePerspective): void;
    getActiveOrbitControls(): import("@intelligentgraphics/ig.gfx.core").IOrbittingControl;
    getActiveCameraView(): CameraView;
    getCameraNameFromPerspective(perspective: ScenePerspective): "ORTHOGRAPHIC" | "PERSPECTIVE";
    protected abstract createRenderer(canvas: HTMLCanvasElement): THREE.WebGLRenderer;
    protected abstract createCameras(params: CreateCameraParams): Map<ScenePerspective, CameraView>;
    protected abstract createEnvironment(params: CreateEnvironmentParams): void;
    protected abstract getCurrentSceneState(): SceneState;
    protected init({ container, perspectives, initialPerspective }: SceneManagerParams): void;
    protected updateViewFrame(): void;
    protected calculateViewFrame(): {
        width: number;
        height: number;
        x: number;
        y: number;
    };
}
