import { BufferAttribute, BufferGeometry } from 'three';
import { Class } from 'ts-browser-helpers';
import { UiObjectConfig } from 'uiconfig.js';
import { IGeometry } from '../../core/IGeometry';
import { IMaterial } from '../../core/IMaterial';
import { IObject3D } from '../../core/IObject';
import { BufferGeometry2 } from '../../core/geometry/BufferGeometry2';
export interface GeometryGenerator<T = any> {
    generate(g?: IGeometry, parameters?: T): IGeometry;
    createUiConfig?(geometry: IGeometry): UiObjectConfig[];
}
export declare function updateUi(geometry: BufferGeometry, childrenUi: () => UiObjectConfig[]): void;
export declare function removeUi(geometry: BufferGeometry): void;
/**
 * Abstract base class for geometry generators.
 *
 * Provides the framework for generating parametric geometries with automatic
 * UI configuration and buffer management. Subclasses implement {@link _generateData}
 * to define the actual vertex/index data for a specific geometry type.
 *
 * @category Plugins
 */
export declare abstract class AGeometryGenerator<Tp extends object = any, Tt extends string = string> implements GeometryGenerator<Tp> {
    type: Tt;
    constructor(type: Tt);
    abstract defaultParams: Tp;
    defaultMeshClass: () => Class<IObject3D>;
    defaultMaterialClass?: () => Class<IMaterial>;
    defaultGeometryClass?: () => Class<IGeometry>;
    createUiConfig(geometry: IGeometry): UiObjectConfig[];
    protected abstract _generateData(params: Tp): {
        indices?: number[] | BufferAttribute;
        vertices: number[] | BufferAttribute;
        normals?: number[] | BufferAttribute;
        uvs?: number[] | BufferAttribute;
        groups?: {
            start: number;
            count: number;
            materialIndex?: number;
        }[];
        positions?: number[];
    };
    generate(g?: IGeometry, parameters?: Partial<Tp>): IGeometry | BufferGeometry2;
    setDefaultParams(params: Partial<Tp>): this;
}
//# sourceMappingURL=../../src/plugins/geometry/AGeometryGenerator.d.ts.map