Merge pull request #2596 from OHIF/fix/ohif-2590

Re #2590: Fix segments visibility handler
This commit is contained in:
Igor Octaviano 2021-10-27 10:06:35 -03:00 committed by GitHub
commit f4b7091ae4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 55 additions and 18 deletions

View File

@ -24,6 +24,7 @@ const SegmentItem = ({
onClick,
itemClass,
color,
labelmap3D,
visible,
onVisibilityChange,
}) => {
@ -39,7 +40,7 @@ const SegmentItem = ({
event.stopPropagation();
const newVisibility = !isVisible;
setIsVisible(newVisibility);
onVisibilityChange(newVisibility, index);
onVisibilityChange(newVisibility, index, labelmap3D);
};
return (

View File

@ -431,23 +431,43 @@ const SegmentationPanel = ({
return enabledElements[activeIndex].element;
};
const onSegmentVisibilityChangeHandler = (isVisible, segmentNumber) => {
/** Get all labelmaps with this segmentNumber (overlapping segments) */
const { labelmaps3D } = getBrushStackState();
const possibleLabelMaps3D = labelmaps3D.filter(({ labelmaps2D }) => {
return labelmaps2D.some(({ segmentsOnLabelmap }) =>
segmentsOnLabelmap.includes(segmentNumber)
);
});
const onSegmentVisibilityChangeHandler = (
isVisible,
segmentNumber,
labelmap3D
) => {
let segmentsHidden = [];
possibleLabelMaps3D.forEach(labelmap3D => {
labelmap3D.segmentsHidden[segmentNumber] = !isVisible;
if (labelmap3D.metadata.hasOverlapping) {
/** Get all labelmaps with this segmentNumber and that
* are from the same series (overlapping segments) */
const { labelmaps3D } = getBrushStackState();
segmentsHidden = [
...new Set([...segmentsHidden, ...labelmap3D.segmentsHidden]),
];
});
const sameSeriesLabelMaps3D = labelmaps3D.filter(({ metadata }) => {
return (
labelmap3D.metadata.segmentationSeriesInstanceUID ===
metadata.segmentationSeriesInstanceUID
);
});
const possibleLabelMaps3D = sameSeriesLabelMaps3D.filter(
({ labelmaps2D }) => {
return labelmaps2D.some(({ segmentsOnLabelmap }) =>
segmentsOnLabelmap.includes(segmentNumber)
);
}
);
possibleLabelMaps3D.forEach(labelmap3D => {
labelmap3D.segmentsHidden[segmentNumber] = !isVisible;
segmentsHidden = [
...new Set([...segmentsHidden, ...labelmap3D.segmentsHidden]),
];
});
} else {
labelmap3D.segmentsHidden[segmentNumber] = !isVisible;
segmentsHidden = [...labelmap3D.segmentsHidden];
}
setState(state => ({ ...state, segmentsHidden }));
@ -514,6 +534,7 @@ const SegmentationPanel = ({
label={segmentLabel}
index={segmentNumber}
color={color}
labelmap3D={labelmap3D}
visible={!labelmap3D.segmentsHidden[segmentIndex]}
onVisibilityChange={onSegmentVisibilityChangeHandler}
/>

View File

@ -64,8 +64,17 @@ export default function getSopClassHandlerModule({ servicesManager }) {
metadata,
};
segDisplaySet.getSourceDisplaySet = function(studies, activateLabelMap = true, onDisplaySetLoadFailureHandler) {
return getSourceDisplaySet(studies, segDisplaySet, activateLabelMap, onDisplaySetLoadFailureHandler);
segDisplaySet.getSourceDisplaySet = function(
studies,
activateLabelMap = true,
onDisplaySetLoadFailureHandler
) {
return getSourceDisplaySet(
studies,
segDisplaySet,
activateLabelMap,
onDisplaySetLoadFailureHandler
);
};
segDisplaySet.load = async function(referencedDisplaySet, studies) {
@ -98,6 +107,9 @@ export default function getSopClassHandlerModule({ servicesManager }) {
if (labelmapBufferArray.length > 1) {
let labelmapIndexes = [];
for (let i = 0; i < labelmapBufferArray.length; ++i) {
segMetadata.segmentationSeriesInstanceUID =
segDisplaySet.SeriesInstanceUID;
segMetadata.hasOverlapping = true;
labelmapIndexes.push(
await loadSegmentation(
imageIds,
@ -118,6 +130,9 @@ export default function getSopClassHandlerModule({ servicesManager }) {
labelmapIndex = labelmapIndexes[0];
console.warn('Overlapping segments!');
} else {
segMetadata.segmentationSeriesInstanceUID =
segDisplaySet.SeriesInstanceUID;
segMetadata.hasOverlapping = false;
labelmapIndex = await loadSegmentation(
imageIds,
segDisplaySet,