AWV-1: Making the display set navigation buttons move the display sets on all viewports
This commit is contained in:
parent
8145e08f66
commit
0469747b5a
@ -4,6 +4,9 @@ OHIF.viewer = {};
|
|||||||
|
|
||||||
// Move display sets forward or backward in the given viewport index
|
// Move display sets forward or backward in the given viewport index
|
||||||
OHIF.viewer.moveSingleViewportDisplaySets = (viewportIndex, isNext) => {
|
OHIF.viewer.moveSingleViewportDisplaySets = (viewportIndex, isNext) => {
|
||||||
|
// Get the setting that allow display set navigation looping over series
|
||||||
|
const allowLooping = OHIF.uiSettings.displaySetNavigationLoopOverSeries;
|
||||||
|
|
||||||
// Get the selected viewport data
|
// Get the selected viewport data
|
||||||
const viewportData = window.layoutManager.viewportData[viewportIndex];
|
const viewportData = window.layoutManager.viewportData[viewportIndex];
|
||||||
|
|
||||||
@ -25,8 +28,8 @@ OHIF.viewer.moveSingleViewportDisplaySets = (viewportIndex, isNext) => {
|
|||||||
if (isNext) {
|
if (isNext) {
|
||||||
newIndex++;
|
newIndex++;
|
||||||
if (newIndex >= displaySets.length) {
|
if (newIndex >= displaySets.length) {
|
||||||
// Stop here if looping is now allowing
|
// Stop here if looping is not allowed
|
||||||
if (!OHIF.uiSettings.displaySetNavigationLoopOverSeries) {
|
if (!allowLooping) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -35,8 +38,8 @@ OHIF.viewer.moveSingleViewportDisplaySets = (viewportIndex, isNext) => {
|
|||||||
} else {
|
} else {
|
||||||
newIndex--;
|
newIndex--;
|
||||||
if (newIndex < 0) {
|
if (newIndex < 0) {
|
||||||
// Stop here if looping is now allowing
|
// Stop here if looping is not allowed
|
||||||
if (!OHIF.uiSettings.displaySetNavigationLoopOverSeries) {
|
if (!allowLooping) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -53,7 +56,93 @@ OHIF.viewer.moveSingleViewportDisplaySets = (viewportIndex, isNext) => {
|
|||||||
|
|
||||||
// Move multiple display sets forward or backward in all viewports
|
// Move multiple display sets forward or backward in all viewports
|
||||||
OHIF.viewer.moveMultipleViewportDisplaySets = isNext => {
|
OHIF.viewer.moveMultipleViewportDisplaySets = isNext => {
|
||||||
// TODO: implement
|
// Get the setting that allow display set navigation looping over series
|
||||||
|
const allowLooping = OHIF.uiSettings.displaySetNavigationLoopOverSeries;
|
||||||
|
|
||||||
|
// Get the viewport data list
|
||||||
|
const viewportDataList = window.layoutManager.viewportData;
|
||||||
|
|
||||||
|
// Create a map to control the display set movement
|
||||||
|
const moveMap = new Map();
|
||||||
|
|
||||||
|
// Iterate over each viewport and register its details on the movement map
|
||||||
|
viewportDataList.forEach((viewportData, viewportIndex) => {
|
||||||
|
// Get the current study
|
||||||
|
const currentStudy = _.findWhere(window.layoutManager.studies, {
|
||||||
|
studyInstanceUid: viewportData.studyInstanceUid
|
||||||
|
}) || window.layoutManager.studies[0];
|
||||||
|
|
||||||
|
// Get the display sets
|
||||||
|
const displaySets = currentStudy.displaySets;
|
||||||
|
|
||||||
|
// Get the current display set
|
||||||
|
const displaySet = _.findWhere(displaySets, {
|
||||||
|
displaySetInstanceUid: viewportData.displaySetInstanceUid
|
||||||
|
});
|
||||||
|
|
||||||
|
// Get the current instance index
|
||||||
|
let displaySetIndex = _.indexOf(displaySets, displaySet);
|
||||||
|
displaySetIndex = displaySetIndex < 0 ? 9999 : displaySetIndex;
|
||||||
|
|
||||||
|
// Try to get a map entry for current study or create it if not present
|
||||||
|
let studyViewports = moveMap.get(currentStudy);
|
||||||
|
if (!studyViewports) {
|
||||||
|
studyViewports = [];
|
||||||
|
moveMap.set(currentStudy, studyViewports);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Register the viewport index and the display set index on the map
|
||||||
|
studyViewports.push({
|
||||||
|
viewportIndex,
|
||||||
|
displaySetIndex
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
// Iterate over the studies map and move its display sets
|
||||||
|
moveMap.forEach((studyViewports, study) => {
|
||||||
|
// Sort the viewports on the study by the display set index
|
||||||
|
studyViewports.sort((a, b) => a.displaySetIndex > b.displaySetIndex);
|
||||||
|
|
||||||
|
// Get the study display sets
|
||||||
|
const displaySets = study.displaySets;
|
||||||
|
|
||||||
|
// Calculate the base index
|
||||||
|
const firstIndex = studyViewports[0].displaySetIndex;
|
||||||
|
const amount = studyViewports.length;
|
||||||
|
const rest = firstIndex % amount;
|
||||||
|
let baseIndex = rest ? firstIndex - rest : firstIndex;
|
||||||
|
const direction = isNext ? 1 : -1;
|
||||||
|
baseIndex += amount * direction;
|
||||||
|
|
||||||
|
// Check if the base index will be outside the array bounds
|
||||||
|
if (baseIndex >= displaySets.length) {
|
||||||
|
// Stop here if looping is not allowed
|
||||||
|
if (!allowLooping) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
baseIndex = 0;
|
||||||
|
} else if (baseIndex < 0) {
|
||||||
|
// Stop here if looping is not allowed
|
||||||
|
if (!allowLooping) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
baseIndex = (displaySets.length - 1) - ((displaySets.length - 1) % amount);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Iterate over the current study viewports
|
||||||
|
studyViewports.forEach(({ viewportIndex }, index) => {
|
||||||
|
// Get the new displaySet index to be rendered in viewport
|
||||||
|
const newIndex = baseIndex + index;
|
||||||
|
|
||||||
|
// Get the display set data for the new index
|
||||||
|
const displaySetData = displaySets[newIndex] || {};
|
||||||
|
|
||||||
|
// Rerender the viewport using the new display set data
|
||||||
|
window.layoutManager.rerenderViewportWithNewDisplaySet(viewportIndex, displaySetData);
|
||||||
|
});
|
||||||
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
// Move display sets forward or backward
|
// Move display sets forward or backward
|
||||||
|
|||||||
@ -29,15 +29,18 @@ LayoutManager = class LayoutManager {
|
|||||||
|
|
||||||
var viewportIndex = 0;
|
var viewportIndex = 0;
|
||||||
var self = this;
|
var self = this;
|
||||||
|
var oldViewportData = self.viewportData;
|
||||||
|
var running = true;
|
||||||
|
self.viewportData = [];
|
||||||
this.studies.forEach(function(study) {
|
this.studies.forEach(function(study) {
|
||||||
study.displaySets.forEach(function(displaySet) {
|
study.displaySets.forEach(function(displaySet) {
|
||||||
if (!displaySet.images.length) {
|
if (!displaySet.images.length || !running) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
var currentViewportData;
|
var currentViewportData;
|
||||||
var existingViewportData = self.viewportData[viewportIndex];
|
var existingViewportData = oldViewportData[viewportIndex];
|
||||||
if (self.viewportData[viewportIndex]) {
|
if (oldViewportData[viewportIndex]) {
|
||||||
currentViewportData = {
|
currentViewportData = {
|
||||||
viewportIndex: existingViewportData.viewportIndex,
|
viewportIndex: existingViewportData.viewportIndex,
|
||||||
studyInstanceUid: existingViewportData.studyInstanceUid,
|
studyInstanceUid: existingViewportData.studyInstanceUid,
|
||||||
@ -48,8 +51,6 @@ LayoutManager = class LayoutManager {
|
|||||||
imageId: existingViewportData.imageId,
|
imageId: existingViewportData.imageId,
|
||||||
currentImageIdIndex: existingViewportData.currentImageIdIndex // TODO Remove this once currentImageIdIndex is removed from imageViewerViewports
|
currentImageIdIndex: existingViewportData.currentImageIdIndex // TODO Remove this once currentImageIdIndex is removed from imageViewerViewports
|
||||||
};
|
};
|
||||||
|
|
||||||
self.viewportData[viewportIndex] = currentViewportData;
|
|
||||||
} else {
|
} else {
|
||||||
// This tests to make sure there is actually image data in this instance
|
// This tests to make sure there is actually image data in this instance
|
||||||
// TODO: Change this when we add PDF and MPEG support
|
// TODO: Change this when we add PDF and MPEG support
|
||||||
@ -69,18 +70,20 @@ LayoutManager = class LayoutManager {
|
|||||||
currentImageIdIndex: 0 // TODO Remove this once currentImageIdIndex is removed from imageViewerViewports
|
currentImageIdIndex: 0 // TODO Remove this once currentImageIdIndex is removed from imageViewerViewports
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
self.viewportData.push(currentViewportData);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
self.viewportData.push(currentViewportData);
|
||||||
|
|
||||||
viewportIndex++;
|
viewportIndex++;
|
||||||
|
|
||||||
if (viewportIndex === numViewports) {
|
if (viewportIndex === numViewports) {
|
||||||
|
running = false;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
if (viewportIndex === numViewports) {
|
if (viewportIndex === numViewports) {
|
||||||
|
running = false;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user