From 73bb4de1406382a52478de4e2fa435b838c5fa6e Mon Sep 17 00:00:00 2001 From: "James A. Petts" Date: Wed, 17 Jun 2020 08:25:10 +0100 Subject: [PATCH 1/2] SR viewport to cornerstone viewport consistency updates. --- .../dicom-sr/src/OHIFCornerstoneSRViewport.js | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/extensions/dicom-sr/src/OHIFCornerstoneSRViewport.js b/extensions/dicom-sr/src/OHIFCornerstoneSRViewport.js index b20e4c6ff..c7892e4aa 100644 --- a/extensions/dicom-sr/src/OHIFCornerstoneSRViewport.js +++ b/extensions/dicom-sr/src/OHIFCornerstoneSRViewport.js @@ -34,7 +34,7 @@ function OHIFCornerstoneSRViewport({ const [activeDisplaySetData, setActiveDisplaySetData] = useState({}); const [element, setElement] = useState(null); - const { viewports } = viewportGrid; + const { viewports, activeViewportIndex } = viewportGrid; const onElementEnabled = evt => { const eventData = evt.detail; @@ -161,6 +161,10 @@ function OHIFCornerstoneSRViewport({ element, ]); + const firstViewportIndexWithMatchingDisplaySetUid = viewports.findIndex( + vp => vp.displaySetInstanceUID === displaySet.displaySetInstanceUID + ); + // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ let childrenWithProps = null; @@ -235,8 +239,10 @@ function OHIFCornerstoneSRViewport({ <> {childrenWithProps} ); } +const _viewportLabels = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I']; + OHIFCornerstoneSRViewport.propTypes = { displaySet: PropTypes.object.isRequired, viewportIndex: PropTypes.number.isRequired, From 084697687dc9576c822af0083a123f308ca8783b Mon Sep 17 00:00:00 2001 From: "James A. Petts" Date: Wed, 17 Jun 2020 08:45:40 +0100 Subject: [PATCH 2/2] Fix reactivity of SR Viewport when the user scrolls away and then jumps to a measurement on the same slice as the currently active measurement. --- .../dicom-sr/src/OHIFCornerstoneSRViewport.js | 38 +++++++++---------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/extensions/dicom-sr/src/OHIFCornerstoneSRViewport.js b/extensions/dicom-sr/src/OHIFCornerstoneSRViewport.js index c7892e4aa..dfc685e43 100644 --- a/extensions/dicom-sr/src/OHIFCornerstoneSRViewport.js +++ b/extensions/dicom-sr/src/OHIFCornerstoneSRViewport.js @@ -9,9 +9,7 @@ import { ViewportActionBar, useViewportGrid } from '@ohif/ui'; import TOOL_NAMES from './constants/toolNames'; import id from './id'; -const BaseAnnotationTool = cornerstoneTools.importInternal( - 'base/BaseAnnotationTool' -); +const scrollToIndex = cornerstoneTools.importInternal('util/scrollToIndex'); // const cine = viewportSpecificData.cine; @@ -41,11 +39,12 @@ function OHIFCornerstoneSRViewport({ const targetElement = eventData.element; // TODO -> This will only be temporary until we set a tool on, and isn't very customizable. + // Need to discuss how to deal with tools in general in the redesign, since we + // Previously just had Tool mode state global across the entire viewer. const globalTools = cornerstoneTools.store.state.globalTools; + const globalToolNames = Object.keys(globalTools); - const toolNames = Object.keys(globalTools); - - Object.keys(globalTools).forEach(globalToolName => { + globalToolNames.forEach(globalToolName => { cornerstoneTools.setToolDisabledForElement(targetElement, globalToolName); }); @@ -106,7 +105,7 @@ function OHIFCornerstoneSRViewport({ displaySet.displaySetInstanceUID, ]); - const updateViewport = () => { + const updateViewport = newMeasurementSelected => { const { StudyInstanceUID, displaySetInstanceUID, @@ -126,14 +125,16 @@ function OHIFCornerstoneSRViewport({ _getViewportAndActiveDisplaySetData( dataSource, displaySet, - measurementSelected, + newMeasurementSelected, DisplaySetService, element ).then(({ viewportData, activeDisplaySetData }) => { setViewportData({ ...viewportData }); setActiveDisplaySetData({ ...activeDisplaySetData }); + setMeasurementSelected(newMeasurementSelected); if (element !== null) { + scrollToIndex(element, viewportData.stack.currentImageIdIndex); cornerstone.updateImage(element); } }); @@ -151,9 +152,8 @@ function OHIFCornerstoneSRViewport({ ]); useEffect(() => { - updateViewport(); + updateViewport(measurementSelected); }, [ - measurementSelected, dataSource, displaySet, displaySet.StudyInstanceUID, @@ -210,27 +210,27 @@ function OHIFCornerstoneSRViewport({ } = activeDisplaySetData; const onMeasurementChange = direction => { - let newMeausrementSelected = measurementSelected; + let newMeasurementSelected = measurementSelected; if (direction === 'right') { - newMeausrementSelected++; + newMeasurementSelected++; - if (newMeausrementSelected >= measurementCount) { - newMeausrementSelected = 0; + if (newMeasurementSelected >= measurementCount) { + newMeasurementSelected = 0; } } else { - newMeausrementSelected--; + newMeasurementSelected--; - if (newMeausrementSelected < 0) { - newMeausrementSelected = measurementCount - 1; + if (newMeasurementSelected < 0) { + newMeasurementSelected = measurementCount - 1; } } - if (newMeausrementSelected === measurementSelected) { + if (newMeasurementSelected === measurementSelected) { // TODO -> Jump to image in this case. } - setMeasurementSelected(newMeausrementSelected); + updateViewport(newMeasurementSelected); }; console.log(currentImageIdIndex);