/**
 * Copies a geometry onto every point from the right input.
 *
 * @remarks
 * This is different than the instance SOP, as the operation here is more expensive, but allows for more flexibility.
 *
 *
 */
import { ObjectTransformSpace } from './../../../core/TransformSpace';
import { SopType } from './../../poly/registers/nodes/types/Sop';
import { TypedSopNode } from './_Base';
import { CoreGroup } from '../../../core/geometry/Group';
import { SopCopyStamp } from './utils/CopyStamp';
import { NodeParamsConfig } from '../utils/params/ParamsConfig';
import { TransformTargetType } from '../../../core/Transform';
declare class CopySopParamsConfig extends NodeParamsConfig {
    /** @param select which objects are copied */
    srcGroup: import("../utils/params/ParamsConfig").ParamTemplate<import("../../index_all").ParamType.STRING>;
    /** @param select which objects the src objects are copied onto */
    templateGroup: import("../utils/params/ParamsConfig").ParamTemplate<import("../../index_all").ParamType.STRING>;
    /** @param copies count, used when the second input is not given */
    count: import("../utils/params/ParamsConfig").ParamTemplate<import("../../index_all").ParamType.INTEGER>;
    /** @param translate each copy */
    t: import("../utils/params/ParamsConfig").ParamTemplate<import("../../index_all").ParamType.VECTOR3>;
    /** @param rotate each copy */
    r: import("../utils/params/ParamsConfig").ParamTemplate<import("../../index_all").ParamType.VECTOR3>;
    /** @param scale each copy */
    s: import("../utils/params/ParamsConfig").ParamTemplate<import("../../index_all").ParamType.VECTOR3>;
    /** @param scale multiplier for each copy */
    scale: import("../utils/params/ParamsConfig").ParamTemplate<import("../../index_all").ParamType.FLOAT>;
    /** @param transforms every input object each on a single input point */
    transformOnly: import("../utils/params/ParamsConfig").ParamTemplate<import("../../index_all").ParamType.BOOLEAN>;
    /** @param defines if the objects or the geometries are transformed */
    transformMode: import("../utils/params/ParamsConfig").ParamTemplate<import("../../index_all").ParamType.INTEGER>;
    /** @param defines how the objects are transformed */
    objectTransformSpace: import("../utils/params/ParamsConfig").ParamTemplate<import("../../index_all").ParamType.INTEGER>;
    /** @param toggles on to copy attributes from the input points to the created objects. Note that the vertex attributes from the points become object attributes */
    copyAttributes: import("../utils/params/ParamsConfig").ParamTemplate<import("../../index_all").ParamType.BOOLEAN>;
    /** @param names of attributes to copy */
    attributesToCopy: import("../utils/params/ParamsConfig").ParamTemplate<import("../../index_all").ParamType.STRING>;
    /** @param toggle on to use the `copy` expression, which allows to change how the left input is evaluated for each point */
    useCopyExpr: import("../utils/params/ParamsConfig").ParamTemplate<import("../../index_all").ParamType.BOOLEAN>;
}
export declare class CopySopNode extends TypedSopNode<CopySopParamsConfig> {
    paramsConfig: CopySopParamsConfig;
    static type(): SopType;
    private _attribNamesToCopy;
    private _objects;
    private _stampNode;
    initializeNode(): void;
    setTransformMode(transformMode: TransformTargetType): void;
    setObjectTransformSpace(transformSpace: ObjectTransformSpace): void;
    cook(inputCoreGroups: CoreGroup[]): Promise<void>;
    private _instancer;
    private cookWithTemplate;
    private _copyMovedObjectsOnTemplatePoints;
    private _instanceMatrix;
    private _copyMovedObjectOnTemplatePoint;
    private _getMovedObjectsForTemplatePoint;
    private _stampInstanceGroupIfRequired;
    private _copyMovedObjectsForEachInstance;
    private _copyMovedObjectsForInstance;
    private cookWithoutTemplate;
    private _copyAttributesGromTemplate;
    stampValue(attribName?: string): string | number | boolean | import("../../../types/GlobalTypes").Vector2Like | import("../../../types/GlobalTypes").ColorLike | import("../../index_all").Number2 | import("../../index_all").Number3 | import("../../index_all").Number4 | undefined;
    stampNode(): SopCopyStamp;
    private _createStampNode;
    dispose(): void;
    private _coreTransform;
    private _transformAccumulatedMatrix;
    private _transformMatrix;
    private _initAccumulatedTransform;
    private _accumulateTransform;
    private _applyMatrixToObject;
    private _applyAccumulatedTransform;
}
export {};
