import { Bounds } from "@intelligentgraphics/ig.gfx.core";
import { IScreenWorldConverter } from "../ScreenWorldConverter";
import { SnapMode } from "../Types";
import { Operation } from "./Operations";
/** Strategy parameters. */
export interface StrategyParameters {
    /** The involved components by their ids. */
    componentIds: string[];
    /** Is translation necessary? */
    translate: boolean;
    /** Is rotation necessary? */
    rotate: boolean;
    /** Which snap modes to ignore */
    ignoredModes?: SnapMode[];
    /** Whether to ignore all collisions */
    ignoreCollisions: boolean;
    /** The grid to use for movement. If set to zero or a negative number none is used. */
    movementGridLength: number;
    /** The grid to use for rotations. Has to be an angle (radians) greater than zero, smaller than 2 Pi. Otherwise none is used. */
    rotationGridLength: number;
    /** The bounds within which the movement is restricted */
    bounds: Bounds;
}
/** Operation-strategy finder. */
export declare class OperationStrategyFinder {
    private converter;
    constructor(converter: IScreenWorldConverter);
    /** Gets a strategy based on the passed parameters.
     * @param parameters The parameters for chosing a strategy.
     * @returns The operation that comes closest to the parameters.
     */
    getStrategy(parameters: StrategyParameters): Operation;
    /**
     * Create the this.movementOperations field from the values specified in the parameters
     * If rotate is set, rotation will occur, otherwise a translation
     * Movement restriction is only applied if some restrictions are given and only a single object is selected
     * @param parameters
     */
    private getMovementOperation;
    /**
     * Create a Translation Operation, if necessary wrapped inside a Grid Operation
     * @param parameters
     * @returns {TranslationOperation | GridTranslationOperation}
     */
    private makeTranslationOperation;
    /**
     * Create a Rotation Operation, if necessary wrapped inside a Grid Operation
     * @param parameters
     * @returns
     */
    private makeRotationOperation;
}
