[OHIF-235] Lazy processing of DICOM SR for viewport. (#1849)

* Only process SR on consumption of viewport.

* remove debugger

Co-authored-by: Danny Brown <danny.ri.brown@gmail.com>
This commit is contained in:
James Petts 2020-07-02 15:17:04 +01:00 committed by GitHub
parent f24f0bb11d
commit c36f853a38
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 32 additions and 15 deletions

View File

@ -106,6 +106,13 @@ function OHIFCornerstoneSRViewport({
setElement(targetElement);
};
useEffect(() => {
if (!displaySet.isLoaded) {
displaySet.load();
setIsHydrated(displaySet.isHydrated);
}
}, [displaySet]);
const setTrackingUniqueIdentifiersForElement = useCallback(targetElement => {
const { measurements } = displaySet;

View File

@ -55,10 +55,6 @@ function _getDisplaySetsFromSeries(
throw new Error('No instances were provided');
}
const { DisplaySetService, MeasurementService } = servicesManager.services;
const dataSources = extensionManager.getDataSources();
const dataSource = dataSources[0];
const instance = instances[0];
const {
@ -68,8 +64,8 @@ function _getDisplaySetsFromSeries(
SeriesDescription,
SeriesNumber,
SeriesDate,
ConceptNameCodeSequence,
} = instance;
const { ConceptNameCodeSequence, ContentSequence } = instance;
if (
!ConceptNameCodeSequence ||
@ -93,22 +89,36 @@ function _getDisplaySetsFromSeries(
SeriesInstanceUID,
StudyInstanceUID,
SOPClassHandlerId: `${id}.sopClassHandlerModule.${sopClassHandlerName}`,
referencedImages: _getReferencedImagesList(ContentSequence),
measurements: _getMeasurements(ContentSequence),
referencedImages: null,
measurements: null,
isDerivedDisplaySet: true,
isLoaded: false,
sopClassUids,
instance,
};
displaySet.load = () => _load(displaySet, servicesManager, extensionManager);
return [displaySet];
}
function _load(displaySet, servicesManager, extensionManager) {
const { DisplaySetService, MeasurementService } = servicesManager.services;
const dataSources = extensionManager.getDataSources();
const dataSource = dataSources[0];
const { ContentSequence } = displaySet.instance;
displaySet.referencedImages = _getReferencedImagesList(ContentSequence);
displaySet.measurements = _getMeasurements(ContentSequence);
const mappings = MeasurementService.getSourceMappings(
'CornerstoneTools',
'4'
);
if (isRehydratable(displaySet, mappings)) {
displaySet.isLocked = false;
displaySet.isHydrated = false;
} else {
displaySet.isLocked = true;
}
displaySet.isHydrated = false;
displaySet.isLocked = isRehydratable(displaySet, mappings) ? false : true;
// Check currently added displaySets and add measurements if the sources exist.
DisplaySetService.activeDisplaySets.forEach(activeDisplaySet => {
@ -135,8 +145,6 @@ function _getDisplaySetsFromSeries(
});
}
);
return [displaySet];
}
function _checkIfCanAddMeasurementsToDisplaySet(

View File

@ -40,6 +40,7 @@ function PanelMeasurementTableTracking({ servicesManager, extensionManager }) {
trackedStudy === m.referenceStudyUID &&
trackedSeries.includes(m.referenceSeriesUID)
);
const mappedMeasurements = filteredMeasurements.map((m, index) =>
_mapMeasurementToDisplay(m, index, MeasurementService.VALUE_TYPES)
);

View File

@ -110,6 +110,7 @@ function ViewerViewportGrid(props) {
const displaySet =
DisplaySetService.getDisplaySetByUID(displaySetInstanceUID) || {};
const ViewportComponent = _getViewportComponent(
displaySet.SOPClassHandlerId,
viewportComponents