fix: 🐛 - Put guards in all places that a cornerstone re-render (#1899)

* fix: 🐛 - Put guards in all places that a cornerstone re-render
This commit is contained in:
James Petts 2020-07-13 17:02:23 +01:00 committed by GitHub
parent 029f8af4c7
commit 451f7eab92
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
11 changed files with 53 additions and 29 deletions

View File

@ -10,6 +10,14 @@ const scroll = cornerstoneTools.import('util/scroll');
const { studyMetadataManager } = OHIF.utils; const { studyMetadataManager } = OHIF.utils;
const { setViewportSpecificData } = OHIF.redux.actions; const { setViewportSpecificData } = OHIF.redux.actions;
const refreshCornerstoneViewports = () => {
cornerstone.getEnabledElements().forEach(enabledElement => {
if (enabledElement.image) {
cornerstone.updateImage(enabledElement.element);
}
});
};
const commandsModule = ({ servicesManager }) => { const commandsModule = ({ servicesManager }) => {
const actions = { const actions = {
rotateViewport: ({ viewports, rotation }) => { rotateViewport: ({ viewports, rotation }) => {
@ -180,10 +188,7 @@ const commandsModule = ({ servicesManager }) => {
measurementApi.syncMeasurementsAndToolData(); measurementApi.syncMeasurementsAndToolData();
// Update images in all active viewports refreshCornerstoneViewports();
cornerstone.getEnabledElements().forEach(enabledElement => {
cornerstone.updateImage(enabledElement.element);
});
}, },
getNearbyToolData({ element, canvasCoordinates, availableToolTypes }) { getNearbyToolData({ element, canvasCoordinates, availableToolTypes }) {
const nearbyTool = {}; const nearbyTool = {};
@ -262,23 +267,26 @@ const commandsModule = ({ servicesManager }) => {
StudyInstanceUID, StudyInstanceUID,
SOPInstanceUID, SOPInstanceUID,
frameIndex, frameIndex,
activeViewportIndex activeViewportIndex,
}) => { }) => {
const study = studyMetadataManager.get(StudyInstanceUID); const study = studyMetadataManager.get(StudyInstanceUID);
const displaySet = study.findDisplaySet(ds => { const displaySet = study.findDisplaySet(ds => {
return ds.images && ds.images.find(i => i.getSOPInstanceUID() === SOPInstanceUID) return (
ds.images &&
ds.images.find(i => i.getSOPInstanceUID() === SOPInstanceUID)
);
}); });
displaySet.SOPInstanceUID = SOPInstanceUID; displaySet.SOPInstanceUID = SOPInstanceUID;
displaySet.frameIndex = frameIndex; displaySet.frameIndex = frameIndex;
window.store.dispatch(setViewportSpecificData(activeViewportIndex, displaySet)); window.store.dispatch(
setViewportSpecificData(activeViewportIndex, displaySet)
);
cornerstone.getEnabledElements().forEach(enabledElement => { refreshCornerstoneViewports();
cornerstone.updateImage(enabledElement.element); },
});
}
}; };
const definitions = { const definitions = {

View File

@ -17,7 +17,10 @@ const { studyMetadataManager } = utils;
const refreshViewport = () => { const refreshViewport = () => {
cornerstone.getEnabledElements().forEach(enabledElement => { cornerstone.getEnabledElements().forEach(enabledElement => {
cornerstone.updateImage(enabledElement.element); debugger;
if (enabledElement.image) {
cornerstone.updateImage(enabledElement.element);
}
}); });
}; };

View File

@ -236,7 +236,7 @@ function _setROIContourRTROIObservations(
function _setToolEnabledIfNotEnabled(toolName) { function _setToolEnabledIfNotEnabled(toolName) {
cornerstone.getEnabledElements().forEach(enabledElement => { cornerstone.getEnabledElements().forEach(enabledElement => {
const { element } = enabledElement; const { element, image } = enabledElement;
const tool = cornerstoneTools.getToolForElement(element, toolName); const tool = cornerstoneTools.getToolForElement(element, toolName);
if (tool.mode !== 'enabled') { if (tool.mode !== 'enabled') {
@ -244,7 +244,9 @@ function _setToolEnabledIfNotEnabled(toolName) {
cornerstoneTools.setToolEnabled(toolName); cornerstoneTools.setToolEnabled(toolName);
} }
cornerstone.updateImage(element); if (image) {
cornerstone.updateImage(element);
}
}); });
} }

View File

@ -5,7 +5,9 @@ import structureSetReferencesSeriesInstanceUid from './lib/structureSetReference
// We should put this as a helper somewhere as we are using it in mutliple places. // We should put this as a helper somewhere as we are using it in mutliple places.
function refreshViewport() { function refreshViewport() {
cornerstone.getEnabledElements().forEach(enabledElement => { cornerstone.getEnabledElements().forEach(enabledElement => {
cornerstone.updateImage(enabledElement.element); if (enabledElement.image) {
cornerstone.updateImage(enabledElement.element);
}
}); });
} }

View File

@ -251,7 +251,9 @@ export default class MeasurementApi {
this.syncMeasurementsAndToolData(); this.syncMeasurementsAndToolData();
cornerstone.getEnabledElements().forEach(enabledElement => { cornerstone.getEnabledElements().forEach(enabledElement => {
cornerstone.updateImage(enabledElement.element); if (enabledElement.image) {
cornerstone.updateImage(enabledElement.element);
}
}); });
// Let others know that the measurements are updated // Let others know that the measurements are updated

View File

@ -0,0 +1,9 @@
import cornerstone from 'cornerstone-core';
export default function refreshCornerstoneViewports() {
cornerstone.getEnabledElements().forEach(enabledElement => {
if (enabledElement.image) {
cornerstone.updateImage(enabledElement.element);
}
});
}

View File

@ -4,6 +4,7 @@ import log from '../../log';
import user from '../../user'; import user from '../../user';
import getImageAttributes from '../lib/getImageAttributes'; import getImageAttributes from '../lib/getImageAttributes';
import getLabel from '../lib/getLabel'; import getLabel from '../lib/getLabel';
import refreshCornerstoneViewports from '../lib/refreshCornerstoneViewports';
export default function({ eventData, tool, toolGroupId, toolGroup }) { export default function({ eventData, tool, toolGroupId, toolGroup }) {
const measurementApi = MeasurementApi.Instance; const measurementApi = MeasurementApi.Instance;
@ -86,9 +87,7 @@ export default function({ eventData, tool, toolGroupId, toolGroup }) {
} }
// TODO: This is very hacky, but will work for now // TODO: This is very hacky, but will work for now
cornerstone.getEnabledElements().forEach(enabledElement => { refreshCornerstoneViewports();
cornerstone.updateImage(enabledElement.element);
});
// TODO: Notify about the last activated measurement // TODO: Notify about the last activated measurement

View File

@ -1,6 +1,7 @@
import cornerstone from 'cornerstone-core'; import cornerstone from 'cornerstone-core';
import { MeasurementApi } from '../classes'; import { MeasurementApi } from '../classes';
import log from '../../log'; import log from '../../log';
import refreshCornerstoneViewports from '../lib/refreshCornerstoneViewports';
export default function({ eventData, tool, toolGroupId, toolGroup }) { export default function({ eventData, tool, toolGroupId, toolGroup }) {
log.info('CornerstoneToolsMeasurementRemoved'); log.info('CornerstoneToolsMeasurementRemoved');
@ -37,9 +38,7 @@ export default function({ eventData, tool, toolGroupId, toolGroup }) {
} }
// TODO: This is very hacky, but will work for now // TODO: This is very hacky, but will work for now
cornerstone.getEnabledElements().forEach(enabledElement => { refreshCornerstoneViewports();
cornerstone.updateImage(enabledElement.element);
});
if (MeasurementApi.isToolIncluded(tool)) { if (MeasurementApi.isToolIncluded(tool)) {
// TODO: Notify that viewer suffered changes // TODO: Notify that viewer suffered changes

View File

@ -4,6 +4,7 @@ import log from '../../log';
import user from '../../user'; import user from '../../user';
import getImageAttributes from '../lib/getImageAttributes'; import getImageAttributes from '../lib/getImageAttributes';
import getLabel from '../lib/getLabel'; import getLabel from '../lib/getLabel';
import refreshCornerstoneViewports from '../lib/refreshCornerstoneViewports';
export default function handleSingleMeasurementAdded({ eventData, tool }) { export default function handleSingleMeasurementAdded({ eventData, tool }) {
const measurementApi = MeasurementApi.Instance; const measurementApi = MeasurementApi.Instance;
@ -39,9 +40,7 @@ export default function handleSingleMeasurementAdded({ eventData, tool }) {
} }
// TODO: This is very hacky, but will work for now // TODO: This is very hacky, but will work for now
cornerstone.getEnabledElements().forEach(enabledElement => { refreshCornerstoneViewports();
cornerstone.updateImage(enabledElement.element);
});
// TODO: Notify about the last activated measurement // TODO: Notify about the last activated measurement

View File

@ -1,6 +1,7 @@
import cornerstone from 'cornerstone-core'; import cornerstone from 'cornerstone-core';
import { MeasurementApi } from '../classes'; import { MeasurementApi } from '../classes';
import log from '../../log'; import log from '../../log';
import refreshCornerstoneViewports from '../lib/refreshCornerstoneViewports';
export default function handleSingleMeasurementRemoved({ export default function handleSingleMeasurementRemoved({
eventData, eventData,
@ -35,9 +36,7 @@ export default function handleSingleMeasurementRemoved({
}); });
// TODO: This is very hacky, but will work for now // TODO: This is very hacky, but will work for now
cornerstone.getEnabledElements().forEach(enabledElement => { refreshCornerstoneViewports();
cornerstone.updateImage(enabledElement.element);
});
if (MeasurementApi.isToolIncluded(tool)) { if (MeasurementApi.isToolIncluded(tool)) {
// TODO: Notify that viewer suffered changes // TODO: Notify that viewer suffered changes

View File

@ -329,7 +329,9 @@ const mapDispatchToProps = (dispatch, ownProps) => {
measurementApi.syncMeasurementsAndToolData(); measurementApi.syncMeasurementsAndToolData();
cornerstone.getEnabledElements().forEach(enabledElement => { cornerstone.getEnabledElements().forEach(enabledElement => {
cornerstone.updateImage(enabledElement.element); if (enabledElement.image) {
cornerstone.updateImage(enabledElement.element);
}
}); });
// Needs to update viewports.layout state to set layout // Needs to update viewports.layout state to set layout