fix(measurement): fix for measurement jump is not switching series in 2DMPR (#4779)

This commit is contained in:
arul-trenser authored and GitHub committed 2025-03-28 10:14:19 -04:00
1 parent 951f95ef0a
commit 3f06c966eb
4 files changed
+100 -26

No files matched your search

@@ -264,11 +264,10 @@ const OHIFCornerstoneViewport = React.memo(
const presentations = getViewportPresentations(viewportId, viewportOptions);
let measurement;
if (cacheJumpToMeasurementEvent?.viewportId === viewportId) {
if (cacheJumpToMeasurementEvent?.cornerstoneViewport === viewportId) {
measurement = cacheJumpToMeasurementEvent.measurement;
// Delete the position presentation so that viewport navigates direct
presentations.positionPresentation = null;
cacheJumpToMeasurementEvent = null;
}
// Note: This is a hack to get the grid to re-render the OHIFCornerstoneViewport component
@@ -281,7 +280,7 @@ const OHIFCornerstoneViewport = React.memo(
viewportOptions.needsRerendering = false;
}
cornerstoneViewportService.setViewportData(
await cornerstoneViewportService.setViewportData(
viewportId,
viewportData,
viewportOptions,
@@ -290,7 +289,13 @@ const OHIFCornerstoneViewport = React.memo(
);
if (measurement) {
cs3DTools.annotation.selection.setAnnotationSelected(measurement.uid);
_checkForCachedJumpToMeasurementEvents(
elementRef,
viewportId,
displaySets,
servicesManager
);
cacheJumpToMeasurementEvent = null;
}
};
@@ -318,8 +323,6 @@ const OHIFCornerstoneViewport = React.memo(
servicesManager
);
_checkForCachedJumpToMeasurementEvents(elementRef, viewportId, displaySets, servicesManager);
return () => {
unsubscribeFromJumpToMeasurementEvents();
};
@@ -451,6 +454,16 @@ function _subscribeToJumpToMeasurementEvents(elementRef, viewportId, servicesMan
if (cacheJumpToMeasurementEvent.cornerstoneViewport !== viewportId) {
return;
}
const viewportInfo = cornerstoneViewportService.getViewportInfo(viewportId);
// Confirm viewportInfo matches measurement displaySetInstanceUID and referencedImageId
if (
!viewportInfo?.contains(
measurement.displaySetInstanceUID,
measurement.referencedImageId || measurement.metadata?.referencedImageId
)
) {
return;
}
_jumpToMeasurement(measurement, elementRef, viewportId, servicesManager);
}
);
@@ -372,7 +372,7 @@ class CornerstoneViewportService extends PubSubService implements IViewportServi
* @param publicDisplaySetOptions - The public display set options.
* @param presentations - The presentations to set.
*/
public setViewportData(
public async setViewportData(
viewportId: string,
viewportData: StackViewportData | VolumeViewportData,
publicViewportOptions: PublicViewportOptions,
@@ -458,21 +458,14 @@ class CornerstoneViewportService extends PubSubService implements IViewportServi
this.viewportsById.set(viewportId, viewportInfo);
const viewport = renderingEngine.getViewport(viewportId);
const displaySetPromise = this._setDisplaySets(
viewport,
viewportData,
viewportInfo,
presentations
);
await this._setDisplaySets(viewport, viewportData, viewportInfo, presentations);
// The broadcast event here ensures that listeners have a valid, up to date
// viewport to access. Doing it too early can result in exceptions or
// invalid data.
displaySetPromise.then(() => {
this._broadcastEvent(this.EVENTS.VIEWPORT_DATA_CHANGED, {
viewportData,
viewportId,
});
this._broadcastEvent(this.EVENTS.VIEWPORT_DATA_CHANGED, {
viewportData,
viewportId,
});
}