/**
 * A two dimensional integer-based vector.
 * @docurl https://docs.daz3d.com/public/software/dazstudio/4/referenceguide/scripting/api_reference/object_index/int2_dz
 */
declare class DzInt2 extends Object {

    /* Properties */

    /**
     * Holds the height of this vector; an alias to the y component.
     */
    height: number; // Number

    /**
     * Holds the width of this vector; an alias for the x component.
     */
    width: number; // Number

    /**
     * Holds the x component of this vector.
     */
    x: number; // Number

    /**
     * Holds the y component of this vector.
     */
    y: number; // Number

    /* Constructors */

    /**
     * @param vec string | DzVec2
     */
    constructor(vec: string | DzVec2);

    /**
     * @param vec string | DzInt2
     */
    constructor(vec: string | DzInt2);

    /**
     * @param vec DzVec2 | DzInt2
     */
    constructor(vec: DzVec2 | DzInt2);

    constructor();

    /**
     * @param vec string
     */
    constructor(vec: string);

    /**
     * @param vec DzVec2
     */
    constructor(vec: DzVec2);

    /**
     * @param vec DzInt2
     */
    constructor(vec: DzInt2);

    /**
     * @param vals any[]
     */
    constructor(vals: any[]);

    /**
     * @param x number
     * @param y number
     */
    constructor(x: number, y: number);

    /* Methods */

    /**
     * Sets the value of each component to its respective absolute value.
     */
    abs(): void;

    /**
     * @param vec DzInt2 - The vector to add to this vector.
     * @returns DzInt2 A vector that is the result of adding vec to this vector.
     */
    add(vec: DzInt2): DzInt2;

    /**
     * @returns number The average of each component of this vector.
     * @since 4.9.3.118
     */
    average(): number; // Number

    /**
     * Clamps each component of this vector.
     * @param min number - The minimum value.
     * @param max number - The maximum value.
     * @since 4.9.3.118
     */
    clamp(min: number, max: number): void;

    /**
     * @param min number - The minimum value.
     * @param max number - The maximum value.
     * @returns DzInt2 A copy of this vector where each component has been clamped to min and max.
     * @since 4.9.3.118
     */
    clamped(min: number, max: number): DzInt2;

    /**
     * @param max number - The maximum value.
     * @returns DzInt2 A copy of this vector where each component has been clamped to max.
     * @since 4.9.3.118
     */
    clampedMax(max: number): DzInt2;

    /**
     * @param min number - The minimum value.
     * @returns DzInt2 A copy of this vector where each component has been clamped to min.
     * @since 4.9.3.118
     */
    clampedMin(min: number): DzInt2;

    /**
     * Clamps the maximum value for each component of this vector.
     * @param max number - The maximum value.
     * @since 4.9.3.118
     */
    clampMax(max: number): void;

    /**
     * Clamps the minimum value for each component of this vector.
     * @param min number - The minimum value.
     * @since 4.9.3.118
     */
    clampMin(min: number): void;

    /**
     * @param vec DzInt2 - The vector to divide by this vector.
     * @returns DzInt2 A vector that is the result of dividing vec by this vector.
     */
    divide(vec: DzInt2): DzInt2;

    /**
     * @returns DzInt2 A vector with components set to (1, 1).
     * @since 4.14.1.31
     */
    identity(): DzInt2;

    /**
     * @returns boolean true if both values are zero (0, 0), otherwise false.
     */
    isNull(): boolean; // Boolean

    /**
     * @returns number The length of this vector.
     */
    length(): number; // Number

    /**
     * @returns number The length of this vector, squared.
     */
    lengthSquared(): number; // Number

    /**
     * Performs a linear interpolation between v1 and v2 based on the value of t.
     * @param t number - The value to evaluate.
     * @param v1 DzInt2
     * @param v2 DzInt2
     * @returns DzInt2 v1 if t = 0. v2 if t = 1. Values outside the 0 ⇐ t ⇐ 1 range may also be used to return an extrapolated vector.
     * @since 4.9.3.118
     */
    linearInterp(t: number, v1: DzInt2, v2: DzInt2): DzInt2;

    /**
     * Sets this vector to (1, 1).
     */
    makeIdentity(): void;

    /**
     * Sets this vector to (0, 0).
     */
    makeZero(): void;

    /**
     * @returns number The rectilinear distance of this vector.
     */
    manhattanLength(): number; // Number

    /**
     * @param min number - The minimum value.
     * @param max number - The maximum value.
     * @returns DzInt2 A copy of this vector where each component has been modulated by min and max.
     * @since 4.9.3.118
     */
    modulate(min: number, max: number): DzInt2;

    /**
     * Modulates each component of this vector.
     * @param min number - The minimum value.
     * @param max number - The maximum value.
     * @since 4.9.3.118
     */
    modulo(min: number, max: number): void;

    /**
     * @param vec DzInt2 - The vector to multiply by this vector.
     * @returns DzInt2 A vector that is the result of multiplying vec by this vector.
     */
    multiply(vec: DzInt2): DzInt2;

    /**
     * Negates each component of this vector.
     */
    negate(): void;

    /**
     * Sets this vector to have a specific length in the current direction.
     * @param length number
     */
    setLength(length: number): void;

    /**
     * Sets the value of each component to its respective squared value.
     */
    square(): void;

    /**
     * @param vec DzInt2 - The vector to subtract from this vector.
     * @returns DzInt2 A vector that is the result of subtracting vec from this vector.
     */
    subtract(vec: DzInt2): DzInt2;

    /**
     * @returns string A string representation of the object.
     */
    toString(): string; // String

    /**
     * Swaps the values of x and y.
     */
    transpose(): void;

    /**
     * @returns DzInt2 A vector with components set to (0, 0).
     * @since 4.14.1.31
     */
    zero(): DzInt2;

    /* Undocumented Augment Members */

    /** @undocumented */
    objectName: string;

    /** @undocumented */
    destroyed(): any; // TODO ;

    /** @undocumented */
    destroyed(): any; // TODO ;

    /** @undocumented */
    deleteLater(): any; // TODO ;

    /** @undocumented */
    inherits(): any; // TODO ;

    /** @undocumented */
    className(): any; // TODO ;
}
