From 41316fead0ac17e856aea123349bccd2d874a7e3 Mon Sep 17 00:00:00 2001 From: Danny Brown Date: Thu, 17 Sep 2020 16:08:11 -0400 Subject: [PATCH] fix: display instance num sr viewport (#2045) * fix: duplicate and use TrackingViewport's overlay w/ SR Viewport * chore: correct component naming for OHIFTrackingViewport --- extensions/dicom-sr/src/index.js | 2 +- .../OHIFCornerstoneSRViewport.js | 18 ++-- .../dicom-sr/src/viewports/ViewportOverlay.js | 88 +++++++++++++++++++ .../src/getViewportModule.js | 10 ++- 4 files changed, 109 insertions(+), 9 deletions(-) rename extensions/dicom-sr/src/{ => viewports}/OHIFCornerstoneSRViewport.js (97%) create mode 100644 extensions/dicom-sr/src/viewports/ViewportOverlay.js diff --git a/extensions/dicom-sr/src/index.js b/extensions/dicom-sr/src/index.js index 237f007e8..a27dd3d25 100644 --- a/extensions/dicom-sr/src/index.js +++ b/extensions/dicom-sr/src/index.js @@ -5,7 +5,7 @@ import id from './id.js'; import init from './init'; const Component = React.lazy(() => { - return import('./OHIFCornerstoneSRViewport'); + return import('./viewports/OHIFCornerstoneSRViewport'); }); const OHIFCornerstoneSRViewport = props => { diff --git a/extensions/dicom-sr/src/OHIFCornerstoneSRViewport.js b/extensions/dicom-sr/src/viewports/OHIFCornerstoneSRViewport.js similarity index 97% rename from extensions/dicom-sr/src/OHIFCornerstoneSRViewport.js rename to extensions/dicom-sr/src/viewports/OHIFCornerstoneSRViewport.js index 436c5dd33..ea6d15c04 100644 --- a/extensions/dicom-sr/src/OHIFCornerstoneSRViewport.js +++ b/extensions/dicom-sr/src/viewports/OHIFCornerstoneSRViewport.js @@ -4,17 +4,18 @@ import cornerstoneTools from 'cornerstone-tools'; import cornerstone from 'cornerstone-core'; import CornerstoneViewport from 'react-cornerstone-viewport'; import OHIF, { DicomMetadataStore, utils } from '@ohif/core'; -import DICOMSRDisplayTool from './tools/DICOMSRDisplayTool'; +import DICOMSRDisplayTool from './../tools/DICOMSRDisplayTool'; +import ViewportOverlay from './ViewportOverlay'; import { Notification, ViewportActionBar, useViewportGrid, useViewportDialog, } from '@ohif/ui'; -import TOOL_NAMES from './constants/toolNames'; +import TOOL_NAMES from './../constants/toolNames'; import { adapters } from 'dcmjs'; // import getToolStateToCornerstoneMeasurementSchema from './utils/getToolStateToCornerstoneMeasurementSchema'; -import id from './id'; +import id from './../id'; const { formatDate } = utils; const scrollToIndex = cornerstoneTools.importInternal('util/scrollToIndex'); @@ -368,7 +369,6 @@ function OHIFCornerstoneSRViewport({ const label = viewports.length > 1 ? _viewportLabels[viewportIndex] : ''; // TODO -> disabled double click for now: onDoubleClick={_onDoubleClick} - return ( <> { + return ( + + ); + }} />
{viewportDialogState.viewportIndex === viewportIndex && ( diff --git a/extensions/dicom-sr/src/viewports/ViewportOverlay.js b/extensions/dicom-sr/src/viewports/ViewportOverlay.js new file mode 100644 index 000000000..47d25f0aa --- /dev/null +++ b/extensions/dicom-sr/src/viewports/ViewportOverlay.js @@ -0,0 +1,88 @@ +import React from 'react'; +import PropTypes from 'prop-types'; +import cornerstone from 'cornerstone-core'; +import classnames from 'classnames'; + +const ViewportOverlay = ({ + imageId, + scale, + windowWidth, + windowCenter, + imageIndex, + stackSize, + activeTools, +}) => { + const topLeft = 'top-viewport left-viewport'; + const topRight = 'top-viewport right-viewport-scrollbar'; + const bottomRight = 'bottom-viewport right-viewport-scrollbar'; + const bottomLeft = 'bottom-viewport left-viewport'; + const overlay = 'absolute pointer-events-none'; + + const isZoomActive = activeTools.includes('Zoom'); + const isWwwcActive = activeTools.includes('Wwwc'); + + debugger; + + if (!imageId) { + return null; + } + + const generalImageModule = + cornerstone.metaData.get('generalImageModule', imageId) || {}; + const { instanceNumber } = generalImageModule; + + return ( +
+
+ {isZoomActive && ( +
+ Zoom: + {scale.toFixed(2)}x +
+ )} + {isWwwcActive && ( +
+ W: + + {windowWidth.toFixed(0)} + + L: + {windowCenter.toFixed(0)} +
+ )} +
+
+ {stackSize > 1 && ( +
+ I: + + {`${instanceNumber} (${imageIndex}/${stackSize})`} + +
+ )} +
+
+
+
+ ); +}; + +ViewportOverlay.defaultProps = { + stackSize: 99999, +}; + +ViewportOverlay.propTypes = { + scale: PropTypes.number.isRequired, + windowWidth: PropTypes.number.isRequired, + windowCenter: PropTypes.number.isRequired, + imageId: PropTypes.string.isRequired, + imageIndex: PropTypes.number.isRequired, + stackSize: PropTypes.number.isRequired, + activeTools: PropTypes.arrayOf(PropTypes.string), +}; + +ViewportOverlay.defaultProps = { + activeTools: [], +}; + +export default ViewportOverlay; diff --git a/extensions/measurement-tracking/src/getViewportModule.js b/extensions/measurement-tracking/src/getViewportModule.js index d53f5b77e..e01118421 100644 --- a/extensions/measurement-tracking/src/getViewportModule.js +++ b/extensions/measurement-tracking/src/getViewportModule.js @@ -13,16 +13,20 @@ const OHIFCornerstoneViewport = props => { }; function getViewportModule({ servicesManager, commandsManager }) { - const ExtendedOHIFCornerstoneSRViewport = props => { + const ExtendedOHIFCornerstoneTrackingViewport = props => { return ( - + ); }; return [ { name: 'cornerstone-tracked', - component: ExtendedOHIFCornerstoneSRViewport, + component: ExtendedOHIFCornerstoneTrackingViewport, }, ]; }