import { Extension } from './core-extensions/Extension';
import { ICameraProvider } from './core-extensions/Providers';
import { NodeRenderView } from '../tree/NodeRenderView';
import { Material } from 'three';
import { IViewer, SelectionEvent } from '../../IViewer';
import { DisplayStyle, MaterialOptions, RenderMaterial } from '../materials/Materials';
import { TreeNode } from '../tree/WorldTree';
export interface SelectionExtensionOptions {
    selectionMaterialData: RenderMaterial & DisplayStyle & MaterialOptions;
    hoverMaterialData?: RenderMaterial & DisplayStyle & MaterialOptions;
}
export declare class SelectionExtension extends Extension {
    protected cameraProvider: ICameraProvider;
    get inject(): string[];
    protected selectedNodes: Array<TreeNode>;
    protected selectionRvs: {
        [id: string]: NodeRenderView;
    };
    protected selectionMaterials: {
        [id: string]: Material;
    };
    protected options: SelectionExtensionOptions;
    protected hoverRv: NodeRenderView;
    protected hoverMaterial: Material;
    protected selectionMaterialData: RenderMaterial & DisplayStyle & MaterialOptions;
    protected hoverMaterialData: RenderMaterial & DisplayStyle & MaterialOptions;
    protected transparentSelectionMaterialData: RenderMaterial & DisplayStyle & MaterialOptions;
    protected transparentHoverMaterialData: RenderMaterial & DisplayStyle & MaterialOptions;
    protected _enabled: boolean;
    get enabled(): boolean;
    set enabled(value: boolean);
    constructor(viewer: IViewer, cameraProvider: ICameraProvider);
    setOptions(options: SelectionExtensionOptions): void;
    getSelectedObjects(): any[];
    selectObjects(ids: Array<string>, multiSelect?: boolean): void;
    unselectObjects(ids: Array<string>): void;
    clearSelection(nodes?: Array<TreeNode>): void;
    protected onObjectClicked(selection: SelectionEvent): void;
    protected onObjectDoubleClick(selectionInfo: SelectionEvent): void;
    protected onPointerMove(e: any): void;
    protected applySelection(): void;
    protected removeSelection(rvs?: Array<NodeRenderView>): void;
    protected applyHover(renderView: NodeRenderView): void;
    protected removeHover(): void;
}
