@openhps/core
Version:
Open Hybrid Positioning System - Core component
68 lines • 2.73 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.ReferenceSpaceConversionNode = void 0;
const ObjectProcessingNode_1 = require("../ObjectProcessingNode");
const data_1 = require("../../data");
/**
* This node converts the positions of data objects inside the frame
* to another reference space.
* @category Processing node
*/
class ReferenceSpaceConversionNode extends ObjectProcessingNode_1.ObjectProcessingNode {
constructor(referenceSpace, options) {
super(options);
if (referenceSpace instanceof data_1.ReferenceSpace) {
this._referenceSpace = referenceSpace;
this._referenceSpaceUID = referenceSpace.uid;
}
else {
this._referenceSpaceUID = referenceSpace;
}
this.once('build', this._onRegisterService.bind(this));
}
_onRegisterService() {
return new Promise((resolve) => {
const service = this.graph.findDataService(data_1.ReferenceSpace);
// Update reference space when modified
service.on('insert', (uid, space) => {
if (uid === this._referenceSpaceUID) {
this._referenceSpace = space;
}
});
// Update to the latest version
service
.findByUID(this._referenceSpaceUID)
.then((space) => {
this._referenceSpace = space;
resolve();
})
.catch(() => {
// Ignore, most likely not calibrated or stored yet
resolve();
});
});
}
processObject(object, frame) {
return new Promise((resolve) => {
// First check if a reference space is provided inside
// the data frame. If not, use the stored reference space
let referenceSpace = frame.getObjectByUID(this._referenceSpaceUID);
if (referenceSpace === null || referenceSpace === undefined) {
referenceSpace = this._referenceSpace;
}
if (object.getPosition() && object.uid !== referenceSpace.uid) {
if (this.options.inverse) {
// Convert from reference space to global
object.setPosition(object.getPosition(), referenceSpace);
}
else {
// Convert global space to reference space
object.setPosition(object.getPosition(referenceSpace));
}
}
resolve(object);
});
}
}
exports.ReferenceSpaceConversionNode = ReferenceSpaceConversionNode;
//# sourceMappingURL=ReferenceSpaceConversionNode.js.map