All files / tools/src/utilities/segmentation getOrCreateSegmentationVolume.ts

86.66% Statements 13/15
70% Branches 7/10
100% Functions 1/1
86.66% Lines 13/15

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                              66x   66x     66x 8x   8x 8x         58x   58x           58x       58x   58x         58x         58x        
import {
  cache,
  volumeLoader,
  utilities,
  type Types,
} from '@cornerstonejs/core';
import { getSegmentation } from '../../stateManagement/segmentation/getSegmentation';
import type {
  LabelmapSegmentationDataStack,
  LabelmapSegmentationDataVolume,
} from '../../types/LabelmapTypes';
 
function getOrCreateSegmentationVolume(
  segmentationId
): Types.IImageVolume | undefined {
  const { representationData } = getSegmentation(segmentationId);
  let { volumeId } =
    representationData.Labelmap as LabelmapSegmentationDataVolume;
 
  let segVolume;
  if (volumeId) {
    segVolume = cache.getVolume(volumeId);
 
    Eif (segVolume) {
      return segVolume;
    }
  }
 
  const { imageIds: labelmapImageIds } =
    representationData.Labelmap as LabelmapSegmentationDataStack;
 
  volumeId = cache.generateVolumeId(labelmapImageIds);
 
  // We don't need to call `getStackSegmentationImageIdsForViewport` here
  // because we've already ensured the stack constructs a volume,
  // making the scenario for multi-image non-consistent metadata is not likely.
 
  Iif (!labelmapImageIds || labelmapImageIds.length === 1) {
    return;
  }
 
  const isValidVolume = utilities.isValidVolume(labelmapImageIds);
 
  Iif (!isValidVolume) {
    return;
  }
 
  // it will return the cached volume if it already exists
  segVolume = volumeLoader.createAndCacheVolumeFromImagesSync(
    volumeId,
    labelmapImageIds
  );
 
  return segVolume;
}
 
export default getOrCreateSegmentationVolume;