import { Material } from 'three';
import { BufferGeometry } from 'three';
import { TypedNode } from '../_Base';
import { ObjectByObjectType } from '../../../core/geometry/Constant';
import { CoreGroup } from '../../../core/geometry/Group';
import { ObjectType } from '../../../core/geometry/Constant';
import { NodeContext } from '../../poly/NodeContext';
import { NodeParamsConfig } from '../utils/params/ParamsConfig';
import { FlagsControllerDBO } from '../utils/FlagsController';
import { CoreObjectType, ObjectContent } from '../../../core/geometry/ObjectContent';
/**
 *
 *
 * BaseSopNode is the base class for all nodes that process geometries. This inherits from [TypedNode](/docs/api/TypedNode).
 *
 */
export declare class TypedSopNode<K extends NodeParamsConfig> extends TypedNode<NodeContext.SOP, K> {
    static context(): NodeContext;
    readonly flags: FlagsControllerDBO;
    dataType(): string;
    initializeBaseNode(): void;
    setCoreGroup(coreGroup: CoreGroup): void;
    setObject(object: ObjectContent<CoreObjectType>): void;
    setObjects(objects: ObjectContent<CoreObjectType>[]): void;
    setGeometry(geometry: BufferGeometry, type?: ObjectType): void;
    setGeometries(geometries: BufferGeometry[], type?: ObjectType): void;
    protected _setContainerObjects(objects: ObjectContent<CoreObjectType>[]): void;
    static createObject<OT extends ObjectType>(geometry: BufferGeometry, type: OT, material?: Material): ObjectByObjectType[OT];
    createObject<OT extends ObjectType>(geometry: BufferGeometry, type: OT, material?: Material): ObjectByObjectType[OT];
    static createIndexIfNone(geometry: BufferGeometry): void;
    protected _createIndexIfNone(geometry: BufferGeometry): void;
}
export type BaseSopNodeType = TypedSopNode<NodeParamsConfig>;
export declare class BaseSopNodeClass extends TypedSopNode<NodeParamsConfig> {
}
