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 | 59x 59x 25x 25x 25x 25x 25x 484x 484x 25x 484x 484x 25x 25x 18x 59x 59x 59x 252x 252x 252x 252x 1754x 252x 5989x 5989x 252x 252x 252x 59x | 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 ); 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) ); const toRemoveUIDs = bidirectionalAnnotationsToRemove.map( annotation => annotation.annotationUID ); toRemoveUIDs.forEach(uid => { cornerstoneTools.annotation.state.removeAnnotation(uid); }); } ); return { unsubscribe }; } |