fix(MetadataProvider): Correctly assign imageId for multiframe images and remove unused frame information retrieval method (#5965)
This commit is contained in:
1 parent
2c54616136
commit
1eee3e6119
7 files changed
+369
-43
No files matched your search
@@ -14,14 +14,13 @@ const DYNAMIC_VOLUME_LOADER_SCHEME = 'cornerstoneStreamingDynamicImageVolume';
|
||||
const sopClassHandlerName = 'stack';
|
||||
let appContext = {};
|
||||
|
||||
const getDynamicVolumeInfo = instances => {
|
||||
const getDynamicVolumeInfo = imageIds => {
|
||||
const { extensionManager } = appContext;
|
||||
|
||||
if (!extensionManager) {
|
||||
throw new Error('extensionManager is not available');
|
||||
}
|
||||
|
||||
const imageIds = instances.map(({ imageId }) => imageId);
|
||||
const volumeLoaderUtility = extensionManager.getModuleEntry(
|
||||
'@ohif/extension-cornerstone.utilityModule.volumeLoader'
|
||||
);
|
||||
@@ -34,8 +33,8 @@ const isMultiFrame = instance => {
|
||||
return instance.NumberOfFrames > 1;
|
||||
};
|
||||
|
||||
function getDisplaySetInfo(instances) {
|
||||
const dynamicVolumeInfo = getDynamicVolumeInfo(instances);
|
||||
function getDisplaySetInfo(instances, imageIds) {
|
||||
const dynamicVolumeInfo = getDynamicVolumeInfo(imageIds);
|
||||
const { isDynamicVolume, timePoints } = dynamicVolumeInfo;
|
||||
let displaySetInfo;
|
||||
|
||||
@@ -82,12 +81,13 @@ const makeDisplaySet = (instances, index) => {
|
||||
const imageSet = new ImageSet(instances);
|
||||
const { extensionManager } = appContext;
|
||||
const dataSource = extensionManager.getActiveDataSource()[0];
|
||||
const imageIds = dataSource.getImageIdsForDisplaySet(imageSet);
|
||||
const {
|
||||
isDynamicVolume,
|
||||
value: isReconstructable,
|
||||
averageSpacingBetweenFrames,
|
||||
dynamicVolumeInfo,
|
||||
} = getDisplaySetInfo(instances);
|
||||
} = getDisplaySetInfo(instances, imageIds);
|
||||
|
||||
const volumeLoaderSchema = isDynamicVolume
|
||||
? DYNAMIC_VOLUME_LOADER_SCHEME
|
||||
@@ -124,7 +124,6 @@ const makeDisplaySet = (instances, index) => {
|
||||
FrameOfReferenceUID: instance.FrameOfReferenceUID,
|
||||
});
|
||||
|
||||
const imageIds = dataSource.getImageIdsForDisplaySet(imageSet);
|
||||
let imageId = imageIds[Math.floor(imageIds.length / 2)];
|
||||
let thumbnailInstance = instances[Math.floor(instances.length / 2)];
|
||||
if (isDynamicVolume) {
|
||||
|
||||
@@ -0,0 +1,74 @@
|
||||
jest.mock('./getDisplaySetMessages', () => jest.fn(() => ({ addMessage: jest.fn() })));
|
||||
jest.mock('./getDisplaySetsFromUnsupportedSeries', () => jest.fn());
|
||||
|
||||
import getSopClassHandlerModule from './getSopClassHandlerModule';
|
||||
|
||||
const makeInstance = () => ({
|
||||
imageId: 'dicomfile:blob://local-multiframe',
|
||||
url: 'dicomfile:blob://local-multiframe',
|
||||
NumberOfFrames: 4,
|
||||
Rows: 2,
|
||||
Columns: 2,
|
||||
PixelSpacing: [1, 1],
|
||||
SliceThickness: 1,
|
||||
ImageOrientationPatient: [1, 0, 0, 0, 1, 0],
|
||||
ImagePositionPatient: [0, 0, 0],
|
||||
FrameOfReferenceUID: 'frame-of-reference',
|
||||
StudyInstanceUID: 'study',
|
||||
SeriesInstanceUID: 'series',
|
||||
SOPInstanceUID: 'sop',
|
||||
SOPClassUID: '1.2.840.10008.5.1.4.1.1.2.1',
|
||||
Modality: 'CT',
|
||||
SeriesDescription: 'Local multiframe CT',
|
||||
SeriesNumber: 1,
|
||||
});
|
||||
|
||||
describe('getSopClassHandlerModule', () => {
|
||||
it('checks dynamic volume grouping with generated multiframe imageIds', () => {
|
||||
const frameImageIds = [
|
||||
'dicomfile:blob://local-multiframe&frame=1',
|
||||
'dicomfile:blob://local-multiframe&frame=2',
|
||||
'dicomfile:blob://local-multiframe&frame=3',
|
||||
'dicomfile:blob://local-multiframe&frame=4',
|
||||
];
|
||||
const getDynamicVolumeInfo = jest.fn(() => ({
|
||||
isDynamicVolume: false,
|
||||
timePoints: [frameImageIds],
|
||||
splittingTag: null,
|
||||
}));
|
||||
const dataSource = {
|
||||
getImageIdsForDisplaySet: jest.fn(() => frameImageIds),
|
||||
retrieve: {
|
||||
getGetThumbnailSrc: jest.fn(),
|
||||
},
|
||||
};
|
||||
const customizationService = {
|
||||
getCustomization: jest.fn(() => ({
|
||||
sortFunctions: {},
|
||||
defaultSortFunctionName: 'default',
|
||||
})),
|
||||
};
|
||||
const appContext = {
|
||||
appConfig: {},
|
||||
extensionManager: {
|
||||
getActiveDataSource: jest.fn(() => [dataSource]),
|
||||
getModuleEntry: jest.fn(() => ({
|
||||
exports: {
|
||||
getDynamicVolumeInfo,
|
||||
},
|
||||
})),
|
||||
},
|
||||
servicesManager: {
|
||||
services: {
|
||||
customizationService,
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
const stackHandler = getSopClassHandlerModule(appContext)[0];
|
||||
|
||||
stackHandler.getDisplaySetsFromSeries([makeInstance()]);
|
||||
|
||||
expect(getDynamicVolumeInfo).toHaveBeenCalledWith(frameImageIds);
|
||||
});
|
||||
});
|
||||
Reference in new issue
Block a user