From a74648f8ec23c01b91588ff7c6ee1620ca456ed7 Mon Sep 17 00:00:00 2001 From: Alireza Date: Tue, 6 Jan 2026 08:10:01 -0500 Subject: [PATCH] fix: NM multiframe with TimeSlotVector (#5666) * fix(ViewportWindowLevel): add null checks for volumeActor in opacity functions * refactor(ViewportWindowLevel): register histogram worker at module load and optimize scalar data retrieval * fix(Preclinical4D): add null check for viewportId and set frame rate for cine playback * fix(getSopClassHandlerModule): handle multiframe dynamic volumes by utilizing metaData for instance retrieval --------- Co-authored-by: Bill Wallace --- extensions/default/src/getSopClassHandlerModule.js | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/extensions/default/src/getSopClassHandlerModule.js b/extensions/default/src/getSopClassHandlerModule.js index 902e679a9..1355abd6a 100644 --- a/extensions/default/src/getSopClassHandlerModule.js +++ b/extensions/default/src/getSopClassHandlerModule.js @@ -4,6 +4,7 @@ import { id } from './id'; import getDisplaySetMessages from './getDisplaySetMessages'; import getDisplaySetsFromUnsupportedSeries from './getDisplaySetsFromUnsupportedSeries'; import { chartHandler } from './SOPClassHandlers/chartSOPClassHandler'; +import { metaData } from '@cornerstonejs/core'; const { isImage, @@ -50,11 +51,16 @@ function getDisplaySetInfo(instances) { const timePoint = timePoints[0]; const instancesMap = new Map(); - // O(n) to convert it into a map and O(1) to find each instance - instances.forEach(instance => instancesMap.set(instance.imageId, instance)); - - const firstTimePointInstances = timePoint.map(imageId => instancesMap.get(imageId)); + let firstTimePointInstances; + if (instances[0].NumberOfFrames > 1 && timePoints.length > 1) { + // handle multiframe dynamic volume + firstTimePointInstances = timePoints[0].map(imageId => metaData.get('instance', imageId)); + } else { + // O(n) to convert it into a map and O(1) to find each instance + instances.forEach(instance => instancesMap.set(instance.imageId, instance)); + firstTimePointInstances = timePoint.map(imageId => instancesMap.get(imageId)); + } displaySetInfo = isDisplaySetReconstructable(firstTimePointInstances, appConfig); } else { displaySetInfo = isDisplaySetReconstructable(instances, appConfig);