From 437c01511e6341f718207c2854bff3d02226616e Mon Sep 17 00:00:00 2001 From: igoroctaviano Date: Tue, 19 Jan 2021 14:10:40 -0300 Subject: [PATCH] Toggle visibility for multiple labelmaps (overlapping) --- .../SegmentationPanel/SegmentationPanel.js | 66 ++++++++++++------- 1 file changed, 43 insertions(+), 23 deletions(-) diff --git a/extensions/dicom-segmentation/src/components/SegmentationPanel/SegmentationPanel.js b/extensions/dicom-segmentation/src/components/SegmentationPanel/SegmentationPanel.js index 92d3551c0..00e193291 100644 --- a/extensions/dicom-segmentation/src/components/SegmentationPanel/SegmentationPanel.js +++ b/extensions/dicom-segmentation/src/components/SegmentationPanel/SegmentationPanel.js @@ -393,20 +393,30 @@ const SegmentationPanel = ({ }; const onSegmentVisibilityChangeHandler = (isVisible, segmentNumber) => { - const labelmap3D = getActiveLabelMaps3D(); + /** Get all labelmaps with this segmentNumber (overlapping segments) */ + const { labelmaps3D } = getBrushStackState(); + const possibleLabelMaps3D = labelmaps3D.filter(({ labelmaps2D }) => { + return labelmaps2D.some(({ segmentsOnLabelmap }) => + segmentsOnLabelmap.includes(segmentNumber) + ); + }); - if (isCornerstone()) { - labelmap3D.segmentsHidden[segmentNumber] = !isVisible; - } + let segmentsHidden = []; + possibleLabelMaps3D.forEach(labelmap3D => { + if (isCornerstone()) { + labelmap3D.segmentsHidden[segmentNumber] = !isVisible; + } - if (isVTK()) { - onSegmentVisibilityChange(segmentNumber, isVisible); - } + if (isVTK()) { + onSegmentVisibilityChange(segmentNumber, isVisible); + } - setState(state => ({ - ...state, - segmentsHidden: labelmap3D.segmentsHidden, - })); + segmentsHidden = [ + ...new Set([...segmentsHidden, ...labelmap3D.segmentsHidden]), + ]; + }); + + setState(state => ({ ...state, segmentsHidden })); refreshSegmentations(); refreshViewports(); @@ -553,22 +563,32 @@ const SegmentationPanel = ({ }; const onVisibilityChangeHandler = isVisible => { - const labelmap3D = getActiveLabelMaps3D(); - + let segmentsHidden = []; state.segmentNumbers.forEach(segmentNumber => { - if (isCornerstone()) { - labelmap3D.segmentsHidden[segmentNumber] = !isVisible; - } + /** Get all labelmaps with this segmentNumber (overlapping segments) */ + const { labelmaps3D } = getBrushStackState(); + const possibleLabelMaps3D = labelmaps3D.filter(({ labelmaps2D }) => { + return labelmaps2D.some(({ segmentsOnLabelmap }) => + segmentsOnLabelmap.includes(segmentNumber) + ); + }); - if (isVTK()) { - onSegmentVisibilityChange(segmentNumber, isVisible); - } + possibleLabelMaps3D.forEach(labelmap3D => { + if (isCornerstone()) { + labelmap3D.segmentsHidden[segmentNumber] = !isVisible; + } + + if (isVTK()) { + onSegmentVisibilityChange(segmentNumber, isVisible); + } + + segmentsHidden = [ + ...new Set([...segmentsHidden, ...labelmap3D.segmentsHidden]), + ]; + }); }); - setState(state => ({ - ...state, - segmentsHidden: labelmap3D.segmentsHidden, - })); + setState(state => ({ ...state, segmentsHidden })); refreshSegmentations(); refreshViewports();