import { AViewerPluginSync, ThreeViewer } from '../../viewer';
import { IGeometry, IObject3D } from '../../core';
import { ValOrArr } from 'ts-browser-helpers';
export interface SimplifyOptions {
    /**
     * Number of vertices to remove.
     * Factor is not used when count is set.
     */
    count?: number;
    /**
     * Factor of vertices to remove. eg 0.5 will remove half of the vertices.
     */
    factor?: number;
    /**
     * Replace the geometry with the simplified version in all meshes that use it.
     */
    replace?: boolean;
    /**
     * Displace the simplified geometry in the scene. Only used when replace is true
     * If set to true, the geometry will be disposed when replaced.
     * Default is false.
     * This will automatically be done when disposeOnIdle is not false in the geometry.userData.
     */
    disposeOnReplace?: boolean;
}
/**
 * Boilerplate for implementing a plugin for simplifying geometries.
 * This is a base class and cannot be used directly.
 * See {@link MeshOptSimplifyModifierPlugin} the [simplify-modifier-plugin](https://threepipe.org/examples/#simplify-modifier-plugin) example for a sample implementation.
 */
export declare abstract class SimplifyModifierPlugin extends AViewerPluginSync {
    static readonly PluginType: string;
    enabled: boolean;
    toJSON: any;
    constructor();
    get initialized(): boolean;
    initialize(): Promise<void>;
    private _pickingPlugin?;
    onAdded(viewer: ThreeViewer): void;
    /**
     * Factor of vertices to remove. eg 0.5 will remove half of the vertices.
     * Default is 0.5
     * This is used when no factor or count is provided in the options to simplifyGeometry or simplifyGeometries.
     */
    simplifyFactor: number;
    simplifyGeometries(geometry?: ValOrArr<IGeometry>, options?: SimplifyOptions): IGeometry<import('three').NormalBufferAttributes, import('three').BufferGeometryEventMap>[] | undefined;
    simplifyGeometry(geometry?: IGeometry, { factor, count, replace, disposeOnReplace, }?: SimplifyOptions): IGeometry | undefined;
    /**
     * Sample for three.js addons SimplifyModifier:
     * `
     *     import {SimplifyModifier} from 'three/examples/jsm/modifiers/SimplifyModifier'
     *     protected _simplify(geometry: IGeometry, count: number): IGeometry {
     *         const modifier = new SimplifyModifier()
     *         return modifier.modify(geometry, count) as IGeometry
     *     }
     * `
     * @param geometry
     * @param count
     */
    protected abstract _simplify(geometry: IGeometry, count: number): IGeometry;
    simplifyAll(root?: IObject3D, options?: SimplifyOptions): Promise<IGeometry<import('three').NormalBufferAttributes, import('three').BufferGeometryEventMap>[] | undefined>;
    simplifySelected(): Promise<void>;
}
//# sourceMappingURL=../../src/plugins/extras/SimplifyModifierPlugin.d.ts.map