diff --git a/extensions/cornerstone/src/hps/mpr.ts b/extensions/cornerstone/src/hps/mpr.ts index c28c8a537..ed22e2843 100644 --- a/extensions/cornerstone/src/hps/mpr.ts +++ b/extensions/cornerstone/src/hps/mpr.ts @@ -20,6 +20,34 @@ export const HYDRATE_SEG_SYNC_GROUP = { }, }; +const viewportStructure = { + layoutType: 'grid', + properties: { + rows: 1, + columns: 3, + layoutOptions: [ + { + x: 0, + y: 0, + width: 1 / 3, + height: 1, + }, + { + x: 1 / 3, + y: 0, + width: 1 / 3, + height: 1, + }, + { + x: 2 / 3, + y: 0, + width: 1 / 3, + height: 1, + }, + ], + }, +}; + export const mpr: Types.HangingProtocol.Protocol = { id: 'mpr', name: i18n.t('Hps:MPR'), @@ -53,33 +81,7 @@ export const mpr: Types.HangingProtocol.Protocol = { stages: [ { name: 'MPR 1x3', - viewportStructure: { - layoutType: 'grid', - properties: { - rows: 1, - columns: 3, - layoutOptions: [ - { - x: 0, - y: 0, - width: 1 / 3, - height: 1, - }, - { - x: 1 / 3, - y: 0, - width: 1 / 3, - height: 1, - }, - { - x: 2 / 3, - y: 0, - width: 1 / 3, - height: 1, - }, - ], - }, - }, + viewportStructure, viewports: [ { viewportOptions: { @@ -134,5 +136,63 @@ export const mpr: Types.HangingProtocol.Protocol = { }, ], }, + + { + name: 'MPR Reformat 1x3', + viewportStructure, + viewports: [ + { + viewportOptions: { + viewportId: 'mpr-axial', + toolGroupId: 'mpr', + viewportType: 'volume', + orientation: 'axial_reformat', + initialImageOptions: { + preset: 'middle', + }, + syncGroups: [VOI_SYNC_GROUP, HYDRATE_SEG_SYNC_GROUP], + }, + displaySets: [ + { + id: 'activeDisplaySet', + }, + ], + }, + { + viewportOptions: { + viewportId: 'mpr-sagittal', + toolGroupId: 'mpr', + viewportType: 'volume', + orientation: 'sagittal_reformat', + initialImageOptions: { + preset: 'middle', + }, + syncGroups: [VOI_SYNC_GROUP, HYDRATE_SEG_SYNC_GROUP], + }, + displaySets: [ + { + id: 'activeDisplaySet', + }, + ], + }, + { + viewportOptions: { + viewportId: 'mpr-coronal', + toolGroupId: 'mpr', + viewportType: 'volume', + orientation: 'coronal_reformat', + initialImageOptions: { + preset: 'middle', + }, + syncGroups: [VOI_SYNC_GROUP, HYDRATE_SEG_SYNC_GROUP], + }, + displaySets: [ + { + id: 'activeDisplaySet', + }, + ], + }, + ], + }, ], }; diff --git a/extensions/cornerstone/src/utils/getCornerstoneOrientation.test.ts b/extensions/cornerstone/src/utils/getCornerstoneOrientation.test.ts index 0e8e18d5b..88842b759 100644 --- a/extensions/cornerstone/src/utils/getCornerstoneOrientation.test.ts +++ b/extensions/cornerstone/src/utils/getCornerstoneOrientation.test.ts @@ -8,6 +8,9 @@ jest.mock('@cornerstonejs/core', () => ({ SAGITTAL: 'sagittal', CORONAL: 'coronal', ACQUISITION: 'acquisition', + AXIAL_REFORMAT: 'axial_reformat', + SAGITTAL_REFORMAT: 'sagittal_reformat', + CORONAL_REFORMAT: 'coronal_reformat', }, }, })); @@ -33,6 +36,21 @@ describe('getCornerstoneOrientation', () => { expect(result).toBe(Enums.OrientationAxis.CORONAL); }); + it('should return AXIAL_REFORMAT when orientation is axial_reformat', () => { + const result = getCornerstoneOrientation('axial_reformat'); + expect(result).toBe(Enums.OrientationAxis.AXIAL_REFORMAT); + }); + + it('should return SAGITTAL_REFORMAT when orientation is sagittal_reformat', () => { + const result = getCornerstoneOrientation('sagittal_reformat'); + expect(result).toBe(Enums.OrientationAxis.SAGITTAL_REFORMAT); + }); + + it('should return CORONAL_REFORMAT when orientation is coronal_reformat', () => { + const result = getCornerstoneOrientation('coronal_reformat'); + expect(result).toBe(Enums.OrientationAxis.CORONAL_REFORMAT); + }); + it('should return ACQUISITION for unknown orientation', () => { const result = getCornerstoneOrientation('unknown'); expect(result).toBe(Enums.OrientationAxis.ACQUISITION); diff --git a/extensions/cornerstone/src/utils/getCornerstoneOrientation.ts b/extensions/cornerstone/src/utils/getCornerstoneOrientation.ts index 6e47fe807..f72c6ed3f 100644 --- a/extensions/cornerstone/src/utils/getCornerstoneOrientation.ts +++ b/extensions/cornerstone/src/utils/getCornerstoneOrientation.ts @@ -3,16 +3,25 @@ import { Enums } from '@cornerstonejs/core'; const AXIAL = 'axial'; const SAGITTAL = 'sagittal'; const CORONAL = 'coronal'; +const AXIAL_REFORMAT = 'axial_reformat'; +const SAGITTAL_REFORMAT = 'sagittal_reformat'; +const CORONAL_REFORMAT = 'coronal_reformat'; export default function getCornerstoneOrientation(orientation: string): Enums.OrientationAxis { if (orientation) { switch (orientation.toLowerCase()) { case AXIAL: return Enums.OrientationAxis.AXIAL; + case AXIAL_REFORMAT: + return Enums.OrientationAxis.AXIAL_REFORMAT; case SAGITTAL: return Enums.OrientationAxis.SAGITTAL; + case SAGITTAL_REFORMAT: + return Enums.OrientationAxis.SAGITTAL_REFORMAT; case CORONAL: return Enums.OrientationAxis.CORONAL; + case CORONAL_REFORMAT: + return Enums.OrientationAxis.CORONAL_REFORMAT; default: return Enums.OrientationAxis.ACQUISITION; }