@openhps/core
Version:
Open Hybrid Positioning System - Core component
33 lines • 1.43 kB
JavaScript
import { ObjectProcessingNode } from '../ObjectProcessingNode';
/**
* Relative position processing node.
* @category Processing node
*/
export class RelativePositionProcessing extends ObjectProcessingNode {
constructor(relativePositionType, options) {
super(options);
this._relativePositionType = relativePositionType;
}
processObject(dataObject, dataFrame) {
return new Promise((resolve, reject) => {
const referencePromises = [];
const index = new Map();
for (const relativePosition of dataObject.relativePositions) {
// Only use relative positions that are instance of relativePositionType
if (relativePosition instanceof this._relativePositionType) {
index.set(relativePosition.referenceObjectUID, relativePosition);
referencePromises.push(this.findObjectByUID(relativePosition.referenceObjectUID, dataFrame, relativePosition.referenceObjectType));
}
}
Promise.all(referencePromises).then(referenceObjects => {
const relativePositions = new Map();
referenceObjects.filter(obj => obj !== undefined).forEach(referenceObject => {
relativePositions.set(index.get(referenceObject.uid), referenceObject);
});
return this.processRelativePositions(dataObject, relativePositions, dataFrame);
}).then(modifiedObject => {
resolve(modifiedObject);
}).catch(reject);
});
}
}