import { Class } from 'ts-browser-helpers';
import { AViewerPluginSync, ThreeViewer } from '../../viewer';
import { BufferGeometry2 } from '../../core/geometry/BufferGeometry2';
import { IGeometry } from '../../core/IGeometry';
import { IMaterial } from '../../core/IMaterial';
import { IMesh, IObject3D, IObject3DEventMap } from '../../core/IObject';
import { ISceneEventMap } from '../../core/IScene';
import { TorusGeometryGenerator } from './primitives/TorusGeometryGenerator';
import { CircleGeometryGenerator } from './primitives/CircleGeometryGenerator';
import { BoxGeometryGenerator } from './primitives/BoxGeometryGenerator';
import { SphereGeometryGenerator } from './primitives/SphereGeometryGenerator';
import { PlaneGeometryGenerator } from './primitives/PlaneGeometryGenerator';
import { CylinderGeometryGenerator } from './primitives/CylinderGeometryGenerator';
import { TubeGeometryGenerator } from './primitives/TubeGeometryGenerator';
import { ShapeGeometryGenerator } from './primitives/ShapeGeometryGenerator';
import { TubeShapeGeometryGenerator } from './primitives/TubeShapeGeometryGenerator';
import { LineGeometryGenerator } from './primitives/LineGeometryGenerator';
import { AGeometryGenerator } from './AGeometryGenerator';
export interface IGeometryGeneratorMap extends Record<string, AGeometryGenerator> {
    plane: PlaneGeometryGenerator;
    sphere: SphereGeometryGenerator;
    box: BoxGeometryGenerator;
    circle: CircleGeometryGenerator;
    torus: TorusGeometryGenerator;
    cylinder: CylinderGeometryGenerator;
    tube: TubeGeometryGenerator;
    shape: ShapeGeometryGenerator;
    tubeShape: TubeShapeGeometryGenerator;
    line: LineGeometryGenerator;
}
/**
 * GeometryGeneratorPlugin
 *
 * Geometry generator plugin to create updatable parametric objects/geometries.
 * Built-in generators: plane, sphere, box, circle, torus, cylinder, tube, shape, tubeShape, line.
 *
 * Additional generators (text) can be registered at runtime via the `generators` property
 * or by using `GeometryGeneratorExtrasPlugin` from `@threepipe/plugin-geometry-generator`.
 *
 * @category Plugins
 */
export declare class GeometryGeneratorPlugin extends AViewerPluginSync {
    static readonly PluginType = "GeometryGeneratorPlugin";
    enabled: boolean;
    toJSON: any;
    generators: IGeometryGeneratorMap;
    defaultMeshClass: Class<IObject3D>;
    defaultMaterialClass: Class<IMaterial>;
    defaultGeometryClass: Class<IGeometry>;
    generateObject<T extends keyof IGeometryGeneratorMap & string = string, TGeometry extends IGeometry = IGeometry, TMaterial extends IMaterial = IMaterial, TG extends AGeometryGenerator = IGeometryGeneratorMap[T]>(type: T, { mesh, geometry, material, ...params }?: Partial<TG['defaultParams']> & {
        mesh?: IMesh<IObject3DEventMap, TGeometry, TMaterial>;
        geometry?: TGeometry;
        material?: TMaterial;
    }): IMesh<IObject3DEventMap, TGeometry, TMaterial>;
    generateGeometry(type: string, params: any, geometry?: IGeometry): IGeometry<import('three').NormalBufferAttributes, import('three').BufferGeometryEventMap> | BufferGeometry2<import('three').NormalBufferAttributes, import('three').BufferGeometryEventMap>;
    updateGeometry(geometry: IGeometry, params?: any): void;
    onAdded(viewer: ThreeViewer): void;
    onRemove(viewer: ThreeViewer): void;
    private _objectAdd;
    private _objectRemove;
    protected _geometryUpdate: (e: ISceneEventMap["geometryUpdate"]) => void;
    uiConfig: {
        type: string;
        label: string;
        children: (() => {
            type: string;
            uuid: string;
            label: string;
            value: () => Promise<void>;
        }[])[];
    };
}
//# sourceMappingURL=../../src/plugins/geometry/GeometryGeneratorPlugin.d.ts.map