Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 | 196x 196x 54x 54x 54x 54x 54x 1050x 1050x 54x 1050x 1050x 54x 54x 28x 196x 196x 196x 364x 364x 364x 364x 674x 364x 364x 364x 6878x 6878x 364x 364x 364x 196x | import * as cornerstoneTools from '@cornerstonejs/tools'; import { updateSegmentationStats } from './updateSegmentationStats'; /** * Sets up the handler for segmentation data modification events */ export function setupSegmentationDataModifiedHandler({ segmentationService, customizationService, commandsManager, }) { // A flag to indicate if the event is unsubscribed to. This is important because // the debounced callback does an await and in that period of time the event may have // been unsubscribed. let isUnsubscribed = false; const { unsubscribe: debouncedUnsubscribe } = segmentationService.subscribeDebounced( segmentationService.EVENTS.SEGMENTATION_DATA_MODIFIED, async ({ segmentationId }) => { const disableUpdateSegmentationStats = customizationService.getCustomization('panelSegmentation.disableUpdateSegmentationStats'); const segmentation = segmentationService.getSegmentation(segmentationId); Iif (!segmentation || disableUpdateSegmentationStats) { return; } const readableText = customizationService.getCustomization('panelSegmentation.readableText'); // Check for segments with bidirectional measurements and update them const segmentIndices = Object.keys(segmentation.segments) .map(index => parseInt(index)) .filter(index => index > 0); for (const segmentIndex of segmentIndices) { const segment = segmentation.segments[segmentIndex]; Iif (segment?.cachedStats?.namedStats?.bidirectional) { // Run the command to update the bidirectional measurement commandsManager.runCommand('runSegmentBidirectional', { segmentationId, segmentIndex, }); } } const updatedSegmentation = await updateSegmentationStats({ segmentation, segmentationId, readableText, }); if (!isUnsubscribed && updatedSegmentation) { segmentationService.addOrUpdateSegmentation({ segmentationId, segments: updatedSegmentation.segments, }); } }, 1000 ); const unsubscribe = () => { isUnsubscribed = true; debouncedUnsubscribe(); }; return { unsubscribe }; } /** * Sets up the handler for segmentation modification events */ export function setupSegmentationModifiedHandler({ segmentationService }) { const { unsubscribe } = segmentationService.subscribe( segmentationService.EVENTS.SEGMENTATION_MODIFIED, async ({ segmentationId }) => { const segmentation = segmentationService.getSegmentation(segmentationId); Iif (!segmentation) { return; } const annotationState = cornerstoneTools.annotation.state.getAllAnnotations(); const bidirectionalAnnotations = annotationState.filter( annotation => annotation.metadata.toolName === cornerstoneTools.SegmentBidirectionalTool.toolName ); let toRemoveUIDs = []; Iif (!segmentation) { toRemoveUIDs = bidirectionalAnnotations.map( annotation => annotation.metadata.segmentationId === segmentationId ); return; } else { const segmentIndices = Object.keys(segmentation.segments) .map(index => parseInt(index)) .filter(index => index > 0); // check if there is a bidirectional data that exists but the segment // does not exists anymore we need to remove the bidirectional data const bidirectionalAnnotationsToRemove = bidirectionalAnnotations.filter( annotation => annotation.metadata.segmentationId === segmentationId && !segmentIndices.includes(annotation.metadata.segmentIndex) ); toRemoveUIDs = bidirectionalAnnotationsToRemove.map(annotation => annotation.annotationUID); } toRemoveUIDs.forEach(uid => { cornerstoneTools.annotation.state.removeAnnotation(uid); }); } ); return { unsubscribe }; } |