UNPKG

@openhps/core

Version:

Open Hybrid Positioning System - Core component

101 lines 3.2 kB
var Euler_1; import { __decorate, __metadata } from "tslib"; import { SerializableObject, SerializableMember, NumberType } from '../../data/decorators'; import * as THREE from './_internal'; import { Matrix4 } from './Matrix4'; import { AngleUnit } from '../unit/AngleUnit'; import { Vector3 } from './Vector3'; /** * Serializable THREE.js Euler */ let Euler = Euler_1 = class Euler extends THREE.Euler { constructor(x, y, z, order, unit) { super(x, y, z, order); if (unit) { this.x = unit.convert(this.x, AngleUnit.RADIAN); this.y = unit.convert(this.y, AngleUnit.RADIAN); this.z = unit.convert(this.z, AngleUnit.RADIAN); } } /** * Convert quaternion to euler * @param {THREE.Quaternion} quat Quaternion * @param {string} [order] Euler order * @returns {Euler} Euler instance */ static fromQuaternion(quat, order = 'XYZ') { const euler = new Euler_1(); euler.setFromQuaternion(quat, order); return euler; } /** * Convert rotation matrix to euler * @param {Matrix4} matrix Rotation matrix * @param {string} [order] Euler order * @returns {Euler} Euler instance */ static fromRotationMatrix(matrix, order = 'XYZ') { const euler = new Euler_1(); euler.setFromRotationMatrix(matrix, order); return euler; } /** * Convert the Euler angles to a vector * @param {AngleUnit} [unit] Angle unit to use in vector * @returns {Vector3} Vector output of Euler angles */ toVector(unit = AngleUnit.RADIAN) { return new Vector3(AngleUnit.RADIAN.convert(this.x, unit), AngleUnit.RADIAN.convert(this.y, unit), AngleUnit.RADIAN.convert(this.z, unit)); } /** * Convert the Euler angles to a vector * @deprecated use {@link Euler.toVector} * @param {AngleUnit} [unit] Angle unit to use in vector * @returns {Vector3} Vector output of Euler angles */ toVector3(unit) { return this.toVector(unit); } /** * Convert quaternion to rotation matrix * @returns {Matrix4} Rotation matrix */ toRotationMatrix() { return Matrix4.rotationFromEuler(this); } /** * Get pitch in degrees * @returns {number} Pitch in degrees */ get pitch() { return AngleUnit.RADIAN.convert(this.y, AngleUnit.DEGREE); } /** * Get roll in degrees * @returns {number} Roll in degrees */ get roll() { return AngleUnit.RADIAN.convert(this.x, AngleUnit.DEGREE); } /** * Get yaw in degrees * @returns {number} Yaw in degrees */ get yaw() { return AngleUnit.RADIAN.convert(this.z, AngleUnit.DEGREE); } clone() { return new this.constructor().copy(this); } }; __decorate([SerializableMember({ numberType: NumberType.DECIMAL }), __metadata("design:type", Number)], Euler.prototype, "x", void 0); __decorate([SerializableMember({ numberType: NumberType.DECIMAL }), __metadata("design:type", Number)], Euler.prototype, "y", void 0); __decorate([SerializableMember({ numberType: NumberType.DECIMAL }), __metadata("design:type", Number)], Euler.prototype, "z", void 0); Euler = Euler_1 = __decorate([SerializableObject(), __metadata("design:paramtypes", [Number, Number, Number, String, AngleUnit])], Euler); export { Euler };