Nutrient Web SDK

Class Rect

A rect describes a rectangle in 2D space. It consists of a location (left and top) and dimensions (width and height). Provided values are defined in same units used by the page, point units. Point units are only equal to pixels when zoom value is 1.

It is an immutable object and thus can be updated using set(key, value), for example: rect.set("left", 20).

Class

Example

Create and update a rect.

const rect = new NutrientViewer.Geometry.Rect({
left: 10,
top: 20,
width: 30,
height: 40
});
rect = rect.set("left", 20);
rect.left; // => 20

Default Value

{ left: 0, top: 0, width: 0, height: 0 }

Hierarchy

ReadonlyImmutableRecordRect

Constructors

  • Parameters

    options{ height?: number; left?: number; top?: number; width?: number }
    Optional

Properties

height

Readonly
number

The height of the rect. This is equivalent to height of a NutrientViewer.Geometry.Size.

Default Value

0

left

Readonly
number

The left distance of the rect. This is equivalent to x of a NutrientViewer.Geometry.Point.

Default Value

0

top

Readonly
number

The top distance of the rect. This is equivalent to y of a NutrientViewer.Geometry.Point.

Default Value

0

width

Readonly
number

The width of the rect. This is equivalent to width of a NutrientViewer.Geometry.Size.

Default Value

0

Accessors

  • get bottom(): number

    Computes the bottom point in the rect by adding top and height.

    Returns

    number

Methods

  • Returns the record's [key, value] pairs, in the order its fields were defined.

    Returns

    IterableIterator<[string, unknown]>

    An iterator over the record's fields.

  • Expand the rect to include the list of points.

    Parameters

    ...pointsNutrientViewer.Geometry.Point<{ x: number; y: number }>[]

    Returns

    Example

    const rect = NutrientViewer.Geometry.Rect({
    left: 10,
    top: 10,
    width: 10,
    height: 10
    })

    const newRect = rect.expandToIncludePoints(new NutrientViewer.Geometry.Point({ x: 30, y: 30 }));
    // => Rect {left: 10, top: 10, width: 30, height: 30}
  • Grows the rect by growth on every side but keeps the center of the Rect at the same position.

    Parameters

    growthnumber

    The growth factor. It will be applied on every side, so the new width and height will increase by two times this factor.

    Returns

    Example

    const rect = new NutrientViewer.Geometry.Rect({ left: 10, top: 10, width: 10, height: 10 });
    rect.grow(5); // => Rect {left: 5, top: 5, width: 20, height: 20}
  • Test if a point is within the rect. This can be used for hit testing.

    Parameters

    The point that should be tested.

    Returns

    boolean

    true if the point is inside, false otherwise.

    Example

    const rect = new NutrientViewer.Geometry.Rect({ left: 10, top: 10, width: 10, height: 10 });
    rect.isPointInside(new NutrientViewer.Geometry.Point({ x: 15, y: 15 })); // => true
    rect.isPointInside(new NutrientViewer.Geometry.Point({ x: 25, y: 25 })); // => false
  • Test if a rect is completely inside this rect.

    Parameters

    The rect that should be tested.

    Returns

    boolean

    true if the rect is inside, false otherwise.

    Example

    const rect = new NutrientViewer.Geometry.Rect({ left: 10, top: 10, width: 10, height: 10 });

    const insideRect = new NutrientViewer.Geometry.Rect({ left: 12, top: 12, width: 5, height: 5 });
    const overlappingRect = new NutrientViewer.Geometry.Rect({ left: 5, top: 5, width: 10, height: 10 });
    const outsideRect = new NutrientViewer.Geometry.Rect({ left: 0, top: 0, width: 5, height: 5 });

    rect.isRectInside(insideRect); // => true
    rect.isRectInside(overlappingRect); // => false
    rect.isRectInside(outsideRect); // => false
  • Test if the union area of two rects is greater than zero.

    Parameters

    The rect that should be tested.

    Returns

    boolean

    true if the rect is overlapping, false otherwise.

    Example

    const rect = new NutrientViewer.Geometry.Rect({ left: 10, top: 10, width: 10, height: 10 });

    const insideRect = new NutrientViewer.Geometry.Rect({ left: 12, top: 12, width: 5, height: 5 });
    const overlappingRect = new NutrientViewer.Geometry.Rect({ left: 5, top: 5, width: 10, height: 10 });
    const outsideRect = new NutrientViewer.Geometry.Rect({ left: 0, top: 0, width: 5, height: 5 });

    rect.isRectOverlapping(insideRect); // => true
    rect.isRectOverlapping(overlappingRect); // => true
    rect.isRectOverlapping(outsideRect); // => false
  • Rounds all coordinates to whole numbers. This implementation uses Math.round for all coordinates. The resulting Rect might no longer overlap the source Rect.

    Returns

    Example

    const rect = new NutrientViewer.Geometry.Rect({ left: 10.5, top: 15.5, width: 20.5, height: 25.5 });
    rect.round(); // => Rect {left: 11, top: 16, width: 21, height: 26}
  • Rounds all coordinates to whole numbers. The resulting Rect will always overlap the source Rect.

    The location (left and top) will be rounded to a number which is smaller than or equal to the current value.

    The size (width and height) will be rounded to a number which is greater than or equal to the current value.

    Returns

    Example

    const rect = new NutrientViewer.Geometry.Rect({ left: 10.5, top: 15.5, width: 20.5, height: 25.5 });
    rect.roundOverlap(); // => Rect {left: 10, top: 15, width: 21, height: 26}
  • Scales all values by the given sx and sy factor. If only sx is set and sy not defined, it will scale the values by sx.

    Parameters

    sxnumber

    Scale value for the left and width value. If sy is not set, this scale will also be applied to top and height.

    synumber
    Optional

    Scale value for the top an height value.

    Returns

    Example

    const rect = new NutrientViewer.Geometry.Rect({ left: 10, top: 10, width: 10, height: 10 });
    rect.scale(2); // => Rect {left: 20, top: 20, width: 20, height: 20}
  • Updates the location of the rect by modifying left and top.

    Parameters

    The new location for the rect.

    Returns

    A new Rect with left and top updated.

    Example

    const rect = new NutrientViewer.Geometry.Rect({ left: 10, top: 10, width: 10, height: 10 });
    var nextLocation = new NutrientViewer.Geometry.Point({ x: 20, y: 30 });

    rect.setLocation(nextLocation); // => Rect {left: 20, top: 30, width: 10, height: 10}
  • Translates the horizontal location of the rect by a number.

    Parameters

    txnumber

    A number to translate the left value.

    Returns

    Example

    const rect = new NutrientViewer.Geometry.Rect({ left: 10, top: 10 });
    rect.translateX(5); // => Rect {left: 15, top: 10, width: 0, height: 0}
  • Translates the vertical location of the rect by a number.

    Parameters

    tynumber

    A number to translate the top value.

    Returns

    Example

    const rect = new NutrientViewer.Geometry.Rect({ left: 10, top: 10 });
    point.translateY(5); // => Rect {left: 10, top: 15, width: 0, height: 0}
  • Creates a new rect from a DOM rect.

    Parameters

    A DOM rect, such as the result of Element.getBoundingClientRect().

    Returns

    Example

    const rect = NutrientViewer.Geometry.Rect.fromClientRect(
    element.getBoundingClientRect()
    );
  • Creates a new rect from four points.

    Parameters

    ...pointsNutrientViewer.Geometry.Point<{ x: number; y: number }>[]

    An array of four points.

    Returns

    Example

    const rect = NutrientViewer.Geometry.Rect.fromPoints(
    new NutrientViewer.Geometry.Point({ x: 10, y: 10 }),
    new NutrientViewer.Geometry.Point({ x: 20, y: 10 }),
    new NutrientViewer.Geometry.Point({ x: 20, y: 20 }),
    new NutrientViewer.Geometry.Point({ x: 10, y: 20 })
    );

    @public

union

Static

Immutable Record API

27
  • Iterates the record's [key, value] pairs, in the order its fields were defined.

    Returns

    IterableIterator<[string, unknown]>
  • Returns a record with every key reset to the default it was defined with.

    Returns

    this

    A new record holding only default values.

  • Returns a record with key reset to the default it was defined with.

    Type Parameters

    Kextends keyof { height: number; left: number; top: number; width: number }

    Parameters

    keyK & ("left" | "top" | "width" | "height")

    One of the keys this record was defined with.

    Returns

    this

    A new record, or this one when the value already equals the default.

  • Returns a record with the value at keyPath removed. A field of this record is reset to its default; a key of a nested collection or plain object is deleted.

    Parameters

    keyPathIterable<unknown>

    The keys to follow, outermost first.

    Returns

    this

    A new record, or this one when nothing was removed.

equals

Deprecated
  • Reports whether other is a record holding the same keys with equal values, whatever its class.

    Parameters

    otherunknown

    The value to compare against.

    Returns

    boolean

    true when both hold the same keys and every value matches.

    Deprecated

    Records of different classes with identical values compare equal. Use isEqual(), which also requires both records to be of the same class.

  • Returns the value stored under key.

    Type Parameters

    Kextends keyof { height: number; left: number; top: number; width: number }
    N = never

    Parameters

    keyK & ("left" | "top" | "width" | "height")

    One of the keys this record was defined with.

    notSetValueN
    Optional

    Returned when the record does not define key.

    Returns

    N | { height: number; left: number; top: number; width: number }[K]

    The current value for that key.

  • Returns the value at keyPath, walking nested records and collections.

    A literal key path is checked against the record's fields and gives the value's type; a computed one gives unknown.

    Parameters

    keyPathIterable<unknown>

    The keys to follow, outermost first.

    Returns

    unknown

    The value at that path, or undefined when it does not resolve.

  • Returns the value at keyPath, walking nested records and collections.

    A literal key path is checked against the record's fields and gives the value's type; a computed one gives unknown.

    Type Parameters

    N

    Parameters

    keyPathIterable<unknown>

    The keys to follow, outermost first.

    notSetValueN

    Returned when the path does not resolve.

    Returns

    unknown

    The value at that path, or notSetValue.

  • Reports whether key is one of the keys this record was defined with.

    A literal key must name a field; a key typed as string is narrowed to the field names.

    Parameters

    keystring

    The key to look for.

    Returns

    key is "left" | "top" | "width" | "height"

    true when the record defines that key, even if its value is null.

  • Computes a hash of this record from its contents, the same way Immutable.js does. Equal records have equal hashes; records with equal hashes are not necessarily equal. Plain objects, functions and symbols hash by identity, so a hash is only meaningful within the page that computed it.

    Returns

    number

    An integer hash.

  • Reports whether keyPath resolves, walking nested records and collections.

    Parameters

    keyPathIterable<unknown>

    The keys to follow, outermost first.

    Returns

    boolean

    true when every key along the path is present.

  • Reports whether other is a record of the same class holding equal values. Only the two records' own classes are compared; nested records compare as equals() does.

    Parameters

    otherunknown

    The value to compare against.

    Returns

    boolean

    true when both are the same class and every value matches.

  • Returns a record with the entries of each collection applied in order.

    Keys the record was not defined with are ignored.

    Parameters

    ...collections(
    | Partial<{ height: number; left: number; top: number; width: number }>
    | Iterable<readonly [string, unknown]>
    )[]

    Plain objects or key/value iterables to apply.

    Returns

    this

    A new record, or this one when no value changed.

  • Returns a record with the entries of each collection merged in, recursing into nested collections and plain objects instead of replacing them.

    Keys the record was not defined with are ignored.

    Parameters

    ...collections(
    | Partial<{ left: number; top: number; width: number; height: number }>
    | Iterable<readonly [string, unknown]>
    )[]

    Plain objects or key/value iterables to merge in.

    Returns

    this

    A new record, or this one when no value changed.

  • Returns a record with each collection merged deeply into the value at keyPath.

    Parameters

    keyPathIterable<unknown>

    The keys to follow, outermost first.

    ...collectionsunknown[]

    Collections or plain objects to merge into the value there.

    Returns

    this

    A new record, or this one when the value is unchanged.

  • Returns a record with the entries of each collection merged in deeply, calling merger where a nested value is not a collection to decide the value that is kept.

    Keys the record was not defined with are ignored.

    Parameters

    merger(previous: unknown, next: unknown, key: unknown) => unknown

    Receives the current value, the incoming value and the key.

    ...collections(
    | Partial<{ left: number; top: number; width: number; height: number }>
    | Iterable<readonly [string, unknown]>
    )[]

    Plain objects or key/value iterables to merge in.

    Returns

    this

    A new record, or this one when no value changed.

  • Returns a record with each collection merged into the value at keyPath, one level at a time.

    Parameters

    keyPathIterable<unknown>

    The keys to follow, outermost first.

    ...collectionsunknown[]

    Collections or plain objects to merge into the value there.

    Returns

    this

    A new record, or this one when the value is unchanged.

  • Returns a record with the entries of each collection merged in, calling merger for each key the record already holds to decide the value that is kept.

    Keys the record was not defined with are ignored.

    Parameters

    merger<K extends string | number | symbol>(
    previous: { height: number; left: number; top: number; width: number }[K],
    next: { height: number; left: number; top: number; width: number }[K],
    key: K
    ) => { height: number; left: number; top: number; width: number }[K]

    Receives the current value, the incoming value and the key.

    ...collections(
    | Partial<{ height: number; left: number; top: number; width: number }>
    | Iterable<readonly [string, unknown]>
    )[]

    Plain objects or key/value iterables to merge in.

    Returns

    this

    A new record, or this one when no value changed.

  • An alias for delete.

    Type Parameters

    Kextends keyof { height: number; left: number; top: number; width: number }

    Parameters

    keyK & ("left" | "top" | "width" | "height")

    One of the keys this record was defined with.

    Returns

    this

    A new record, or this one when the value already equals the default.

  • An alias for deleteIn.

    Parameters

    keyPathIterable<unknown>

    The keys to follow, outermost first.

    Returns

    this

    A new record, or this one when nothing was removed.

  • Returns a record with key set to value.

    Setting a key to the value it already holds returns the same instance, so a record can be compared by reference to detect a change.

    Type Parameters

    Kextends keyof { height: number; left: number; top: number; width: number }

    Parameters

    keyK & ("left" | "top" | "width" | "height")

    One of the keys this record was defined with.

    value{ height: number; left: number; top: number; width: number }[K]

    The value to store.

    Returns

    this

    A new record, or this one when the value is unchanged or the key is not defined.

  • Returns a record with value written at keyPath.

    Parameters

    keyPathIterable<unknown>

    The keys to follow, outermost first.

    valueunknown

    The value to store.

    Returns

    this

    A new record, or this one when the value is unchanged.

  • Converts this record and everything nested inside it to plain JavaScript values.

    Returns

    { left: number; top: number; width: number; height: number }

    A plain object holding this record's values, converted all the way down.

  • An alias for toObject, called by JSON.stringify.

    Returns

    { height: number; left: number; top: number; width: number }

    A plain object holding this record's values.

  • Converts this record to a plain object, one level deep. Nested records are left as they are.

    Returns

    { height: number; left: number; top: number; width: number }

    A plain object holding this record's values.

  • Returns a record with key replaced by the result of applying updater to its current value.

    Type Parameters

    Kextends keyof { height: number; left: number; top: number; width: number }

    Parameters

    keyK & ("left" | "top" | "width" | "height")

    One of the keys this record was defined with.

    updater(
    value: { height: number; left: number; top: number; width: number }[K]
    ) => { height: number; left: number; top: number; width: number }[K]

    Receives the current value and returns the new one.

    Returns

    this

    A new record, or this one when the value is unchanged.

  • Returns a record with the value at keyPath replaced by the result of updater.

    Type Parameters

    N

    Parameters

    keyPathIterable<unknown>

    The keys to follow, outermost first.

    notSetValueN
    updater(value: unknown) => unknown

    Receives the current value and returns the new one.

    Returns

    this

    A new record, or this one when the value is unchanged.

  • Returns a record with the value at keyPath replaced by the result of updater.

    Parameters

    keyPathIterable<unknown>

    The keys to follow, outermost first.

    updater(value: unknown) => unknown

    Receives the current value and returns the new one.

    Returns

    this

    A new record, or this one when the value is unchanged.

  • Applies several changes as one, so only a single new record is allocated.

    The record handed to mutator may be written to with set; it is frozen again once mutator returns.

    Parameters

    mutator(mutable: this) => unknown

    Receives a temporarily writable copy of this record.

    Returns

    this

    A new record holding the applied changes, or this one when nothing changed.