2025-11-13 13:12:28 +01:00
|
|
|
import { Enums as csToolsEnums } from '@cornerstonejs/tools';
|
|
|
|
|
|
2025-05-16 19:33:57 +02:00
|
|
|
import {
|
2025-10-29 19:15:52 +01:00
|
|
|
setUpSelectedSegmentationsForViewportHandler,
|
2025-05-16 19:33:57 +02:00
|
|
|
setupSegmentationDataModifiedHandler,
|
|
|
|
|
setupSegmentationModifiedHandler,
|
|
|
|
|
} from './segmentationHandlers';
|
|
|
|
|
|
|
|
|
|
export const setUpSegmentationEventHandlers = ({ servicesManager, commandsManager }) => {
|
|
|
|
|
const { segmentationService, customizationService, displaySetService } = servicesManager.services;
|
|
|
|
|
|
|
|
|
|
const { unsubscribe: unsubscribeSegmentationDataModifiedHandler } =
|
|
|
|
|
setupSegmentationDataModifiedHandler({
|
|
|
|
|
segmentationService,
|
|
|
|
|
customizationService,
|
|
|
|
|
commandsManager,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
const { unsubscribe: unsubscribeSegmentationModifiedHandler } = setupSegmentationModifiedHandler({
|
|
|
|
|
segmentationService,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
const { unsubscribe: unsubscribeSegmentationCreated } = segmentationService.subscribe(
|
|
|
|
|
segmentationService.EVENTS.SEGMENTATION_ADDED,
|
|
|
|
|
evt => {
|
|
|
|
|
const { segmentationId } = evt;
|
|
|
|
|
const displaySet = displaySetService.getDisplaySetByUID(segmentationId);
|
|
|
|
|
if (displaySet) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const segmentation = segmentationService.getSegmentation(segmentationId);
|
2025-11-13 13:12:28 +01:00
|
|
|
const label = segmentation.label;
|
2025-10-29 19:15:52 +01:00
|
|
|
const imageIds =
|
|
|
|
|
segmentation.representationData?.Labelmap?.imageIds ??
|
|
|
|
|
segmentation.representationData?.Contour?.imageIds;
|
2025-05-16 19:33:57 +02:00
|
|
|
|
|
|
|
|
// Create a display set for the segmentation
|
|
|
|
|
const segmentationDisplaySet = {
|
|
|
|
|
displaySetInstanceUID: segmentationId,
|
|
|
|
|
SOPClassUID: '1.2.840.10008.5.1.4.1.1.66.4',
|
|
|
|
|
SOPClassHandlerId: '@ohif/extension-cornerstone-dicom-seg.sopClassHandlerModule.dicom-seg',
|
|
|
|
|
SeriesDescription: label,
|
2025-11-13 13:12:28 +01:00
|
|
|
Modality: segmentation.representationData[csToolsEnums.SegmentationRepresentations.Contour]
|
|
|
|
|
? 'RTSTRUCT'
|
|
|
|
|
: 'SEG',
|
2025-05-16 19:33:57 +02:00
|
|
|
numImageFrames: imageIds.length,
|
|
|
|
|
imageIds,
|
|
|
|
|
isOverlayDisplaySet: true,
|
|
|
|
|
label,
|
|
|
|
|
madeInClient: true,
|
|
|
|
|
segmentationId: segmentationId,
|
|
|
|
|
isDerived: true,
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
displaySetService.addDisplaySets(segmentationDisplaySet);
|
|
|
|
|
}
|
|
|
|
|
);
|
|
|
|
|
|
2025-10-29 19:15:52 +01:00
|
|
|
const { unsubscribeSelectedSegmentationsForViewportEvents } =
|
|
|
|
|
setUpSelectedSegmentationsForViewportHandler({
|
|
|
|
|
segmentationService,
|
|
|
|
|
});
|
|
|
|
|
|
2025-05-16 19:33:57 +02:00
|
|
|
const unsubscriptions = [
|
|
|
|
|
unsubscribeSegmentationDataModifiedHandler,
|
|
|
|
|
unsubscribeSegmentationModifiedHandler,
|
|
|
|
|
unsubscribeSegmentationCreated,
|
2025-10-29 19:15:52 +01:00
|
|
|
...unsubscribeSelectedSegmentationsForViewportEvents,
|
2025-05-16 19:33:57 +02:00
|
|
|
];
|
|
|
|
|
|
|
|
|
|
return { unsubscriptions };
|
|
|
|
|
};
|