UNPKG

@openhps/core

Version:

Open Hybrid Positioning System - Core component

104 lines 3.78 kB
var Quaternion_1; import { __decorate, __metadata } from "tslib"; import { SerializableObject, SerializableMember, NumberType } from '../../data/decorators'; import * as THREE from './_internal'; import { Euler } from './Euler'; import { Matrix4 } from './Matrix4'; import { AxisAngle } from './AxisAngle'; import { Vector3 } from './Vector3'; /** * Serializable THREE.js Quaternion */ let Quaternion = Quaternion_1 = class Quaternion extends THREE.Quaternion { /** * Convert a threejs quaternion to serializable quaternion * @param {THREE.Quaternion} threeQuaternion ThreeJS created quaternion * @returns {Quaternion} Serializable quaternion */ static fromThreeJS(threeQuaternion) { const quaternion = new this(); quaternion.x = threeQuaternion.x; quaternion.y = threeQuaternion.y; quaternion.z = threeQuaternion.z; quaternion.w = threeQuaternion.w; return quaternion; } static fromEuler(euler) { const quaternion = new this(); if (euler instanceof Euler) { quaternion.setFromEuler(euler); } else if (euler instanceof Vector3) { quaternion.setFromEuler(new Euler(euler.x, euler.y, euler.z)); } else if (euler instanceof Array) { quaternion.setFromEuler(new Euler(euler[0], euler[1], euler[2])); } else if (euler['yaw'] === undefined) { quaternion.setFromEuler(new Euler(euler.x, euler.y, euler.z, euler.order, euler.unit)); } else { quaternion.setFromEuler(new Euler(euler.roll, euler.pitch, euler.yaw, 'ZYX', euler.unit)); } return quaternion; } static fromAxisAngle(axis) { const quaternion = new this(); if (axis instanceof AxisAngle) { quaternion.setFromAxisAngle(new Vector3(axis.x, axis.y, axis.z), axis.angle); } else if (axis instanceof Array) { const axisAngle = new AxisAngle(axis[0], axis[1], axis[2], axis.length === 4 ? axis[3] : null); quaternion.setFromAxisAngle(axisAngle, axisAngle.angle); } else { const axisAngle = new AxisAngle(axis.x, axis.y, axis.z, axis.angle ? axis.angle : null, axis.unit); quaternion.setFromAxisAngle(axisAngle, axisAngle.angle); } return quaternion; } /** * Convert rotation matrix to quaternion * @param {Quaternion} this This type * @param {Matrix4} matrix Rotation matrix * @returns {Quaternion} Serializable quaternion */ static fromRotationMatrix(matrix) { const quaternion = new this(); quaternion.setFromRotationMatrix(matrix); return quaternion; } /** * Convert the quaternion to euler angles * @param {EulerOrder} order Euler order * @returns {Euler} Converted euler */ toEuler(order) { return Euler.fromQuaternion(this, order); } /** * Convert the quaternion to axis angles * @returns {AxisAngle} Converted axis angle */ toAxisAngle() { return AxisAngle.fromQuaternion(this); } /** * Convert quaternion to rotation matrix * @returns {Matrix4} Rotation matrix */ toRotationMatrix() { return Matrix4.rotationFromQuaternion(this); } clone() { return new this.constructor().copy(this); } }; __decorate([SerializableMember({ numberType: NumberType.DECIMAL }), __metadata("design:type", Number)], Quaternion.prototype, "x", void 0); __decorate([SerializableMember({ numberType: NumberType.DECIMAL }), __metadata("design:type", Number)], Quaternion.prototype, "y", void 0); __decorate([SerializableMember({ numberType: NumberType.DECIMAL }), __metadata("design:type", Number)], Quaternion.prototype, "z", void 0); __decorate([SerializableMember({ numberType: NumberType.DECIMAL }), __metadata("design:type", Number)], Quaternion.prototype, "w", void 0); Quaternion = Quaternion_1 = __decorate([SerializableObject()], Quaternion); export { Quaternion };