@openhps/core
Version:
Open Hybrid Positioning System - Core component
128 lines • 4.64 kB
JavaScript
;
var Quaternion_1;
Object.defineProperty(exports, "__esModule", { value: true });
exports.Quaternion = void 0;
const tslib_1 = require("tslib");
const decorators_1 = require("../../data/decorators");
const THREE = require("./_internal");
const Euler_1 = require("./Euler");
const Matrix4_1 = require("./Matrix4");
const AxisAngle_1 = require("./AxisAngle");
const Vector3_1 = require("./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_1.Euler) {
quaternion.setFromEuler(euler);
}
else if (euler instanceof Vector3_1.Vector3) {
quaternion.setFromEuler(new Euler_1.Euler(euler.x, euler.y, euler.z));
}
else if (euler instanceof Array) {
quaternion.setFromEuler(new Euler_1.Euler(euler[0], euler[1], euler[2]));
}
else if (euler['yaw'] === undefined) {
quaternion.setFromEuler(new Euler_1.Euler(euler.x, euler.y, euler.z, euler.order, euler.unit));
}
else {
quaternion.setFromEuler(new Euler_1.Euler(euler.roll, euler.pitch, euler.yaw, 'ZYX', euler.unit));
}
return quaternion;
}
static fromAxisAngle(axis) {
const quaternion = new this();
if (axis instanceof AxisAngle_1.AxisAngle) {
quaternion.setFromAxisAngle(new Vector3_1.Vector3(axis.x, axis.y, axis.z), axis.angle);
}
else if (axis instanceof Array) {
const axisAngle = new AxisAngle_1.AxisAngle(axis[0], axis[1], axis[2], axis.length === 4 ? axis[3] : null);
quaternion.setFromAxisAngle(axisAngle, axisAngle.angle);
}
else {
const axisAngle = new AxisAngle_1.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_1.Euler.fromQuaternion(this, order);
}
/**
* Convert the quaternion to axis angles
* @returns {AxisAngle} Converted axis angle
*/
toAxisAngle() {
return AxisAngle_1.AxisAngle.fromQuaternion(this);
}
/**
* Convert quaternion to rotation matrix
* @returns {Matrix4} Rotation matrix
*/
toRotationMatrix() {
return Matrix4_1.Matrix4.rotationFromQuaternion(this);
}
clone() {
return new this.constructor().copy(this);
}
};
exports.Quaternion = Quaternion;
tslib_1.__decorate([
(0, decorators_1.SerializableMember)({
numberType: decorators_1.NumberType.DECIMAL,
}),
tslib_1.__metadata("design:type", Number)
], Quaternion.prototype, "x", void 0);
tslib_1.__decorate([
(0, decorators_1.SerializableMember)({
numberType: decorators_1.NumberType.DECIMAL,
}),
tslib_1.__metadata("design:type", Number)
], Quaternion.prototype, "y", void 0);
tslib_1.__decorate([
(0, decorators_1.SerializableMember)({
numberType: decorators_1.NumberType.DECIMAL,
}),
tslib_1.__metadata("design:type", Number)
], Quaternion.prototype, "z", void 0);
tslib_1.__decorate([
(0, decorators_1.SerializableMember)({
numberType: decorators_1.NumberType.DECIMAL,
}),
tslib_1.__metadata("design:type", Number)
], Quaternion.prototype, "w", void 0);
exports.Quaternion = Quaternion = Quaternion_1 = tslib_1.__decorate([
(0, decorators_1.SerializableObject)()
], Quaternion);
//# sourceMappingURL=Quaternion.js.map