Update ohif-cornerstone-extension to support props to specify which image should be displayed in a stack

This commit is contained in:
Erik Ziegler committed 2019-02-21 16:51:52 +01:00
1 parent 656b64e9db
commit 6f8b9ae593
7 files changed
+80 -87

No files matched your search

@@ -1,8 +1,6 @@
import { connect } from 'react-redux';
import CornerstoneViewport from 'react-cornerstone-viewport';
import OHIF from 'ohif-core';
import cornerstone from 'cornerstone-core';
import cornerstoneTools from 'cornerstone-tools';
import throttle from 'lodash.throttle';
const {
@@ -32,9 +30,7 @@ const mapStateToProps = (state, ownProps) => {
...dataFromStore,
enableStackPrefetch: isActive,
//stack: viewportSpecificData.stack,
cineToolData: viewportSpecificData.cine,
cornerstone,
cornerstoneTools
cineToolData: viewportSpecificData.cine
};
};
@@ -50,7 +50,13 @@ class OHIFCornerstoneViewport extends Component {
StackManager.clearStacks();
}
static getCornerstoneStack(studies, studyInstanceUid, displaySetInstanceUid) {
static getCornerstoneStack(
studies,
studyInstanceUid,
displaySetInstanceUid,
sopInstanceUid,
frameIndex
) {
// Create shortcut to displaySet
const study = studies.find(
study => study.studyInstanceUid === studyInstanceUid
@@ -61,32 +67,59 @@ class OHIFCornerstoneViewport extends Component {
});
// Get stack from Stack Manager
return StackManager.findOrCreateStack(study, displaySet);
const storedStack = StackManager.findOrCreateStack(study, displaySet);
// Clone the stack here so we don't mutate it
const stack = Object.assign({}, storedStack);
if (frameIndex !== undefined) {
stack.currentImageIdIndex = frameIndex;
} else if (sopInstanceUid) {
const index = stack.imageIds.findIndex(imageId => {
const sopCommonModule = cornerstone.metaData.get(
'sopCommonModule',
imageId
);
if (!sopCommonModule) {
return;
}
return sopCommonModule.sopInstanceUID === sopInstanceUid;
});
if (index > -1) {
stack.currentImageIdIndex = index;
}
} else {
stack.currentImageIdIndex = 0;
}
return stack;
}
static getViewportData = (
studies,
studyInstanceUid,
displaySetInstanceUid
displaySetInstanceUid,
sopInstanceUid,
frameIndex
) => {
const currentStack = OHIFCornerstoneViewport.getCornerstoneStack(
return OHIFCornerstoneViewport.getCornerstoneStack(
studies,
studyInstanceUid,
displaySetInstanceUid
displaySetInstanceUid,
sopInstanceUid,
frameIndex
);
// Clone the stack here so we don't mutate it later
const stack = Object.assign({}, currentStack);
stack.currentImageIdIndex = 0;
return stack;
};
getViewportData = async (
studies,
studyInstanceUid,
displaySetInstanceUid,
sopClassUid
sopClassUid,
sopInstanceUid,
frameIndex
) => {
let viewportData;
@@ -98,15 +131,20 @@ class OHIFCornerstoneViewport extends Component {
viewportData = await specialCaseHandler(
studies,
studyInstanceUid,
displaySetInstanceUid
displaySetInstanceUid,
sopInstanceUid,
frameIndex
);
break;
default:
const stack = OHIFCornerstoneViewport.getViewportData(
studies,
studyInstanceUid,
displaySetInstanceUid
displaySetInstanceUid,
sopInstanceUid,
frameIndex
);
viewportData = {
studyInstanceUid,
displaySetInstanceUid,
@@ -124,7 +162,9 @@ class OHIFCornerstoneViewport extends Component {
const {
studyInstanceUid,
displaySetInstanceUid,
sopClassUids
sopClassUids,
sopInstanceUid,
frameIndex
} = displaySet;
if (sopClassUids.length > 1) {
@@ -139,7 +179,9 @@ class OHIFCornerstoneViewport extends Component {
studies,
studyInstanceUid,
displaySetInstanceUid,
sopClassUid
sopClassUid,
sopInstanceUid,
frameIndex
).then(viewportData => {
this.setState({
viewportData
@@ -153,11 +195,13 @@ class OHIFCornerstoneViewport extends Component {
componentDidUpdate(prevProps) {
const { studies, displaySet } = this.props.viewportData;
const { displaySetInstanceUid } = displaySet;
const prevDisplaySet = prevProps.viewportData.displaySet;
if (
displaySet.displaySetInstanceUid !== prevDisplaySet.displaySetInstanceUid
displaySet.displaySetInstanceUid !==
prevDisplaySet.displaySetInstanceUid ||
displaySet.sopInstanceUid !== prevDisplaySet.sopInstanceUid ||
displaySet.frameIndex !== prevDisplaySet.frameIndex
) {
this.setStateFromProps();
}