All files / packages/tools/src/utilities calibrateImageSpacing.ts

100% Statements 9/9
75% Branches 3/4
100% Functions 2/2
100% Lines 9/9

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      1x                               2x 1x           2x     2x     2x 2x 2x 2x                
import { utilities, Enums } from '@cornerstonejs/core';
import type { Types } from '@cornerstonejs/core';
 
const { calibratedPixelSpacingMetadataProvider } = utilities;
 
/**
 * It adds the provided spacing to the Cornerstone internal calibratedPixelSpacing
 * metadata provider, then it invalidates all the tools that have the imageId as
 * their reference imageIds. Finally, it triggers a re-render for invalidated annotations.
 * @param imageId - ImageId for the calibrated image
 * @param rowPixelSpacing - Spacing in row direction
 * @param calibrationOrScale - either the calibration object or a scale value
 */
export default function calibrateImageSpacing(
  imageId: string,
  renderingEngine: Types.IRenderingEngine,
  calibrationOrScale: Types.IImageCalibration | number
): void {
  // Handle simple parameter version
  if (typeof calibrationOrScale === 'number') {
    calibrationOrScale = {
      type: Enums.CalibrationTypes.USER,
      scale: calibrationOrScale,
    };
  }
  // 1. Add the calibratedPixelSpacing metadata to the metadata
  calibratedPixelSpacingMetadataProvider.add(imageId, calibrationOrScale);
 
  // 2. Update the actor for stackViewports
  const viewports = renderingEngine.getStackViewports();
 
  // 2.1 If imageId is already being used in a stackViewport -> update actor
  viewports.forEach((viewport) => {
    const imageIds = viewport.getImageIds();
    Eif (imageIds.includes(imageId)) {
      viewport.calibrateSpacing(imageId);
    }
  });
 
  // 2.2 If imageId is cached but not being displayed in a viewport, stackViewport
  // will handle using the calibratedPixelSpacing since it has been added
  // to the provider
}