61 lines
2.0 KiB
JavaScript
61 lines
2.0 KiB
JavaScript
import { adaptersSR } from '@cornerstonejs/adapters';
|
|
|
|
const cornerstoneAdapters =
|
|
adaptersSR.Cornerstone3D.MeasurementReport.CORNERSTONE_TOOL_CLASSES_BY_UTILITY_TYPE;
|
|
|
|
const supportedLegacyCornerstoneTags = ['cornerstoneTools@^4.0.0'];
|
|
const CORNERSTONE_3D_TAG = adaptersSR.Cornerstone3D.CORNERSTONE_3D_TAG;
|
|
|
|
/**
|
|
* Checks if the given `displaySet`can be rehydrated into the `measurementService`.
|
|
*
|
|
* @param {object} displaySet The SR `displaySet` to check.
|
|
* @param {object[]} mappings The CornerstoneTools 4 mappings to the `measurementService`.
|
|
* @returns {boolean} True if the SR can be rehydrated into the `measurementService`.
|
|
*/
|
|
export default function isRehydratable(displaySet, mappings) {
|
|
if (!mappings || !mappings.length) {
|
|
return false;
|
|
}
|
|
|
|
const mappingDefinitions = mappings.map(m => m.annotationType);
|
|
const { measurements } = displaySet;
|
|
|
|
const adapterKeys = Object.keys(cornerstoneAdapters).filter(
|
|
adapterKey =>
|
|
typeof cornerstoneAdapters[adapterKey].isValidCornerstoneTrackingIdentifier === 'function'
|
|
);
|
|
|
|
const adapters = [];
|
|
|
|
adapterKeys.forEach(key => {
|
|
if (mappingDefinitions.includes(key)) {
|
|
// Must have both a dcmjs adapter and a measurementService
|
|
// Definition in order to be a candidate for import.
|
|
adapters.push(cornerstoneAdapters[key]);
|
|
}
|
|
});
|
|
|
|
for (let i = 0; i < measurements.length; i++) {
|
|
const { TrackingIdentifier } = measurements[i] || {};
|
|
const hydratable = adapters.some(adapter => {
|
|
let [cornerstoneTag, toolName] = TrackingIdentifier.split(':');
|
|
if (supportedLegacyCornerstoneTags.includes(cornerstoneTag)) {
|
|
cornerstoneTag = CORNERSTONE_3D_TAG;
|
|
}
|
|
|
|
const mappedTrackingIdentifier = `${cornerstoneTag}:${toolName}`;
|
|
|
|
return adapter.isValidCornerstoneTrackingIdentifier(mappedTrackingIdentifier);
|
|
});
|
|
|
|
if (hydratable) {
|
|
return true;
|
|
}
|
|
console.log('Measurement is not rehydratable', TrackingIdentifier, measurements[i]);
|
|
}
|
|
|
|
console.log('No measurements found which were rehydratable');
|
|
return false;
|
|
}
|