import { AttribClass } from './../../../core/geometry/Constant';
import { BaseSopOperation } from './_Base';
import { CoreGroup } from '../../../core/geometry/Group';
import { InputCloneMode } from '../../../engine/poly/InputCloneMode';
import { DefaultOperationParams } from '../../../core/operations/_Base';
export declare enum SortMode {
    RANDOM = "random",
    AXIS = "axis",
    ATTRIBUTE = "attribute"
}
export declare const SORT_MODES: SortMode[];
export type SortTargetType = AttribClass.POINT | AttribClass.OBJECT;
export declare const SORT_TARGET_TYPES: Array<SortTargetType>;
export declare enum Axis {
    X = "x",
    Y = "y",
    Z = "z"
}
export declare const AXISES: Axis[];
interface SortSopParams extends DefaultOperationParams {
    targetType: number;
    mode: number;
    seed: number;
    axis: number;
    attribute: string;
    invert: boolean;
}
export declare class SortSopOperation extends BaseSopOperation {
    static readonly DEFAULT_PARAMS: SortSopParams;
    static readonly INPUT_CLONED_STATE = InputCloneMode.FROM_NODE;
    static type(): Readonly<'sort'>;
    cook(inputCoreGroups: CoreGroup[], params: SortSopParams): CoreGroup;
    private _sort;
    private _sortObjects;
    private _sortObjectsByAxis;
    private _sortObjectsByRandom;
    private _sortObjectsByAttribute;
    private _sortPoints;
    private _sortPointsByAxis;
    private _sortPointsByRandom;
    private _sortPointsByAttribute;
    private _pointPos;
    private _positions;
    private _indicesByPos;
    private _indexDest;
    private _debugActive;
    private _debug;
    private _sortPointsForObject;
    private _updateAttribute;
}
export {};
