fix(hydration): Maintain the same slice that the user was on pre hydration in post hydration for SR and SEG. (#4200)
This commit is contained in:
parent
ddc7559e16
commit
430330f7e3
@ -48,6 +48,7 @@ const commandsModule = ({
|
|||||||
displaySetService,
|
displaySetService,
|
||||||
viewportGridService,
|
viewportGridService,
|
||||||
toolGroupService,
|
toolGroupService,
|
||||||
|
cornerstoneViewportService,
|
||||||
} = servicesManager.services;
|
} = servicesManager.services;
|
||||||
|
|
||||||
const actions = {
|
const actions = {
|
||||||
@ -210,6 +211,8 @@ const commandsModule = ({
|
|||||||
const referencedDisplaySet = displaySetService.getDisplaySetByUID(
|
const referencedDisplaySet = displaySetService.getDisplaySetByUID(
|
||||||
displaySet.referencedDisplaySetInstanceUID
|
displaySet.referencedDisplaySetInstanceUID
|
||||||
);
|
);
|
||||||
|
const viewport = cornerstoneViewportService.getCornerstoneViewport(viewportId);
|
||||||
|
const initialSliceIndex = viewport.getSliceIndex();
|
||||||
|
|
||||||
updateViewportsForSegmentationRendering({
|
updateViewportsForSegmentationRendering({
|
||||||
viewportId,
|
viewportId,
|
||||||
@ -229,6 +232,7 @@ const commandsModule = ({
|
|||||||
segmentation.description = `S${referencedDisplaySet.SeriesNumber}: ${referencedDisplaySet.SeriesDescription}`;
|
segmentation.description = `S${referencedDisplaySet.SeriesNumber}: ${referencedDisplaySet.SeriesDescription}`;
|
||||||
return segmentationId;
|
return segmentationId;
|
||||||
},
|
},
|
||||||
|
initialSliceIndex,
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -11,6 +11,7 @@ import { Enums, cache } from '@cornerstonejs/core';
|
|||||||
* @param params.loadFn - Function to load the segmentation data.
|
* @param params.loadFn - Function to load the segmentation data.
|
||||||
* @param params.servicesManager - The services manager.
|
* @param params.servicesManager - The services manager.
|
||||||
* @param params.displaySet - the display set.
|
* @param params.displaySet - the display set.
|
||||||
|
* @param params.initialSliceIndex - The initial slice index.
|
||||||
*
|
*
|
||||||
* @returns Returns true upon successful update of viewports for segmentation rendering.
|
* @returns Returns true upon successful update of viewports for segmentation rendering.
|
||||||
*/
|
*/
|
||||||
@ -19,11 +20,13 @@ async function updateViewportsForSegmentationRendering({
|
|||||||
loadFn,
|
loadFn,
|
||||||
servicesManager,
|
servicesManager,
|
||||||
displaySet,
|
displaySet,
|
||||||
|
initialSliceIndex = null,
|
||||||
}: {
|
}: {
|
||||||
viewportId: string;
|
viewportId: string;
|
||||||
loadFn: () => Promise<string>;
|
loadFn: () => Promise<string>;
|
||||||
servicesManager: AppTypes.ServicesManager;
|
servicesManager: AppTypes.ServicesManager;
|
||||||
displaySet?: any;
|
displaySet?: any;
|
||||||
|
initialSliceIndex?: number;
|
||||||
}) {
|
}) {
|
||||||
const { cornerstoneViewportService, segmentationService, viewportGridService } =
|
const { cornerstoneViewportService, segmentationService, viewportGridService } =
|
||||||
servicesManager.services;
|
servicesManager.services;
|
||||||
@ -61,6 +64,14 @@ async function updateViewportsForSegmentationRendering({
|
|||||||
};
|
};
|
||||||
const viewportId = viewport.viewportId;
|
const viewportId = viewport.viewportId;
|
||||||
|
|
||||||
|
// maintain the prehydration slice on the target viewport only
|
||||||
|
if (viewportId === targetViewportId) {
|
||||||
|
viewport.viewportOptions.initialImageOptions = {
|
||||||
|
index: initialSliceIndex,
|
||||||
|
useOnce: true,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
const csViewport = cornerstoneViewportService.getCornerstoneViewport(viewportId);
|
const csViewport = cornerstoneViewportService.getCornerstoneViewport(viewportId);
|
||||||
const prevCamera = csViewport.getCamera();
|
const prevCamera = csViewport.getCamera();
|
||||||
|
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
import { PubSubService } from '@ohif/core';
|
import { PubSubService } from '@ohif/core';
|
||||||
import * as OhifTypes from '@ohif/core/types';
|
import { Types as OhifTypes } from '@ohif/core';
|
||||||
import {
|
import {
|
||||||
RenderingEngine,
|
RenderingEngine,
|
||||||
StackViewport,
|
StackViewport,
|
||||||
@ -617,11 +617,9 @@ class CornerstoneViewportService extends PubSubService implements IViewportServi
|
|||||||
imageIds?: string[]
|
imageIds?: string[]
|
||||||
): number {
|
): number {
|
||||||
const initialImageOptions = viewportInfo.getInitialImageOptions();
|
const initialImageOptions = viewportInfo.getInitialImageOptions();
|
||||||
|
|
||||||
if (!initialImageOptions) {
|
if (!initialImageOptions) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const { index, preset } = initialImageOptions;
|
const { index, preset } = initialImageOptions;
|
||||||
const viewportType = viewportInfo.getViewportType();
|
const viewportType = viewportInfo.getViewportType();
|
||||||
|
|
||||||
|
|||||||
@ -16,6 +16,7 @@ import { SyncGroup } from '../SyncGroupService/SyncGroupService';
|
|||||||
export type InitialImageOptions = {
|
export type InitialImageOptions = {
|
||||||
index?: number;
|
index?: number;
|
||||||
preset?: JumpPresets;
|
preset?: JumpPresets;
|
||||||
|
useOnce?: boolean;
|
||||||
};
|
};
|
||||||
|
|
||||||
export type ViewportOptions = {
|
export type ViewportOptions = {
|
||||||
|
|||||||
@ -120,10 +120,10 @@ function getHangingProtocolModule() {
|
|||||||
name: hpMammography.id,
|
name: hpMammography.id,
|
||||||
protocol: hpMammography,
|
protocol: hpMammography,
|
||||||
},
|
},
|
||||||
// {
|
{
|
||||||
// name: hpScale.id,
|
name: hpScale.id,
|
||||||
// protocol: hpScale,
|
protocol: hpScale,
|
||||||
// },
|
},
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -31,7 +31,12 @@ function TrackedMeasurementsContextProvider(
|
|||||||
|
|
||||||
const [viewportGrid, viewportGridService] = useViewportGrid();
|
const [viewportGrid, viewportGridService] = useViewportGrid();
|
||||||
const { activeViewportId, viewports } = viewportGrid;
|
const { activeViewportId, viewports } = viewportGrid;
|
||||||
const { measurementService, displaySetService, customizationService } = servicesManager.services;
|
const {
|
||||||
|
measurementService,
|
||||||
|
displaySetService,
|
||||||
|
customizationService,
|
||||||
|
cornerstoneViewportService,
|
||||||
|
} = servicesManager.services;
|
||||||
|
|
||||||
const machineOptions = Object.assign({}, defaultOptions);
|
const machineOptions = Object.assign({}, defaultOptions);
|
||||||
machineOptions.actions = Object.assign({}, machineOptions.actions, {
|
machineOptions.actions = Object.assign({}, machineOptions.actions, {
|
||||||
@ -81,6 +86,29 @@ function TrackedMeasurementsContextProvider(
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
|
jumpToSameImageInActiveViewport: (ctx, evt) => {
|
||||||
|
const { trackedStudy, trackedSeries, activeViewportId } = ctx;
|
||||||
|
const measurements = measurementService.getMeasurements();
|
||||||
|
const trackedMeasurements = measurements.filter(
|
||||||
|
m => trackedStudy === m.referenceStudyUID && trackedSeries.includes(m.referenceSeriesUID)
|
||||||
|
);
|
||||||
|
|
||||||
|
const trackedMeasurement = trackedMeasurements[0];
|
||||||
|
const referencedDisplaySetUID = trackedMeasurement.displaySetInstanceUID;
|
||||||
|
const viewport = cornerstoneViewportService.getCornerstoneViewport(activeViewportId);
|
||||||
|
const imageIndex = viewport.getCurrentImageIdIndex();
|
||||||
|
|
||||||
|
viewportGridService.setDisplaySetsForViewport({
|
||||||
|
viewportId: activeViewportId,
|
||||||
|
displaySetInstanceUIDs: [referencedDisplaySetUID],
|
||||||
|
viewportOptions: {
|
||||||
|
initialImageOptions: {
|
||||||
|
index: imageIndex,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
});
|
||||||
|
},
|
||||||
showStructuredReportDisplaySetInActiveViewport: (ctx, evt) => {
|
showStructuredReportDisplaySetInActiveViewport: (ctx, evt) => {
|
||||||
if (evt.data.createdDisplaySetInstanceUIDs.length > 0) {
|
if (evt.data.createdDisplaySetInstanceUIDs.length > 0) {
|
||||||
const StructuredReportDisplaySetInstanceUID = evt.data.createdDisplaySetInstanceUIDs[0];
|
const StructuredReportDisplaySetInstanceUID = evt.data.createdDisplaySetInstanceUIDs[0];
|
||||||
|
|||||||
@ -250,7 +250,7 @@ const machineConfiguration = {
|
|||||||
target: 'tracking',
|
target: 'tracking',
|
||||||
actions: [
|
actions: [
|
||||||
'setTrackedStudyAndMultipleSeries',
|
'setTrackedStudyAndMultipleSeries',
|
||||||
'jumpToFirstMeasurementInActiveViewport',
|
'jumpToSameImageInActiveViewport',
|
||||||
'setIsDirtyToClean',
|
'setIsDirtyToClean',
|
||||||
],
|
],
|
||||||
cond: 'shouldHydrateStructuredReport',
|
cond: 'shouldHydrateStructuredReport',
|
||||||
@ -274,7 +274,7 @@ const machineConfiguration = {
|
|||||||
target: 'tracking',
|
target: 'tracking',
|
||||||
actions: [
|
actions: [
|
||||||
'setTrackedStudyAndMultipleSeries',
|
'setTrackedStudyAndMultipleSeries',
|
||||||
'jumpToFirstMeasurementInActiveViewport',
|
'jumpToSameImageInActiveViewport',
|
||||||
'setIsDirtyToClean',
|
'setIsDirtyToClean',
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
|||||||
@ -160,6 +160,14 @@ export function ViewportGridProvider({ children, service }) {
|
|||||||
|
|
||||||
const previousViewport = viewports.get(viewportId);
|
const previousViewport = viewports.get(viewportId);
|
||||||
|
|
||||||
|
// remove options that were meant for one time usage
|
||||||
|
if (previousViewport?.viewportOptions?.initialImageOptions) {
|
||||||
|
const { useOnce } = previousViewport.viewportOptions.initialImageOptions;
|
||||||
|
if (useOnce) {
|
||||||
|
previousViewport.viewportOptions.initialImageOptions = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Use the newly provide viewportOptions and display set options
|
// Use the newly provide viewportOptions and display set options
|
||||||
// when provided, and otherwise fall back to the previous ones.
|
// when provided, and otherwise fall back to the previous ones.
|
||||||
// That allows for easy updates of just the display set.
|
// That allows for easy updates of just the display set.
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user