import { Float3 } from "./Types";
/** Representation of touches. A touch is either a mouse or a touch event. */
export declare class Touch {
    /** x value of normalized device coordinates [-1 ... 1] */
    x: number;
    /** y value of normalized device coordinates [-1 ... 1] */
    y: number;
    /** button field of a mouse event */
    button: number;
    /** was shift key pressed */
    shiftKey: boolean;
    /** was control key pressed */
    ctrlKey: boolean;
    /** what camera the touch belongs to, e.g. IGX.ThreeJS.cameras[cameraIndex].camera */
    cameraIndex: number | undefined;
    constructor(x?: number, y?: number);
    SetupFromEvent(event: any): void;
}
/** Enumeration of main interaction modes. */
export declare enum EInteractionMode {
    /** Horizontal (x-z) interaction. */
    Horizontal = 1,
    /** Vertical (x-y) interaction. */
    Vertical = 2
}
/** Tag for start position of Interactors. */
export declare const StartPosition: string;
/** Tag for end position of Interactors. */
export declare const EndPosition: string;
/** This is a pre-defined interactor parameter.
 * If the value is false, "False", "false", the interactor is inactive
 * and should be ignored.
 */
export declare const Active: string;
/** This is a pre-defined interactor parameter.
 * If the value is true, "True", "true", the interactor is not available
 * for event-based interactions and should be ignored. Also, an up-traversal
 * should not stop on components with non-manual interactors.
 */
export declare const Manual: string;
/** This is a pre-defined interactor parameter.
 * The value defines the stage an interactor belongs to. If undefined, the stage is 1.
 */
export declare const Stage = "Stage";
/** This is a pre-defined interactor parameter.
 * The value defines the time period in sec., an interactor wants to run in.
 * For a given stage, the maximum of all stage-related interactor periods will be the final period.
 * If undefined, the period is 1 sec.
 */
export declare const Period = "Period";
/** Abstract Interactor class as base class for all interactors. */
export declare class Interactor {
    /** Enables/disables logging. */
    static Log: boolean;
    /** The parameters used in the creation of the interactor. */
    parameters: any;
    /** The last touch position. */
    lastTouchPos: Touch;
    /** Snap distance for positions. */
    static SNAP_POS_DISTANCE: number;
    /** Snap distance for angles, in Deg. */
    static SNAP_ARC_DISTANCE_DEG: number;
    /** Snap distance for angles, in Rad. */
    static SNAP_ARC_DISTANCE_RAD: number;
    /** Interaction start mode. */
    static START: number;
    /** Interaction motion mode */
    static MOTION: number;
    /** Interaction end mode */
    static END: number;
    /** Interaction mode: Space planning in x-z plane. */
    static STANDARD_XZ: number;
    /** Interaction mode: Space planning in x-z plane, y rotation. */
    static STANDARD_XZ__Y_ROT: number;
    /** Interaction mode: Space planning in x-y plane. */
    static STANDARD_XY: number;
    /** USAGE NOT CLEAR, deprecated? */
    interactionStarted?: any;
    /**
     * Transform arc in Deg into range -180 - 180 Deg.
     *
     * @param degrees Arc in Deg.
     *
     * @returns Arc in Deg.
     */
    static NormalizeDegrees(degrees: number): number;
    /**
     * Transform arc in Rad into range -Pi/2 - Pi/2.
     *
     * @param radiant Arc in Rad.
     *
     * @returns Arc in Rad.
     */
    static NormalizeRadiant(radiant: number): number;
    /**
     * Rotates a component around a fix point by specified y-axis arc.
     *
     * @param componentId The component to be rotated.
     * @param fixPoint The rotation center in MC coordinates.
     * @param arcRad The rotation angle in Rad.
     */
    static FixPointYRotation(componentId: string, fixPoint: Float3, arcRad: number): void;
    static CreateFromConstructor<T extends new (params: any) => Interactor>(constructor: T, params: any): Interactor;
    /**
     * Creates an interactor from a class name and parameters.
     *
     * @param className The fully qualified class name of an interactor class.
     * @param parameters A set of parameters specific to the interactor class.
     *
     * @returns The interactor instance or null.
     */
    static CreateFromClassName(className: string, parameters: any): any;
    /**
     * The Constructor, obviously.
     *
     * @param parameters The set of parameters, used to create the interactor.
     */
    constructor(parameters: any);
    /**
     * Set the associated component. To be used by drivers only!
     * @param id The component (id) the interactor is linked to.
     */
    SetComponentId(id: string): void;
    /**
     * Access to the associated component.
     *
     * @retuns The id of the associated component, or null/undefined.
     */
    GetComponentId(): string;
    /**
     * Access to the associated component. Deprecated function!
     *
     * @retuns The id of the associated component, or null/undefined.
     */
    ComponentId(): string;
    /**
     * Set to position "Start" or "End".
     *
     * @param position Must be "Start" or "End".
     */
    SetPosition(position: "Start" | "End"): void;
    /**
     * Set the associated object(s) to a certain position. First the interactor must check
     * if the passed stage is the same as set for the interactor. Then it must apply the
     * position accordingly. Note. There is no implication about any sequence or direction,
     * the positions are set. Thus the interactor implementation must be functional without
     * any side effects.
     * @param stage The stage is either 1 or--in multi-staged animations--a number greater than 1.
     * @param position The position is a number from 0.0 to 1.0, relative to a stage.
     */
    SetStagePosition(stage: number, position: number): void;
    /**
     * Initialization of position on interaction start.
     *
     * @param touch The touch event.
     */
    SingleTouchStart(touch: Touch): void;
    /**
     * Handle single touch motion.
     *
     * @param touch The touch event.
     */
    SingleTouchMotion(touch: Touch): void;
    /**
     * Handle single touch end.
     *
     * @param touch The touch event.
     */
    SingleTouchEnd(touch: Touch): void;
}
