Bug Fix: Only first frame of multiframe images is being rendered.

This commit is contained in:
Emanuel F. Oliveira 2017-01-19 12:05:36 -02:00
parent e2322ec05a
commit 75e027fee5
6 changed files with 29 additions and 31 deletions

View File

@ -491,9 +491,8 @@ HP.ProtocolEngine = class ProtocolEngine {
// If the instance was found, set the displaySet ID // If the instance was found, set the displaySet ID
if (displaySet) { if (displaySet) {
const instanceMetadata = new OHIF.metadata.InstanceMetadata(instance);
imageDetails.displaySetInstanceUid = displaySet.displaySetInstanceUid; imageDetails.displaySetInstanceUid = displaySet.displaySetInstanceUid;
imageDetails.imageId = OHIF.viewerbase.getImageId(instanceMetadata); imageDetails.imageId = OHIF.viewerbase.getImageId(instance);
} }
if ((totalMatchScore > highestImageMatchingScore) || !bestMatch) { if ((totalMatchScore > highestImageMatchingScore) || !bestMatch) {

View File

@ -15,7 +15,7 @@ Template.imageThumbnail.onCreated(() => {
const lastIndex = (stack.images.length || 1) - 1; const lastIndex = (stack.images.length || 1) - 1;
const imageIndex = Math.floor(lastIndex / 2); const imageIndex = Math.floor(lastIndex / 2);
const imageInstance = stack.images[imageIndex]; const imageInstance = stack.images[imageIndex];
return getImageId(imageInstance); return getImageId(imageInstance.getData());
}; };
}); });

View File

@ -62,35 +62,29 @@ const loadDisplaySetIntoViewport = (data, templateData) => {
ViewerData[contentId].loadedSeriesData[viewportIndex] = {}; ViewerData[contentId].loadedSeriesData[viewportIndex] = {};
} }
// Create shortcut to displaySet
const displaySet = data.displaySet; const displaySet = data.displaySet;
// Get stack from Stack Manager // 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 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 // Sets the global variable
OHIF.viewer.cine.framesPerSecond = parseFloat(displaySetStack.frameRate); OHIF.viewer.cine.framesPerSecond = parseFloat(stack.frameRate);
// Update the cine dialog FPS // Update the cine dialog FPS
Session.set('UpdateCINE', Random.id()); Session.set('UpdateCINE', Random.id());
} }
// Array with image IDs // Shortcut for array with image IDs...
let imageIds = []; const imageIds = stack.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;
}
// Define the current image stack using the newly created image IDs // Update stack's currentImageIdIndex property...
const stack = { stack.currentImageIdIndex = data.currentImageIdIndex > 0 && data.currentImageIdIndex < imageIds.length ? data.currentImageIdIndex : 0;
currentImageIdIndex: data.currentImageIdIndex || 0,
imageIds: imageIds,
displaySetInstanceUid: data.displaySetInstanceUid
};
// If is a clip, updates the global FPS for cine dialog // If is a clip, updates the global FPS for cine dialog
if (displaySet && displaySet.isClip && displaySet.frameRate > 0) { if (displaySet && displaySet.isClip && displaySet.frameRate > 0) {
@ -257,7 +251,7 @@ const loadDisplaySetIntoViewport = (data, templateData) => {
cornerstoneTools.addToolState(element, 'stack', stack); cornerstoneTools.addToolState(element, 'stack', stack);
// Set the default CINE settings // Set the default CINE settings
const multiframeMetadata = instance.multiframeMetadata; const multiframeMetadata = instance.getDataProperty('multiframeMetadata');
let fps; let fps;
if (multiframeMetadata && multiframeMetadata.averageFrameRate > 0) { if (multiframeMetadata && multiframeMetadata.averageFrameRate > 0) {

View File

@ -21,9 +21,10 @@ function createAndAddStack(stackMap, study, displaySet) {
const imageIds = []; const imageIds = [];
let imageId; let imageId;
displaySet.images.forEach((image, imageIndex) => { displaySet.images.forEach((instance, imageIndex) => {
const image = instance.getData();
const metaData = { const metaData = {
instance: image, instance: image, // in this context, instance will be the data of the InstanceMetadata object...
series: displaySet, // TODO: Check this series: displaySet, // TODO: Check this
study: study, study: study,
numImages: numImages, numImages: numImages,
@ -56,7 +57,7 @@ function createAndAddStack(stackMap, study, displaySet) {
stackMap[displaySet.displaySetInstanceUid] = stack; stackMap[displaySet.displaySetInstanceUid] = stack;
return imageIds; return stack;
} }
configuration = { configuration = {

View File

@ -21,6 +21,15 @@ export class Metadata {
return this._data; 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 * Static Methods
*/ */

View File

@ -7,12 +7,7 @@ import { getWADORSImageId } from './getWADORSImageId';
* @param instance * @param instance
* @returns {string} The imageId to be used by Cornerstone * @returns {string} The imageId to be used by Cornerstone
*/ */
export function getImageId(instanceMetadata, frame) { export function getImageId(instance, frame) {
if (!instanceMetadata) {
return;
}
const instance = instanceMetadata.getData();
if (!instance) { if (!instance) {
return; return;