All files / tools/src/eventListeners/segmentation/labelmap performStackLabelmapUpdate.ts

81.81% Statements 18/22
50% Branches 4/8
100% Functions 5/5
81.81% Lines 18/22

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                                            794x 794x       794x   794x     794x 794x       794x   794x       794x   794x       794x   794x       794x 794x     794x   794x     794x     794x                
import {
  cache,
  utilities as csUtils,
  VolumeViewport,
  getEnabledElementByViewportId,
} from '@cornerstonejs/core';
 
import { SegmentationRepresentations } from '../../../enums';
import { getLabelmapActorEntries } from '../../../stateManagement/segmentation/helpers/getSegmentationActor';
import { getSegmentationRepresentations } from '../../../stateManagement/segmentation/getSegmentationRepresentation';
import { getCurrentLabelmapImageIdsForViewport } from '../../../stateManagement/segmentation/getCurrentLabelmapImageIdForViewport';
 
/**
 * Updates the labelmap for stack viewports
 */
export function performStackLabelmapUpdate({
  viewportIds,
  segmentationId,
}: {
  viewportIds: string[];
  segmentationId: string;
}): void {
  viewportIds.forEach((viewportId) => {
    let representations = getSegmentationRepresentations(viewportId, {
      segmentationId,
    });
 
    representations = representations.filter(
      (representation) =>
        representation.type === SegmentationRepresentations.Labelmap
    );
 
    representations.forEach((representation) => {
      Iif (representation.segmentationId !== segmentationId) {
        return;
      }
 
      const enabledElement = getEnabledElementByViewportId(viewportId);
 
      Iif (!enabledElement) {
        return;
      }
 
      const { viewport } = enabledElement;
 
      Iif (viewport instanceof VolumeViewport) {
        return;
      }
 
      const actorEntries = getLabelmapActorEntries(viewportId, segmentationId);
 
      Iif (!actorEntries?.length) {
        return;
      }
 
      actorEntries.forEach((actorEntry, i) => {
        const segImageData = actorEntry.actor.getMapper().getInputData();
 
        const currentSegmentationImageIds =
          getCurrentLabelmapImageIdsForViewport(viewportId, segmentationId);
 
        const segmentationImage = cache.getImage(
          currentSegmentationImageIds[i]
        );
        segImageData.modified();
 
        // update the cache with the new image data
        csUtils.updateVTKImageDataWithCornerstoneImage(
          segImageData,
          segmentationImage
        );
      });
    });
  });
}