From 2cc06e454a00aaae941280939c1f1019c537e2b7 Mon Sep 17 00:00:00 2001 From: Bruno Alves de Faria Date: Mon, 22 Aug 2016 14:54:31 -0300 Subject: [PATCH] Fixing viewports initial sorting issue --- .../hangingprotocols/client/protocolEngine.js | 37 ++++++++++++++----- .../viewer/gridLayout/gridLayout.html | 14 +++---- .../viewer/gridLayout/gridLayout.js | 37 +++++++++++++------ .../imageViewerViewport.html | 8 ++-- .../imageViewerViewport.js | 4 +- Packages/viewerbase/lib/createStacks.js | 8 ++-- 6 files changed, 71 insertions(+), 37 deletions(-) diff --git a/Packages/hangingprotocols/client/protocolEngine.js b/Packages/hangingprotocols/client/protocolEngine.js index c76ff1749..053613de0 100644 --- a/Packages/hangingprotocols/client/protocolEngine.js +++ b/Packages/hangingprotocols/client/protocolEngine.js @@ -467,6 +467,32 @@ HP.ProtocolEngine = class ProtocolEngine { if ((totalMatchScore > highestImageMatchingScore) || !bestMatch) { highestImageMatchingScore = totalMatchScore; + + // Set the displaySet ID + study.displaySets.every(displaySet => { + // Skip displaySet if it has no images + if (!displaySet.images.length) { + return true; + } + + // Skip displaySet if series is different + if (displaySet.seriesInstanceUid !== series.seriesInstanceUid) { + return true; + } + + // Try to find the current instance + const instanceFound = _.findWhere(displaySet.images, { + sopInstanceUid: instance.sopInstanceUid + }); + + // If the instance was found, set the displaySet ID + if (instanceFound) { + imageDetails.displaySetInstanceUid = displaySet.displaySetInstanceUid; + imageDetails.imageId = getImageId(instance); + return false; + } + }); + bestMatch = imageDetails; } @@ -584,21 +610,14 @@ HP.ProtocolEngine = class ProtocolEngine { currentViewportData.seriesInstanceUid = details.bestMatch.seriesInstanceUid; currentViewportData.sopInstanceUid = details.bestMatch.sopInstanceUid; currentViewportData.currentImageIdIndex = details.bestMatch.currentImageIdIndex; + currentViewportData.displaySetInstanceUid = details.bestMatch.displaySetInstanceUid; + currentViewportData.imageId = details.bestMatch.imageId; } const study = ViewerStudies.findOne({ studyInstanceUid: details.bestMatch.studyInstanceUid }); - // Find the best matched display set. TODO: Fix this to actually - // find the most appropriate display set - study.displaySets.forEach(displaySet => { - if (displaySet.seriesInstanceUid === details.bestMatch.seriesInstanceUid) { - currentViewportData.displaySetInstanceUid = displaySet.displaySetInstanceUid; - return false; - } - }) - if (!currentViewportData.displaySetInstanceUid) { throw "No matching display set found?"; } diff --git a/Packages/viewerbase/client/components/viewer/gridLayout/gridLayout.html b/Packages/viewerbase/client/components/viewer/gridLayout/gridLayout.html index db62c9cf7..4ae2bb421 100644 --- a/Packages/viewerbase/client/components/viewer/gridLayout/gridLayout.html +++ b/Packages/viewerbase/client/components/viewer/gridLayout/gridLayout.html @@ -1,11 +1,11 @@ \ No newline at end of file + diff --git a/Packages/viewerbase/client/components/viewer/gridLayout/gridLayout.js b/Packages/viewerbase/client/components/viewer/gridLayout/gridLayout.js index b283e14ae..02f74024e 100644 --- a/Packages/viewerbase/client/components/viewer/gridLayout/gridLayout.js +++ b/Packages/viewerbase/client/components/viewer/gridLayout/gridLayout.js @@ -1,32 +1,47 @@ import { OHIF } from 'meteor/ohif:core'; +import { Template } from 'meteor/templating'; Template.gridLayout.helpers({ - height: function() { - var rows = this.rows || 1; + // Get the height percentage for each viewport + height() { + const instance = Template.instance(); + const rows = instance.data.rows || 1; return 100 / rows; }, - width: function() { - var columns = this.columns || 1; + + // Get the width percentage for each viewport + width() { + const instance = Template.instance(); + const columns = instance.data.columns || 1; return 100 / columns; }, - viewports: function() { - var numViewports = this.rows * this.columns; - var viewportData = this.viewportData; - var numViewportsWithData = this.viewportData.length; + // Return the viewports list + viewports() { + const instance = Template.instance(); + const rows = instance.data.rows; + const columns = instance.data.columns; + const numViewports = rows * columns; + const viewportData = instance.data.viewportData; + const numViewportsWithData = viewportData.length; + + // Check if the viewportData length is different from the given if (numViewportsWithData < numViewports) { + // Add the missing viewports var difference = numViewports - numViewportsWithData; for (var i = 0; i < difference; i++) { viewportData.push({ viewportIndex: numViewportsWithData + i + 1, - rows: this.rows, - columns: this.columns + rows, + columns }); } } else if (numViewportsWithData > numViewports) { + // Remove the additional viewports return viewportData.slice(0, numViewports); } + // Return the viewports return viewportData; } -}); \ No newline at end of file +}); diff --git a/Packages/viewerbase/client/components/viewer/imageViewerViewport/imageViewerViewport.html b/Packages/viewerbase/client/components/viewer/imageViewerViewport/imageViewerViewport.html index 6275a3dc6..e2037ff1b 100644 --- a/Packages/viewerbase/client/components/viewer/imageViewerViewport/imageViewerViewport.html +++ b/Packages/viewerbase/client/components/viewer/imageViewerViewport/imageViewerViewport.html @@ -8,7 +8,7 @@
Please drag a stack here to view images.
- {{ >loadingIndicator }} - {{ >viewportOverlay }} - {{ >viewportOrientationMarkers }} - \ No newline at end of file + {{>loadingIndicator}} + {{>viewportOverlay}} + {{>viewportOrientationMarkers}} + diff --git a/Packages/viewerbase/client/components/viewer/imageViewerViewport/imageViewerViewport.js b/Packages/viewerbase/client/components/viewer/imageViewerViewport/imageViewerViewport.js index 29f100842..b91d26651 100644 --- a/Packages/viewerbase/client/components/viewer/imageViewerViewport/imageViewerViewport.js +++ b/Packages/viewerbase/client/components/viewer/imageViewerViewport/imageViewerViewport.js @@ -379,7 +379,7 @@ function loadDisplaySetIntoViewport(data, templateData) { function setDisplaySet(data, displaySetInstanceUid, templateData) { var study = data.study; if (!study || !study.displaySets) { - throw "Study does not exist or has no display sets"; + throw 'Study does not exist or has no display sets'; return; } @@ -394,7 +394,7 @@ function setDisplaySet(data, displaySetInstanceUid, templateData) { // If we didn't find anything, stop here if (!data.displaySet) { - throw "Display set not found in specified study!"; + throw 'Display set not found in specified study!'; return; } diff --git a/Packages/viewerbase/lib/createStacks.js b/Packages/viewerbase/lib/createStacks.js index bedde4e91..f11e12947 100644 --- a/Packages/viewerbase/lib/createStacks.js +++ b/Packages/viewerbase/lib/createStacks.js @@ -39,13 +39,13 @@ createStacks = function(study) { if (isMultiFrame(instance)) { displaySet = makeDisplaySet(series, [ instance ]); displaySet.isClip = true; - + // Include the study instance Uid for drag/drop purposes displaySet.studyInstanceUid = study.studyInstanceUid; // Override the default value of instances.length displaySet.numImageFrames = instance.numFrames; - + displaySets.push(displaySet); } else if (isSingleImageModality(instance.modality)) { displaySet = makeDisplaySet(series, [ instance ]); @@ -80,7 +80,7 @@ function makeDisplaySet(series, instances) { // Sort the images in this series displaySet.images.sort(function(a, b) { - if (a.instanceNumber && b.instanceNumber && + if (a.instanceNumber && b.instanceNumber && a.instanceNumber !== b.instanceNumber) { return a.instanceNumber - b.instanceNumber; } @@ -100,4 +100,4 @@ function isSingleImageModality(modality) { function isMultiFrame(instance) { return instance.numFrames > 1; -} \ No newline at end of file +}