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

88.88% Statements 8/9
50% Branches 2/4
100% Functions 2/2
88.88% Lines 8/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 45 46 47      1x                                     2x       2x           2x     2x 2x 2x 2x                
import { utilities } 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 columnPixelSpacing - Spacing in column direction
 * @param renderingEngine - Cornerstone RenderingEngine instance
 */
export default function calibrateImageSpacing(
  imageId: string,
  renderingEngine: Types.IRenderingEngine,
  rowPixelSpacing: number,
  columnPixelSpacing: number
): void {
  // 1. Add the calibratedPixelSpacing metadata to the metadata provider
  // If no column spacing provided, assume square pixels
  Iif (!columnPixelSpacing) {
    columnPixelSpacing = rowPixelSpacing;
  }
 
  calibratedPixelSpacingMetadataProvider.add(imageId, [
    rowPixelSpacing,
    columnPixelSpacing,
  ]);
 
  // 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
}