WIP OHIF-190 rehydrate.

This commit is contained in:
James A. Petts 2020-06-30 10:28:46 +01:00
parent 14005d61f3
commit baedf243bc
5 changed files with 100 additions and 8 deletions

View File

@ -1,4 +1,4 @@
import React, { useCallback, useEffect, useState } from 'react';
import React, { useCallback, useContext, useEffect, useState } from 'react';
import PropTypes from 'prop-types';
import cornerstoneTools from 'cornerstone-tools';
import cornerstone from 'cornerstone-core';
@ -16,12 +16,15 @@ const globalImageIdSpecificToolStateManager =
const { StackManager, guid } = OHIF.utils;
const MEASUREMENT_TRACKING_EXTENSION_ID = 'org.ohif.measurement-tracking';
function OHIFCornerstoneSRViewport({
children,
dataSource,
displaySet,
viewportIndex,
servicesManager,
extensionManager,
}) {
const { DisplaySetService, MeasurementService } = servicesManager.services;
const [viewportGrid, viewportGridService] = useViewportGrid();
@ -31,9 +34,29 @@ function OHIFCornerstoneSRViewport({
const [activeDisplaySetData, setActiveDisplaySetData] = useState({});
const [element, setElement] = useState(null);
const [isHydrated, setIsHydrated] = useState(displaySet.isHydrated);
const { viewports, activeViewportIndex } = viewportGrid;
// Optional hook into tracking extension, if present.
let trackedMeasurements;
let sendTrackedMeasurementsEvent;
if (
extensionManager.registeredExtensionIds.includes(
MEASUREMENT_TRACKING_EXTENSION_ID
)
) {
const contextModule = extensionManager.getModuleEntry(
'org.ohif.measurement-tracking.contextModule.TrackedMeasurementsContext'
);
const useTrackedMeasurements = () => useContext(contextModule.context);
[
trackedMeasurements,
sendTrackedMeasurementsEvent,
] = useTrackedMeasurements();
}
const onElementEnabled = evt => {
const eventData = evt.detail;
const targetElement = eventData.element;
@ -207,6 +230,7 @@ function OHIFCornerstoneSRViewport({
SeriesInstanceUID,
PixelSpacing,
SeriesNumber,
displaySetInstanceUID,
} = activeDisplaySetData;
const onMeasurementChange = direction => {
@ -274,6 +298,8 @@ function OHIFCornerstoneSRViewport({
}
});
const imageIds = [];
Object.keys(hydratableMeasurementsInSR).forEach(toolType => {
const toolDataForToolType = hydratableMeasurementsInSR[toolType];
@ -300,6 +326,10 @@ function OHIFCornerstoneSRViewport({
data,
toMeasurementSchema
);
if (!imageIds.includes(imageId)) {
imageIds.push(imageId);
}
});
});
@ -309,8 +339,53 @@ function OHIFCornerstoneSRViewport({
// TODO -> Switch to cornerstone viewport.
// TODO -> Tell measurement service to track the series on which the measurements were added.
// TODO -> set displaySet as inactive.
// Deal with optional extensions
if (
extensionManager.registeredExtensionIds.includes(
MEASUREMENT_TRACKING_EXTENSION_ID
)
) {
// Set the series touched as tracked.
let targetStudyInstanceUID;
const SeriesInstanceUIDs = [];
for (let i = 0; i < imageIds.length; i++) {
const imageId = imageIds[0];
const {
SeriesInstanceUID,
StudyInstanceUID,
} = cornerstone.metaData.get('instance', imageId);
if (!SeriesInstanceUIDs.includes(SeriesInstanceUID)) {
SeriesInstanceUIDs.push(SeriesInstanceUID);
}
if (!targetStudyInstanceUID) {
targetStudyInstanceUID = StudyInstanceUID;
} else if (targetStudyInstanceUID !== StudyInstanceUID) {
console.warn(
'NO SUPPORT FOR SRs THAT HAVE MEASUREMENTS FROM MULTIPLE STUDIES.'
);
}
}
debugger;
sendTrackedMeasurementsEvent('SET_TRACKED_SERIES', {
StudyInstanceUID: targetStudyInstanceUID,
SeriesInstanceUID: SeriesInstanceUIDs[0],
});
}
debugger;
viewportGridService.setDisplaysetForViewport({
viewportIndex: activeViewportIndex,
displaySetInstanceUID: activeDisplaySetData.displaySetInstanceUID,
});
}
return (
@ -460,6 +535,7 @@ async function _getViewportAndActiveDisplaySetData(
SeriesDescription: image0.SeriesDescription,
SeriesInstanceUID: image0.SeriesInstanceUID,
SeriesNumber: image0.SeriesNumber,
displaySetInstanceUID,
};
return { viewportData, activeDisplaySetData };

View File

@ -29,6 +29,10 @@ export default {
id: 'org.ohif.cornerstone',
version: '3.0.0',
},
{
id: 'org.ohif.measurement-tracking',
version: '^0.0.1',
},
],
preRegistration({ servicesManager, configuration = {} }) {
@ -41,11 +45,12 @@ export default {
* @param {object} [configuration={}]
* @param {object|array} [configuration.csToolsConfig] - Passed directly to `initCornerstoneTools`
*/
getViewportModule({ servicesManager }) {
getViewportModule({ servicesManager, extensionManager }) {
const ExtendedOHIFCornerstoneSRViewport = props => {
return (
<OHIFCornerstoneSRViewport
servicesManager={servicesManager}
extensionManager={extensionManager}
{...props}
/>
);

View File

@ -15,6 +15,18 @@ const machineConfiguration = {
entry: 'clearContext',
on: {
TRACK_SERIES: 'promptBeginTracking',
SET_TRACKED_SERIES: [
{
target: 'tracking',
actions: ['setTrackedStudyAndSeries'],
cond: 'isNewStudy',
},
{
target: 'tracking',
actions: ['addTrackedSeries'],
cond: 'isNewSeries',
},
],
},
},
promptBeginTracking: {
@ -51,6 +63,7 @@ const machineConfiguration = {
cond: 'isNewSeries',
},
],
UNTRACK_SERIES: [
{
target: 'tracking',

View File

@ -297,8 +297,6 @@ class MeasurementService {
return;
}
debugger;
const sourceInfo = this._getSourceInfo(source);
if (!definition) {

View File

@ -28,13 +28,13 @@ function ViewerViewportGrid(props) {
displaySets => {
displaySets.sort((a, b) => {
const isImageSet = x => x instanceof ImageSet;
return (isImageSet(a) === isImageSet(b)) ? 0 : isImageSet(a) ? -1 : 1;
return isImageSet(a) === isImageSet(b) ? 0 : isImageSet(a) ? -1 : 1;
});
viewportGridService.setDisplaysetForViewport({
viewportIndex: 0,
displaySetInstanceUID: displaySets[0].displaySetInstanceUID,
});
},
}
);
return () => {