UNPKG

@itwin/core-common

Version:

iTwin.js components common to frontend and backend

83 lines 3.24 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, Vector3d, YawPitchRollAngles } from "@itwin/core-geometry"; /** A single line of text, all with the same font, styles (underline, bold, italic), and size. * This class also holds the origin and direction for the text. * A paragraph is composed of one or more instances of TextStrings. * @public */ export class TextString { /** Text string */ text; /** FontId for this TextString. FontIds are mapped to font names and types via the FontMap */ font; /* text height, in meters */ height; /* width / height ratio. Default is 1.0 */ widthFactor; /** bold text. Default is false */ bold; /** italic text. Default is false */ italic; /** underline text. Default is false */ underline; /** position relative to element's placement */ origin; /** Rotation relative to element's placement */ rotation; get width() { return this.height * (this.widthFactor ? this.widthFactor : 1.0); } constructor(props) { this.text = props.text; this.font = props.font; this.height = props.height; this.widthFactor = props.widthFactor; this.bold = props.bold; this.italic = props.italic; this.underline = props.underline; this.origin = Point3d.fromJSON(props.origin); this.rotation = YawPitchRollAngles.fromJSON(props.rotation); } toJSON() { const props = { text: this.text, font: this.font, height: this.height, widthFactor: this.widthFactor, bold: this.bold, italic: this.italic, underline: this.underline, }; if (!this.origin.isAlmostZero) { props.origin = this.origin.toJSON(); } if (!this.rotation.isIdentity()) { props.rotation = this.rotation.toJSON(); } return props; } transformInPlace(transform) { const newOrigin = transform.multiplyPoint3d(this.origin, this.origin); const newTransform = this.rotation.toMatrix3d().multiplyMatrixTransform(transform); const scales = new Vector3d(); if (!newTransform.matrix.normalizeColumnsInPlace(scales)) return false; const newRotation = YawPitchRollAngles.createFromMatrix3d(newTransform.matrix); if (undefined === newRotation) return false; const newHeight = this.height * scales.y; const newWidth = this.width * scales.x; if (newHeight < 1.0e-10 || newWidth < 1.0e-10) return false; this.origin.setFrom(newOrigin); this.rotation.setFrom(newRotation); this.height = newHeight; this.widthFactor = (newHeight === newWidth ? undefined : (newWidth / newHeight)); return true; } } //# sourceMappingURL=TextString.js.map