diff --git a/extensions/cornerstone/src/utils/getCornerstoneOrientation.ts b/extensions/cornerstone/src/utils/getCornerstoneOrientation.ts index 1c91dfb13..e37177d55 100644 --- a/extensions/cornerstone/src/utils/getCornerstoneOrientation.ts +++ b/extensions/cornerstone/src/utils/getCornerstoneOrientation.ts @@ -17,7 +17,6 @@ export default function getCornerstoneOrientation( case CORONAL: return Enums.OrientationAxis.CORONAL; default: - log.wanr('Choosing acquisition plane orientation'); return Enums.OrientationAxis.ACQUISITION; } } diff --git a/platform/core/src/utils/isDisplaySetReconstructable.js b/platform/core/src/utils/isDisplaySetReconstructable.js index 960796876..55539d143 100644 --- a/platform/core/src/utils/isDisplaySetReconstructable.js +++ b/platform/core/src/utils/isDisplaySetReconstructable.js @@ -38,9 +38,50 @@ export default function isDisplaySetReconstructable(instances) { } } -function processMultiframe(instance) { - //TODO: deal with multriframe checks! return false for now as can't reconstruct. - return { value: false }; +function processMultiframe(multiFrameInstance) { + const { + PerFrameFunctionalGroupsSequence, + SharedFunctionalGroupsSequence, + } = multiFrameInstance; + + // If we don't have the PixelMeasuresSequence, then the pixel spacing and + // slice thickness isn't specified or is changing and we can't reconstruct + // the dataset. + if ( + !SharedFunctionalGroupsSequence || + !SharedFunctionalGroupsSequence[0].PixelMeasuresSequence + ) { + return { value: false }; + } + + // Check that the orientation is either shared or with the allowed + // difference amount + const { + PlaneOrientationSequence: sharedOrientation, + } = SharedFunctionalGroupsSequence; + + if (!sharedOrientation) { + const { + PlaneOrientationSequence: firstOrientation, + } = PerFrameFunctionalGroupsSequence[0]; + + if (!firstOrientation) { + console.log('No orientation information'); + return { value: false }; + } + // TODO - check orientation consistency + } + + const frame0 = PerFrameFunctionalGroupsSequence[0]; + const firstPosition = + frame0.PlanePositionSequence || frame0.CTPositionSequence; + if (!firstPosition) { + console.log('No image position information, not reconstructable'); + return { value: false }; + } + // TODO - check spacing consistency + + return { value: true }; } function processSingleframe(instances) { diff --git a/platform/viewer/public/config/multiple.js b/platform/viewer/public/config/multiple.js index 3a6f4d24d..5ff3b2344 100644 --- a/platform/viewer/public/config/multiple.js +++ b/platform/viewer/public/config/multiple.js @@ -57,6 +57,25 @@ window.config = { singlepart: 'bulkdata,video,pdf', }, }, + { + friendlyName: 'dcmjs DICOMWeb Server', + namespace: '@ohif/extension-default.dataSourcesModule.dicomweb', + sourceName: 'shared', + configuration: { + name: 'shared', + qidoRoot: 'https://domvja9iplmyu.cloudfront.net/dicomweb', + wadoRoot: 'https://domvja9iplmyu.cloudfront.net/dicomweb', + qidoSupportsIncludeField: false, + supportsReject: false, + imageRendering: 'wadors', + thumbnailRendering: 'wadors', + enableStudyLazyLoad: true, + supportsFuzzyMatching: false, + supportsWildcard: true, + staticWado: true, + singlepart: 'bulkdata,video,pdf', + }, + }, { friendlyName: 'E2E Test Data', namespace: '@ohif/extension-default.dataSourcesModule.dicomweb',