/**
 * @module vim-loader
 */
import { VimMeshFactory } from './legacyMeshFactory';
import { LoadPartialSettings, LoadSettings } from './subsetRequest';
import { G3dSubset } from './g3dSubset';
import { ISignal, ISignalHandler } from 'ste-signals';
import { ISubscribable, SubscriptionChangeEventHandler } from 'ste-core';
import { Vimx } from './vimx';
import { WebglScene } from '../scene';
export interface SubsetBuilder {
    /** Dispatched whenever a subset begins or finishes loading. */
    onUpdate: ISignal;
    /** Returns true when some subset is being loaded. */
    isLoading: boolean;
    /** Returns all instances as a subset */
    getFullSet(): G3dSubset;
    /** Loads given subset with given options */
    loadSubset(subset: G3dSubset, settings?: LoadPartialSettings): any;
    /** Stops and clears all loading processes */
    clear(): any;
    dispose(): any;
}
/**
 * Loads and builds subsets from a Vim file.
 */
export declare class VimSubsetBuilder implements SubsetBuilder {
    factory: VimMeshFactory;
    private _onUpdate;
    get onUpdate(): ISignal;
    get isLoading(): boolean;
    constructor(factory: VimMeshFactory);
    getFullSet(): G3dSubset;
    loadSubset(subset: G3dSubset, settings?: LoadPartialSettings): void;
    clear(): void;
    dispose(): void;
}
/**
 * Loads and builds subsets from a VimX file.
 */
export declare class VimxSubsetBuilder {
    private _localVimx;
    private _scene;
    private _set;
    private _onUpdate;
    get onUpdate(): ISignal;
    get isLoading(): boolean;
    constructor(localVimx: Vimx, scene: WebglScene);
    getFullSet(): G3dSubset;
    loadSubset(subset: G3dSubset, settings?: LoadPartialSettings): Promise<void>;
    clear(): void;
    dispose(): void;
}
export declare class DummySubsetBuilder implements SubsetBuilder {
    get onUpdate(): AlwaysTrueSignal;
    get isLoading(): boolean;
    getFullSet(): G3dSubset;
    loadSubset(subset: G3dSubset, settings?: Partial<LoadSettings>): void;
    clear(): void;
    dispose(): void;
}
declare class AlwaysTrueSignal implements ISignal {
    count: number;
    subscribe(fn: ISignalHandler): () => void;
    sub(fn: ISignalHandler): () => void;
    unsubscribe(fn: ISignalHandler): void;
    unsub(fn: ISignalHandler): void;
    one(fn: ISignalHandler): () => void;
    has(fn: ISignalHandler): boolean;
    clear(): void;
    onSubscriptionChange: ISubscribable<SubscriptionChangeEventHandler>;
}
export {};
