import * as VIM from '../../core-viewers/webgl/index';
import { ComponentSettings } from '../settings/settings';
import { CameraRef } from '../state/cameraState';
import { ISimpleEvent } from 'ste-simple-events';
/**
 * Manages the isolation mechanic in the VIM component.
 *
 * **Isolation** determines which objects are visible (isolated) and which are
 * hidden or displayed as ghosted. This class applies materials, updates object
 * visibility, and ensures the camera view is adjusted when isolation changes.
 */
export declare class Isolation {
    private _viewer;
    private _settings;
    private _isolation;
    private _camera;
    private _onChanged;
    /**
     * An event that is dispatched whenever the isolation set changes.
     *
     * @remarks
     * This can be used by other parts of the application to react to isolation
     * updates (for example, updating UI or triggering additional viewport actions).
     *
     * @returns {ISimpleEvent<string>} Event interface for subscribing to isolation changes.
     */
    get onChanged(): ISimpleEvent<string>;
    /**
     * Constructs an IsolationManager.
     *
     * @param viewer - The VIM Viewer responsible for managing the 3D scene and objects.
     * @param camera - A component that handles camera control and framing.
     * @param settings - The settings that control isolation and material usage.
     */
    constructor(viewer: VIM.Viewer, camera: CameraRef, settings: ComponentSettings);
    /**
     * Applies relevant settings to the isolation behavior.
     *
     * @param settings - The new settings to apply.
     *
     * @remarks
     * This updates the internal reference to settings and immediately sets
     * the material based on whether isolation is currently active.
     */
    applySettings(settings: ComponentSettings): void;
    /**
     * Checks if isolation is currently active (i.e., any objects are isolated).
     *
     * @returns True if isolation is active; otherwise, false.
     */
    isActive(): boolean;
    /**
     * Retrieves the current array of isolated objects.
     *
     * @returns An array of isolated objects, or undefined if isolation is not active.
     */
    current(): VIM.Object3D[] | undefined;
    /**
     * Sets the specified objects as isolated, hiding or ghosting the rest.
     *
     * @param objects - The objects to isolate.
     * @param source - A label or identifier indicating the source of this action (e.g., "user").
     */
    isolate(objects: VIM.Object3D[], source: string): void;
    /**
     * Toggles isolation by using the current selection.
     *
     * @param source - A label or identifier for the isolation action.
     *
     * @remarks
     * This method replaces the current isolation set with whatever objects are
     * currently selected. If selection is empty, it effectively clears isolation.
     */
    toggle(source: string): void;
    /**
     * Hides the specified objects from the isolation set.
     *
     * @param objects - The objects to hide.
     * @param source - A label or identifier for the isolation action.
     *
     * @remarks
     * If there is no active isolation set (i.e., all objects are visible),
     * the method first treats all objects in the scene as isolated,
     * and then removes the specified objects. This ensures the specified
     * objects become hidden.
     */
    hide(objects: VIM.Object3D[], source: string): void;
    /**
     * Adds the specified objects to the current isolation set (making them visible).
     *
     * @param objects - The objects to show.
     * @param source - A label or identifier for the isolation action.
     */
    show(objects: VIM.Object3D[], source: string): void;
    /**
     * Clears the current isolation set, making all objects visible.
     *
     * @param source - A label or identifier for the isolation action.
     */
    clear(source: string): void;
    /**
     * Constructs the correct material (or array of materials) based on the given settings.
     *
     * @param settings - The current component settings, including isolation rules.
     * @param isolate - Whether or not isolation is active.
     * @returns The material(s) to assign to the renderer, or undefined if default materials should be used.
     *
     * @remarks
     * - If isolation is active and `useGhostMaterial` is true, an array containing
     *   the simple and ghost materials is returned.
     * - If fast materials are enabled, the simple material is returned.
     * - Otherwise, defaults to undefined, allowing the system to pick a standard material.
     */
    private getMaterial;
    /**
     * Applies the current isolation state: sets visibility for objects, updates materials,
     * and dispatches the changed event.
     *
     * @param source - A label or identifier for the isolation action.
     */
    private _apply;
    /**
     * Gathers all objects from all loaded VIM instances.
     *
     * @returns An array of all objects within the loaded VIM scenes.
     */
    private getAllObjects;
}
