UNPKG

@itwin/core-common

Version:

iTwin.js components common to frontend and backend

104 lines 4.16 kB
/*--------------------------------------------------------------------------------------------- * Copyright (c) Bentley Systems, Incorporated. All rights reserved. * See LICENSE.md in the project root for license terms and full copyright notice. *--------------------------------------------------------------------------------------------*/ /** @packageDocumentation * @module Geometry */ import { Point3d, Range3d } from "@itwin/core-geometry"; /** Defines the 4 corners of an [[ImageGraphic]]. The points are expected to lie in a single plane and define a (possibly-skewed) quadrilateral. * The points map to the corners of the image as follows: * ` * 3____2 * | | * |____| * 0 1 * ` * The image can be flipped and/or rotated by specifying the points in a different order. * @public */ export class ImageGraphicCorners { 0; 1; 2; 3; constructor(p0, p1, p2, p3) { this[0] = p0; this[1] = p1; this[2] = p2; this[3] = p3; } static fromJSON(props) { return new ImageGraphicCorners(Point3d.fromJSON(props[0]), Point3d.fromJSON(props[1]), Point3d.fromJSON(props[2]), Point3d.fromJSON(props[3])); } static from4Points(points) { return new ImageGraphicCorners(points[0], points[1], points[2], points[3]); } clone() { return new ImageGraphicCorners(this[0].clone(), this[1].clone(), this[2].clone(), this[3].clone()); } toJSON() { return [this[0].toJSON(), this[1].toJSON(), this[2].toJSON(), this[3].toJSON()]; } } /** A geometric primitive that displays an image mapped to the corners of a quadrilateral, with an optional border. * The image is always displayed regardless of [[RenderMode]] or [[ViewFlags]], and is displayed without lighting. * @public */ export class ImageGraphic { /** The 4 corners of defining the quadrilateral on which the image is displayed. */ corners; /** The Id of the persistent [[Texture]] element defining the image to be displayed on the quadrilateral. */ textureId; /** Whether or not to draw a border around the image. */ hasBorder; /** Construct a new ImageGraphic. * @param corners Defines the 4 corners of the quadrilateral on which the image is to be displayed. The ImageGraphic takes ownership of this input. * @param textureId Identifies a persistent [[Texture]] element defining the image to be mapped onto the quadrilateral. * @param hasBorder Whether or not to display a border around the image. */ constructor(corners, textureId, hasBorder = false) { this.corners = corners; this.textureId = textureId; this.hasBorder = hasBorder; } static fromJSON(props) { const corners = ImageGraphicCorners.fromJSON(props.corners); return new ImageGraphic(corners, props.textureId, props.hasBorder); } clone() { return new ImageGraphic(this.corners.clone(), this.textureId, this.hasBorder); } cloneTransformed(transform) { const clone = this.clone(); clone.transformInPlace(transform); return clone; } toJSON() { return { corners: this.corners.toJSON(), textureId: this.textureId, hasBorder: this.hasBorder, }; } /** Computes and returns the range. * @param result If supplied, will be modified to hold the computed range and returned. * @returns The computed range. */ computeRange(result) { if (undefined === result) result = new Range3d(); else result.setNull(); result.extend(this.corners[0], this.corners[1], this.corners[2], this.corners[3]); return result; } /** Apply a transform to the corners of the quadrilateral. */ transformInPlace(transform) { transform.multiplyPoint3d(this.corners[0], this.corners[0]); transform.multiplyPoint3d(this.corners[1], this.corners[1]); transform.multiplyPoint3d(this.corners[2], this.corners[2]); transform.multiplyPoint3d(this.corners[3], this.corners[3]); } } //# sourceMappingURL=ImageGraphic.js.map