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 | 54x 54x 9x 9x 9x 9x 117x 117x 9x 117x 117x 9x 9x 4x 54x 54x 54x 195x 195x 195x 195x 10472x 195x 195x 195x 5712x 5712x 195x 195x 195x 54x | 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 segmentation = segmentationService.getSegmentation(segmentationId); Iif (!segmentation) { 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 }; } |