@openhps/core
Version:
Open Hybrid Positioning System - Core component
101 lines • 3.2 kB
JavaScript
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 };