From 75e027fee521f19fa42b0451824869f3d48205a1 Mon Sep 17 00:00:00 2001 From: "Emanuel F. Oliveira" Date: Thu, 19 Jan 2017 12:05:36 -0200 Subject: [PATCH] Bug Fix: Only first frame of multiframe images is being rendered. --- .../client/protocolEngine.js | 3 +- .../imageThumbnail/imageThumbnail.js | 2 +- .../imageViewerViewport.js | 32 ++++++++----------- .../client/lib/StackManager.js | 7 ++-- .../client/lib/classes/metadata/Metadata.js | 9 ++++++ .../ohif-viewerbase/client/lib/getImageId.js | 7 +--- 6 files changed, 29 insertions(+), 31 deletions(-) diff --git a/Packages/ohif-hanging-protocols/client/protocolEngine.js b/Packages/ohif-hanging-protocols/client/protocolEngine.js index 2a37a6e20..96e1b39e5 100644 --- a/Packages/ohif-hanging-protocols/client/protocolEngine.js +++ b/Packages/ohif-hanging-protocols/client/protocolEngine.js @@ -491,9 +491,8 @@ HP.ProtocolEngine = class ProtocolEngine { // If the instance was found, set the displaySet ID if (displaySet) { - const instanceMetadata = new OHIF.metadata.InstanceMetadata(instance); imageDetails.displaySetInstanceUid = displaySet.displaySetInstanceUid; - imageDetails.imageId = OHIF.viewerbase.getImageId(instanceMetadata); + imageDetails.imageId = OHIF.viewerbase.getImageId(instance); } if ((totalMatchScore > highestImageMatchingScore) || !bestMatch) { diff --git a/Packages/ohif-viewerbase/client/components/studyBrowser/imageThumbnail/imageThumbnail.js b/Packages/ohif-viewerbase/client/components/studyBrowser/imageThumbnail/imageThumbnail.js index d1731dd38..640039fb5 100644 --- a/Packages/ohif-viewerbase/client/components/studyBrowser/imageThumbnail/imageThumbnail.js +++ b/Packages/ohif-viewerbase/client/components/studyBrowser/imageThumbnail/imageThumbnail.js @@ -15,7 +15,7 @@ Template.imageThumbnail.onCreated(() => { const lastIndex = (stack.images.length || 1) - 1; const imageIndex = Math.floor(lastIndex / 2); const imageInstance = stack.images[imageIndex]; - return getImageId(imageInstance); + return getImageId(imageInstance.getData()); }; }); diff --git a/Packages/ohif-viewerbase/client/components/viewer/imageViewerViewport/imageViewerViewport.js b/Packages/ohif-viewerbase/client/components/viewer/imageViewerViewport/imageViewerViewport.js index 4713fe32f..b935db988 100644 --- a/Packages/ohif-viewerbase/client/components/viewer/imageViewerViewport/imageViewerViewport.js +++ b/Packages/ohif-viewerbase/client/components/viewer/imageViewerViewport/imageViewerViewport.js @@ -62,35 +62,29 @@ const loadDisplaySetIntoViewport = (data, templateData) => { ViewerData[contentId].loadedSeriesData[viewportIndex] = {}; } + // Create shortcut to displaySet const displaySet = data.displaySet; // Get stack from Stack Manager - const displaySetStack = StackManager.findStack(displaySet.displaySetInstanceUid); + let stack = StackManager.findStack(displaySet.displaySetInstanceUid); + // Make sure if the stack is already loaded in the stack manager, otherwise create it + if(!stack || !stack.imageIds) { + stack = StackManager.makeAndAddStack(data.study, displaySet); + } // If is a clip, updates the global FPS for cine dialog - if (displaySetStack && displaySetStack.isClip === true && displaySetStack.frameRate) { + if (stack.isClip && stack.frameRate > 0) { // Sets the global variable - OHIF.viewer.cine.framesPerSecond = parseFloat(displaySetStack.frameRate); + OHIF.viewer.cine.framesPerSecond = parseFloat(stack.frameRate); // Update the cine dialog FPS Session.set('UpdateCINE', Random.id()); } - // Array with image IDs - let imageIds = []; - // Make sure if the stack is already loaded in the stack manager, otherwise create it - if(!displaySetStack || !displaySetStack.imageIds) { - imageIds = StackManager.makeAndAddStack(data.study, displaySet); - } - else { - imageIds = displaySetStack.imageIds; - } + // Shortcut for array with image IDs... + const imageIds = stack.imageIds; - // Define the current image stack using the newly created image IDs - const stack = { - currentImageIdIndex: data.currentImageIdIndex || 0, - imageIds: imageIds, - displaySetInstanceUid: data.displaySetInstanceUid - }; + // Update stack's currentImageIdIndex property... + stack.currentImageIdIndex = data.currentImageIdIndex > 0 && data.currentImageIdIndex < imageIds.length ? data.currentImageIdIndex : 0; // If is a clip, updates the global FPS for cine dialog if (displaySet && displaySet.isClip && displaySet.frameRate > 0) { @@ -257,7 +251,7 @@ const loadDisplaySetIntoViewport = (data, templateData) => { cornerstoneTools.addToolState(element, 'stack', stack); // Set the default CINE settings - const multiframeMetadata = instance.multiframeMetadata; + const multiframeMetadata = instance.getDataProperty('multiframeMetadata'); let fps; if (multiframeMetadata && multiframeMetadata.averageFrameRate > 0) { diff --git a/Packages/ohif-viewerbase/client/lib/StackManager.js b/Packages/ohif-viewerbase/client/lib/StackManager.js index b2558fbda..39488b194 100644 --- a/Packages/ohif-viewerbase/client/lib/StackManager.js +++ b/Packages/ohif-viewerbase/client/lib/StackManager.js @@ -21,9 +21,10 @@ function createAndAddStack(stackMap, study, displaySet) { const imageIds = []; let imageId; - displaySet.images.forEach((image, imageIndex) => { + displaySet.images.forEach((instance, imageIndex) => { + const image = instance.getData(); const metaData = { - instance: image, + instance: image, // in this context, instance will be the data of the InstanceMetadata object... series: displaySet, // TODO: Check this study: study, numImages: numImages, @@ -56,7 +57,7 @@ function createAndAddStack(stackMap, study, displaySet) { stackMap[displaySet.displaySetInstanceUid] = stack; - return imageIds; + return stack; } configuration = { diff --git a/Packages/ohif-viewerbase/client/lib/classes/metadata/Metadata.js b/Packages/ohif-viewerbase/client/lib/classes/metadata/Metadata.js index 1070f8710..0be4a707e 100644 --- a/Packages/ohif-viewerbase/client/lib/classes/metadata/Metadata.js +++ b/Packages/ohif-viewerbase/client/lib/classes/metadata/Metadata.js @@ -21,6 +21,15 @@ export class Metadata { return this._data; } + getDataProperty(propertyName) { + let propertyValue; + const _data = this._data; + if (_data instanceof Object || typeof _data === 'object' && _data !== null) { + propertyValue = _data[propertyName]; + } + return propertyValue; + } + /** * Static Methods */ diff --git a/Packages/ohif-viewerbase/client/lib/getImageId.js b/Packages/ohif-viewerbase/client/lib/getImageId.js index d7d70b9fb..dbc3fd73a 100644 --- a/Packages/ohif-viewerbase/client/lib/getImageId.js +++ b/Packages/ohif-viewerbase/client/lib/getImageId.js @@ -7,12 +7,7 @@ import { getWADORSImageId } from './getWADORSImageId'; * @param instance * @returns {string} The imageId to be used by Cornerstone */ -export function getImageId(instanceMetadata, frame) { - if (!instanceMetadata) { - return; - } - - const instance = instanceMetadata.getData(); +export function getImageId(instance, frame) { if (!instance) { return;