WIP OHIF-190 rehydrate.
This commit is contained in:
parent
14005d61f3
commit
baedf243bc
@ -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 PropTypes from 'prop-types';
|
||||||
import cornerstoneTools from 'cornerstone-tools';
|
import cornerstoneTools from 'cornerstone-tools';
|
||||||
import cornerstone from 'cornerstone-core';
|
import cornerstone from 'cornerstone-core';
|
||||||
@ -16,12 +16,15 @@ const globalImageIdSpecificToolStateManager =
|
|||||||
|
|
||||||
const { StackManager, guid } = OHIF.utils;
|
const { StackManager, guid } = OHIF.utils;
|
||||||
|
|
||||||
|
const MEASUREMENT_TRACKING_EXTENSION_ID = 'org.ohif.measurement-tracking';
|
||||||
|
|
||||||
function OHIFCornerstoneSRViewport({
|
function OHIFCornerstoneSRViewport({
|
||||||
children,
|
children,
|
||||||
dataSource,
|
dataSource,
|
||||||
displaySet,
|
displaySet,
|
||||||
viewportIndex,
|
viewportIndex,
|
||||||
servicesManager,
|
servicesManager,
|
||||||
|
extensionManager,
|
||||||
}) {
|
}) {
|
||||||
const { DisplaySetService, MeasurementService } = servicesManager.services;
|
const { DisplaySetService, MeasurementService } = servicesManager.services;
|
||||||
const [viewportGrid, viewportGridService] = useViewportGrid();
|
const [viewportGrid, viewportGridService] = useViewportGrid();
|
||||||
@ -31,9 +34,29 @@ function OHIFCornerstoneSRViewport({
|
|||||||
const [activeDisplaySetData, setActiveDisplaySetData] = useState({});
|
const [activeDisplaySetData, setActiveDisplaySetData] = useState({});
|
||||||
const [element, setElement] = useState(null);
|
const [element, setElement] = useState(null);
|
||||||
const [isHydrated, setIsHydrated] = useState(displaySet.isHydrated);
|
const [isHydrated, setIsHydrated] = useState(displaySet.isHydrated);
|
||||||
|
|
||||||
const { viewports, activeViewportIndex } = viewportGrid;
|
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 onElementEnabled = evt => {
|
||||||
const eventData = evt.detail;
|
const eventData = evt.detail;
|
||||||
const targetElement = eventData.element;
|
const targetElement = eventData.element;
|
||||||
@ -207,6 +230,7 @@ function OHIFCornerstoneSRViewport({
|
|||||||
SeriesInstanceUID,
|
SeriesInstanceUID,
|
||||||
PixelSpacing,
|
PixelSpacing,
|
||||||
SeriesNumber,
|
SeriesNumber,
|
||||||
|
displaySetInstanceUID,
|
||||||
} = activeDisplaySetData;
|
} = activeDisplaySetData;
|
||||||
|
|
||||||
const onMeasurementChange = direction => {
|
const onMeasurementChange = direction => {
|
||||||
@ -274,6 +298,8 @@ function OHIFCornerstoneSRViewport({
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const imageIds = [];
|
||||||
|
|
||||||
Object.keys(hydratableMeasurementsInSR).forEach(toolType => {
|
Object.keys(hydratableMeasurementsInSR).forEach(toolType => {
|
||||||
const toolDataForToolType = hydratableMeasurementsInSR[toolType];
|
const toolDataForToolType = hydratableMeasurementsInSR[toolType];
|
||||||
|
|
||||||
@ -300,6 +326,10 @@ function OHIFCornerstoneSRViewport({
|
|||||||
data,
|
data,
|
||||||
toMeasurementSchema
|
toMeasurementSchema
|
||||||
);
|
);
|
||||||
|
|
||||||
|
if (!imageIds.includes(imageId)) {
|
||||||
|
imageIds.push(imageId);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -309,8 +339,53 @@ function OHIFCornerstoneSRViewport({
|
|||||||
|
|
||||||
// TODO -> Switch to cornerstone viewport.
|
// TODO -> Switch to cornerstone viewport.
|
||||||
// TODO -> Tell measurement service to track the series on which the measurements were added.
|
// 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;
|
debugger;
|
||||||
|
|
||||||
|
viewportGridService.setDisplaysetForViewport({
|
||||||
|
viewportIndex: activeViewportIndex,
|
||||||
|
displaySetInstanceUID: activeDisplaySetData.displaySetInstanceUID,
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
@ -460,6 +535,7 @@ async function _getViewportAndActiveDisplaySetData(
|
|||||||
SeriesDescription: image0.SeriesDescription,
|
SeriesDescription: image0.SeriesDescription,
|
||||||
SeriesInstanceUID: image0.SeriesInstanceUID,
|
SeriesInstanceUID: image0.SeriesInstanceUID,
|
||||||
SeriesNumber: image0.SeriesNumber,
|
SeriesNumber: image0.SeriesNumber,
|
||||||
|
displaySetInstanceUID,
|
||||||
};
|
};
|
||||||
|
|
||||||
return { viewportData, activeDisplaySetData };
|
return { viewportData, activeDisplaySetData };
|
||||||
|
|||||||
@ -29,6 +29,10 @@ export default {
|
|||||||
id: 'org.ohif.cornerstone',
|
id: 'org.ohif.cornerstone',
|
||||||
version: '3.0.0',
|
version: '3.0.0',
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
id: 'org.ohif.measurement-tracking',
|
||||||
|
version: '^0.0.1',
|
||||||
|
},
|
||||||
],
|
],
|
||||||
|
|
||||||
preRegistration({ servicesManager, configuration = {} }) {
|
preRegistration({ servicesManager, configuration = {} }) {
|
||||||
@ -41,11 +45,12 @@ export default {
|
|||||||
* @param {object} [configuration={}]
|
* @param {object} [configuration={}]
|
||||||
* @param {object|array} [configuration.csToolsConfig] - Passed directly to `initCornerstoneTools`
|
* @param {object|array} [configuration.csToolsConfig] - Passed directly to `initCornerstoneTools`
|
||||||
*/
|
*/
|
||||||
getViewportModule({ servicesManager }) {
|
getViewportModule({ servicesManager, extensionManager }) {
|
||||||
const ExtendedOHIFCornerstoneSRViewport = props => {
|
const ExtendedOHIFCornerstoneSRViewport = props => {
|
||||||
return (
|
return (
|
||||||
<OHIFCornerstoneSRViewport
|
<OHIFCornerstoneSRViewport
|
||||||
servicesManager={servicesManager}
|
servicesManager={servicesManager}
|
||||||
|
extensionManager={extensionManager}
|
||||||
{...props}
|
{...props}
|
||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
|
|||||||
@ -15,6 +15,18 @@ const machineConfiguration = {
|
|||||||
entry: 'clearContext',
|
entry: 'clearContext',
|
||||||
on: {
|
on: {
|
||||||
TRACK_SERIES: 'promptBeginTracking',
|
TRACK_SERIES: 'promptBeginTracking',
|
||||||
|
SET_TRACKED_SERIES: [
|
||||||
|
{
|
||||||
|
target: 'tracking',
|
||||||
|
actions: ['setTrackedStudyAndSeries'],
|
||||||
|
cond: 'isNewStudy',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
target: 'tracking',
|
||||||
|
actions: ['addTrackedSeries'],
|
||||||
|
cond: 'isNewSeries',
|
||||||
|
},
|
||||||
|
],
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
promptBeginTracking: {
|
promptBeginTracking: {
|
||||||
@ -51,6 +63,7 @@ const machineConfiguration = {
|
|||||||
cond: 'isNewSeries',
|
cond: 'isNewSeries',
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
|
||||||
UNTRACK_SERIES: [
|
UNTRACK_SERIES: [
|
||||||
{
|
{
|
||||||
target: 'tracking',
|
target: 'tracking',
|
||||||
|
|||||||
@ -297,8 +297,6 @@ class MeasurementService {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
debugger;
|
|
||||||
|
|
||||||
const sourceInfo = this._getSourceInfo(source);
|
const sourceInfo = this._getSourceInfo(source);
|
||||||
|
|
||||||
if (!definition) {
|
if (!definition) {
|
||||||
|
|||||||
@ -28,13 +28,13 @@ function ViewerViewportGrid(props) {
|
|||||||
displaySets => {
|
displaySets => {
|
||||||
displaySets.sort((a, b) => {
|
displaySets.sort((a, b) => {
|
||||||
const isImageSet = x => x instanceof ImageSet;
|
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({
|
viewportGridService.setDisplaysetForViewport({
|
||||||
viewportIndex: 0,
|
viewportIndex: 0,
|
||||||
displaySetInstanceUID: displaySets[0].displaySetInstanceUID,
|
displaySetInstanceUID: displaySets[0].displaySetInstanceUID,
|
||||||
});
|
});
|
||||||
},
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
return () => {
|
return () => {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user