/**
 * Creates an attribute on the geometry or object.
 *
 * @remarks
 * This allows you to create an attribute and define the following:
 * - the group this applies to
 * - the name
 * - the type (numeric or string)
 * - the size (float, vector2, vector3 or vector4)
 * - the class (geometry or object attribute)
 * - the value
 *
 * Note that you can also given an expression to set the value of the attribute, such as `sin(2*@P.z)`
 *
 */
import { TypedSopNode } from './_Base';
import { AttribType } from '../../../core/geometry/Constant';
import { CoreObject } from '../../../core/geometry/Object';
import { CoreGroup } from '../../../core/geometry/Group';
import { NodeParamsConfig } from '../utils/params/ParamsConfig';
declare class AttribCreateSopParamsConfig extends NodeParamsConfig {
    /** @param the group this applies to */
    group: import("../utils/params/ParamsConfig").ParamTemplate<import("../../poly/ParamType").ParamType.STRING>;
    /** @param the attribute class (geometry or object) */
    class: import("../utils/params/ParamsConfig").ParamTemplate<import("../../poly/ParamType").ParamType.INTEGER>;
    /** @param the attribute type (numeric or string) */
    type: import("../utils/params/ParamsConfig").ParamTemplate<import("../../poly/ParamType").ParamType.INTEGER>;
    /** @param the attribute name */
    name: import("../utils/params/ParamsConfig").ParamTemplate<import("../../poly/ParamType").ParamType.STRING>;
    /** @param the attribute size (1 for float, 2 for vector2, 3 for vector3, 4 for vector4) */
    size: import("../utils/params/ParamsConfig").ParamTemplate<import("../../poly/ParamType").ParamType.INTEGER>;
    /** @param the value for a float attribute */
    value1: import("../utils/params/ParamsConfig").ParamTemplate<import("../../poly/ParamType").ParamType.FLOAT>;
    /** @param the value for a vector2 */
    value2: import("../utils/params/ParamsConfig").ParamTemplate<import("../../poly/ParamType").ParamType.VECTOR2>;
    /** @param the value for a vector3 */
    value3: import("../utils/params/ParamsConfig").ParamTemplate<import("../../poly/ParamType").ParamType.VECTOR3>;
    /** @param the value for a vector4 */
    value4: import("../utils/params/ParamsConfig").ParamTemplate<import("../../poly/ParamType").ParamType.VECTOR4>;
    /** @param the value for a string attribute */
    string: import("../utils/params/ParamsConfig").ParamTemplate<import("../../poly/ParamType").ParamType.STRING>;
}
export declare class AttribCreateSopNode extends TypedSopNode<AttribCreateSopParamsConfig> {
    params_config: AttribCreateSopParamsConfig;
    static type(): string;
    private _x_arrays_by_geometry_uuid;
    private _y_arrays_by_geometry_uuid;
    private _z_arrays_by_geometry_uuid;
    private _w_arrays_by_geometry_uuid;
    initializeNode(): void;
    private _operation;
    cook(input_contents: CoreGroup[]): void;
    private _add_attribute;
    add_point_attribute(attrib_type: AttribType, core_group: CoreGroup): Promise<void>;
    add_object_attribute(attrib_type: AttribType, core_group: CoreGroup): Promise<void>;
    add_numeric_attribute_to_points(core_object: CoreObject): Promise<void>;
    add_numeric_attribute_to_object(core_objects: CoreObject[]): Promise<void>;
    add_string_attribute_to_points(core_object: CoreObject): Promise<void>;
    add_string_attribute_to_object(core_objects: CoreObject[]): Promise<void>;
    private _init_array_if_required;
    private _is_using_expression;
}
export {};
