Merge pull request #2596 from OHIF/fix/ohif-2590
Re #2590: Fix segments visibility handler
This commit is contained in:
commit
f4b7091ae4
@ -24,6 +24,7 @@ const SegmentItem = ({
|
|||||||
onClick,
|
onClick,
|
||||||
itemClass,
|
itemClass,
|
||||||
color,
|
color,
|
||||||
|
labelmap3D,
|
||||||
visible,
|
visible,
|
||||||
onVisibilityChange,
|
onVisibilityChange,
|
||||||
}) => {
|
}) => {
|
||||||
@ -39,7 +40,7 @@ const SegmentItem = ({
|
|||||||
event.stopPropagation();
|
event.stopPropagation();
|
||||||
const newVisibility = !isVisible;
|
const newVisibility = !isVisible;
|
||||||
setIsVisible(newVisibility);
|
setIsVisible(newVisibility);
|
||||||
onVisibilityChange(newVisibility, index);
|
onVisibilityChange(newVisibility, index, labelmap3D);
|
||||||
};
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
|||||||
@ -431,23 +431,43 @@ const SegmentationPanel = ({
|
|||||||
return enabledElements[activeIndex].element;
|
return enabledElements[activeIndex].element;
|
||||||
};
|
};
|
||||||
|
|
||||||
const onSegmentVisibilityChangeHandler = (isVisible, segmentNumber) => {
|
const onSegmentVisibilityChangeHandler = (
|
||||||
/** Get all labelmaps with this segmentNumber (overlapping segments) */
|
isVisible,
|
||||||
const { labelmaps3D } = getBrushStackState();
|
segmentNumber,
|
||||||
const possibleLabelMaps3D = labelmaps3D.filter(({ labelmaps2D }) => {
|
labelmap3D
|
||||||
return labelmaps2D.some(({ segmentsOnLabelmap }) =>
|
) => {
|
||||||
segmentsOnLabelmap.includes(segmentNumber)
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
let segmentsHidden = [];
|
let segmentsHidden = [];
|
||||||
possibleLabelMaps3D.forEach(labelmap3D => {
|
if (labelmap3D.metadata.hasOverlapping) {
|
||||||
labelmap3D.segmentsHidden[segmentNumber] = !isVisible;
|
/** Get all labelmaps with this segmentNumber and that
|
||||||
|
* are from the same series (overlapping segments) */
|
||||||
|
const { labelmaps3D } = getBrushStackState();
|
||||||
|
|
||||||
segmentsHidden = [
|
const sameSeriesLabelMaps3D = labelmaps3D.filter(({ metadata }) => {
|
||||||
...new Set([...segmentsHidden, ...labelmap3D.segmentsHidden]),
|
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 }));
|
setState(state => ({ ...state, segmentsHidden }));
|
||||||
|
|
||||||
@ -514,6 +534,7 @@ const SegmentationPanel = ({
|
|||||||
label={segmentLabel}
|
label={segmentLabel}
|
||||||
index={segmentNumber}
|
index={segmentNumber}
|
||||||
color={color}
|
color={color}
|
||||||
|
labelmap3D={labelmap3D}
|
||||||
visible={!labelmap3D.segmentsHidden[segmentIndex]}
|
visible={!labelmap3D.segmentsHidden[segmentIndex]}
|
||||||
onVisibilityChange={onSegmentVisibilityChangeHandler}
|
onVisibilityChange={onSegmentVisibilityChangeHandler}
|
||||||
/>
|
/>
|
||||||
|
|||||||
@ -64,8 +64,17 @@ export default function getSopClassHandlerModule({ servicesManager }) {
|
|||||||
metadata,
|
metadata,
|
||||||
};
|
};
|
||||||
|
|
||||||
segDisplaySet.getSourceDisplaySet = function(studies, activateLabelMap = true, onDisplaySetLoadFailureHandler) {
|
segDisplaySet.getSourceDisplaySet = function(
|
||||||
return getSourceDisplaySet(studies, segDisplaySet, activateLabelMap, onDisplaySetLoadFailureHandler);
|
studies,
|
||||||
|
activateLabelMap = true,
|
||||||
|
onDisplaySetLoadFailureHandler
|
||||||
|
) {
|
||||||
|
return getSourceDisplaySet(
|
||||||
|
studies,
|
||||||
|
segDisplaySet,
|
||||||
|
activateLabelMap,
|
||||||
|
onDisplaySetLoadFailureHandler
|
||||||
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
segDisplaySet.load = async function(referencedDisplaySet, studies) {
|
segDisplaySet.load = async function(referencedDisplaySet, studies) {
|
||||||
@ -98,6 +107,9 @@ export default function getSopClassHandlerModule({ servicesManager }) {
|
|||||||
if (labelmapBufferArray.length > 1) {
|
if (labelmapBufferArray.length > 1) {
|
||||||
let labelmapIndexes = [];
|
let labelmapIndexes = [];
|
||||||
for (let i = 0; i < labelmapBufferArray.length; ++i) {
|
for (let i = 0; i < labelmapBufferArray.length; ++i) {
|
||||||
|
segMetadata.segmentationSeriesInstanceUID =
|
||||||
|
segDisplaySet.SeriesInstanceUID;
|
||||||
|
segMetadata.hasOverlapping = true;
|
||||||
labelmapIndexes.push(
|
labelmapIndexes.push(
|
||||||
await loadSegmentation(
|
await loadSegmentation(
|
||||||
imageIds,
|
imageIds,
|
||||||
@ -118,6 +130,9 @@ export default function getSopClassHandlerModule({ servicesManager }) {
|
|||||||
labelmapIndex = labelmapIndexes[0];
|
labelmapIndex = labelmapIndexes[0];
|
||||||
console.warn('Overlapping segments!');
|
console.warn('Overlapping segments!');
|
||||||
} else {
|
} else {
|
||||||
|
segMetadata.segmentationSeriesInstanceUID =
|
||||||
|
segDisplaySet.SeriesInstanceUID;
|
||||||
|
segMetadata.hasOverlapping = false;
|
||||||
labelmapIndex = await loadSegmentation(
|
labelmapIndex = await loadSegmentation(
|
||||||
imageIds,
|
imageIds,
|
||||||
segDisplaySet,
|
segDisplaySet,
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user