import * as THREE from 'three';
import EditorScene from '@modules/editor/domain/Editor.Scene';
import EditorCamera from '@modules/editor/domain/Editor.Camera';
import EditorRenderer from '@modules/editor/domain/Editor.Renderer';
import EditorEvent from '@modules/editor/domain/Editor.Event';
import Component from '@egjs/component';
import { Events } from '@modules/editor/type/events';
import EditorControl from '@modules/editor/domain/Editor.Control';
import EditorStorage from '@modules/editor/domain/Editor.Storage';
import EditorUpload from '@modules/editor/domain/Editor.Upload';
import EditorLight from '@modules/editor/domain/Editor.Light';
import EditorGeometry from '@modules/editor/domain/Editor.Geometry';
import { BasePluginType } from '@modules/editor/plugin/plugin.type';
interface Props {
    canvasContainer: HTMLDivElement;
    canvas: HTMLCanvasElement;
    backgroundColor?: string;
    defaultSquare?: boolean;
    keyboardCameraControl?: boolean;
}
declare class Editor extends Component<Events> {
    readonly EditorCamera: EditorCamera;
    readonly EditorScene: EditorScene;
    readonly EditorRenderer: EditorRenderer;
    readonly EditorEvent: EditorEvent;
    readonly EditorControl: EditorControl;
    readonly EditorStorage: EditorStorage;
    readonly EditorUpload: EditorUpload;
    readonly EditorLight: EditorLight;
    readonly EditorGeometry: EditorGeometry;
    readonly canvasContainer: HTMLDivElement;
    readonly canvas: HTMLCanvasElement;
    readonly camera: THREE.PerspectiveCamera;
    readonly renderer: THREE.WebGLRenderer;
    readonly scene: THREE.Scene;
    readonly plugins: BasePluginType[];
    readonly options: Props;
    constructor(options: Props);
    init(): Promise<void>;
    loadPLY(path: string): Promise<THREE.Mesh<THREE.BufferGeometry<THREE.NormalBufferAttributes>, THREE.Material | THREE.Material[]>>;
    /**
     * mtl path와 obj path를 통해서 오브젝트 로드
     * @param mtlPath
     * @param objPath
     */
    loadMTL(mtlPath: string, objPath: string): Promise<THREE.Object3D<THREE.Event>>;
    /**
     * set object controller (transformControls) with translate, rotate, scale.
     * @param mode
     */
    setTransformMode(mode: 'translate' | 'rotate' | 'scale' | 'off'): void;
    getTransformMode(): "translate" | "rotate" | "scale";
    setCameraView(mode: 'topView'): void;
    /**
     * remove clicked object by transform controller.
     */
    deleteObject(): void;
    /**
     * remove Editor
     */
    remove(): void;
    plugin(plugins: BasePluginType[]): void;
}
export default Editor;
