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 { setViewportSpecificData } = OHIF.redux.actions;
const refreshCornerstoneViewports = () => {
cornerstone.getEnabledElements().forEach(enabledElement => {
if (enabledElement.image) {
cornerstone.updateImage(enabledElement.element);
}
});
};
const commandsModule = ({ servicesManager }) => {
const actions = {
rotateViewport: ({ viewports, rotation }) => {
@ -180,10 +188,7 @@ const commandsModule = ({ servicesManager }) => {
measurementApi.syncMeasurementsAndToolData();
// Update images in all active viewports
cornerstone.getEnabledElements().forEach(enabledElement => {
cornerstone.updateImage(enabledElement.element);
});
refreshCornerstoneViewports();
},
getNearbyToolData({ element, canvasCoordinates, availableToolTypes }) {
const nearbyTool = {};
@ -262,23 +267,26 @@ const commandsModule = ({ servicesManager }) => {
StudyInstanceUID,
SOPInstanceUID,
frameIndex,
activeViewportIndex
activeViewportIndex,
}) => {
const study = studyMetadataManager.get(StudyInstanceUID);
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.frameIndex = frameIndex;
window.store.dispatch(setViewportSpecificData(activeViewportIndex, displaySet));
window.store.dispatch(
setViewportSpecificData(activeViewportIndex, displaySet)
);
cornerstone.getEnabledElements().forEach(enabledElement => {
cornerstone.updateImage(enabledElement.element);
});
}
refreshCornerstoneViewports();
},
};
const definitions = {

View File

@ -17,7 +17,10 @@ const { studyMetadataManager } = utils;
const refreshViewport = () => {
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) {
cornerstone.getEnabledElements().forEach(enabledElement => {
const { element } = enabledElement;
const { element, image } = enabledElement;
const tool = cornerstoneTools.getToolForElement(element, toolName);
if (tool.mode !== 'enabled') {
@ -244,7 +244,9 @@ function _setToolEnabledIfNotEnabled(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.
function refreshViewport() {
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();
cornerstone.getEnabledElements().forEach(enabledElement => {
cornerstone.updateImage(enabledElement.element);
if (enabledElement.image) {
cornerstone.updateImage(enabledElement.element);
}
});
// 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 getImageAttributes from '../lib/getImageAttributes';
import getLabel from '../lib/getLabel';
import refreshCornerstoneViewports from '../lib/refreshCornerstoneViewports';
export default function({ eventData, tool, toolGroupId, toolGroup }) {
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
cornerstone.getEnabledElements().forEach(enabledElement => {
cornerstone.updateImage(enabledElement.element);
});
refreshCornerstoneViewports();
// TODO: Notify about the last activated measurement

View File

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

View File

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

View File

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

View File

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