@openhps/core
Version:
Open Hybrid Positioning System - Core component
117 lines • 3.95 kB
JavaScript
;
var Euler_1;
Object.defineProperty(exports, "__esModule", { value: true });
exports.Euler = void 0;
const tslib_1 = require("tslib");
const decorators_1 = require("../../data/decorators");
const THREE = require("./_internal");
const Matrix4_1 = require("./Matrix4");
const AngleUnit_1 = require("../unit/AngleUnit");
const Vector3_1 = require("./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_1.AngleUnit.RADIAN);
this.y = unit.convert(this.y, AngleUnit_1.AngleUnit.RADIAN);
this.z = unit.convert(this.z, AngleUnit_1.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_1.AngleUnit.RADIAN) {
return new Vector3_1.Vector3(AngleUnit_1.AngleUnit.RADIAN.convert(this.x, unit), AngleUnit_1.AngleUnit.RADIAN.convert(this.y, unit), AngleUnit_1.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_1.Matrix4.rotationFromEuler(this);
}
/**
* Get pitch in degrees
* @returns {number} Pitch in degrees
*/
get pitch() {
return AngleUnit_1.AngleUnit.RADIAN.convert(this.y, AngleUnit_1.AngleUnit.DEGREE);
}
/**
* Get roll in degrees
* @returns {number} Roll in degrees
*/
get roll() {
return AngleUnit_1.AngleUnit.RADIAN.convert(this.x, AngleUnit_1.AngleUnit.DEGREE);
}
/**
* Get yaw in degrees
* @returns {number} Yaw in degrees
*/
get yaw() {
return AngleUnit_1.AngleUnit.RADIAN.convert(this.z, AngleUnit_1.AngleUnit.DEGREE);
}
clone() {
return new this.constructor().copy(this);
}
};
exports.Euler = Euler;
tslib_1.__decorate([
(0, decorators_1.SerializableMember)({
numberType: decorators_1.NumberType.DECIMAL,
}),
tslib_1.__metadata("design:type", Number)
], Euler.prototype, "x", void 0);
tslib_1.__decorate([
(0, decorators_1.SerializableMember)({
numberType: decorators_1.NumberType.DECIMAL,
}),
tslib_1.__metadata("design:type", Number)
], Euler.prototype, "y", void 0);
tslib_1.__decorate([
(0, decorators_1.SerializableMember)({
numberType: decorators_1.NumberType.DECIMAL,
}),
tslib_1.__metadata("design:type", Number)
], Euler.prototype, "z", void 0);
exports.Euler = Euler = Euler_1 = tslib_1.__decorate([
(0, decorators_1.SerializableObject)(),
tslib_1.__metadata("design:paramtypes", [Number, Number, Number, String, AngleUnit_1.AngleUnit])
], Euler);
//# sourceMappingURL=Euler.js.map