import { Object3D } from 'three';
import { Class } from 'ts-browser-helpers';
import { AViewerPluginEventMap, AViewerPluginSync, ThreeViewer } from '../../viewer';
import { ObjectPicker } from '../../three';
import { IGeometry, IMaterial, IObject3D, ITexture, LineMaterial2, PhysicalMaterial, UnlitLineMaterial, UnlitMaterial } from '../../core';
import { UiObjectConfig } from 'uiconfig.js';
import { ObjectPickerEventMap, SelectionObject } from '../../three/utils/ObjectPicker';
import { CameraViewPlugin } from '../animation/CameraViewPlugin';
import { SelectionWidget } from '../../three/widgets';
export interface PickingPluginEventMap extends AViewerPluginEventMap, ObjectPickerEventMap {
}
export declare class PickingPlugin extends AViewerPluginSync<PickingPluginEventMap> {
    enabled: boolean;
    get picker(): ObjectPicker | undefined;
    static readonly PluginType = "Picking";
    static readonly OldPluginType = "PickingPlugin";
    private _picker?;
    private _widget?;
    private _extraWidgets;
    private _selectionWidgetClass?;
    private _hoverWidget?;
    private _pickUi;
    dependencies: (typeof CameraViewPlugin)[];
    get hoverEnabled(): boolean;
    set hoverEnabled(v: boolean);
    selectionMode: 'object' | 'material' | 'geometry' | 'texture';
    autoFocus: boolean;
    autoFocusHover: boolean;
    autoApplyMaterialOnDrop: boolean;
    /**
     * Note: this is for runtime use only, not serialized
     */
    widgetEnabled: boolean;
    multiSelectEnabled: boolean;
    protected _widgetEnabledChange(): void;
    private _updateExtraWidgets;
    setDirty(): void;
    constructor(selection?: Class<SelectionWidget> | undefined, pickUi?: boolean, autoFocus?: boolean);
    getSelectedObject<T extends SelectionObject = SelectionObject>(): T | undefined;
    getSelectedObjects<T extends SelectionObject = SelectionObject>(): T[];
    toggleSelectedObject(object: SelectionObject): void;
    selectAll(): void;
    clearSelection(): void;
    private _onKeyDown;
    setSelectedObject(object: SelectionObject | undefined, focusCamera?: boolean, trackUndo?: boolean): void;
    onAdded(viewer: ThreeViewer): void;
    onRemove(viewer: ThreeViewer): void;
    dispose(): void;
    private _mainCameraChange;
    private _addSceneObject;
    private _sceneUpdate;
    private _objCompChange;
    private _onObjectSelectEvent;
    private _selectedObjectChanged;
    private _hoverObjectChanged;
    private _onObjectHit;
    private _selectionModeChanged;
    private _multiSelectChanged;
    focusObject(selected?: Object3D | null): Promise<void>;
    private _onDrop;
    private _pickPromptUi;
    private _uiConfigChildren;
    uiConfig: UiObjectConfig;
    get widget(): SelectionWidget | undefined;
    refreshUiChildren(selected: IObject3D | IMaterial | ITexture | IGeometry | undefined): void;
    objectSelectionUiConfig(obj: IObject3D): UiObjectConfig[];
    objectMaterialManageUiConfig(obj: IObject3D): UiObjectConfig[];
    canRemoveMaterial: (obj: IObject3D) => boolean | 0;
    removeMaterial: (obj: IObject3D) => (() => IMaterial<import('../../core').IMaterialEventMap> | IMaterial<import('../../core').IMaterialEventMap>[]) | undefined;
    getPlaceholderMaterial(obj: IObject3D): IMaterial;
    materialTypes: ({
        cls: typeof UnlitMaterial;
        def: UnlitMaterial<import('../../core').IMaterialEventMap>;
        name: string;
        line?: undefined;
    } | {
        cls: typeof UnlitLineMaterial;
        def: UnlitLineMaterial<import('../../core').IMaterialEventMap>;
        line: boolean;
        name: string;
    } | {
        cls: typeof LineMaterial2;
        def: LineMaterial2<import('../../core').IMaterialEventMap>;
        line: boolean;
        name: string;
    } | {
        cls: typeof PhysicalMaterial;
        name: string;
        def?: undefined;
        line?: undefined;
    })[];
}
//# sourceMappingURL=../../src/plugins/interaction/PickingPlugin.d.ts.map