All files / packages/core/src/utilities getVolumeViewportScrollInfo.ts

100% Statements 7/7
0% Branches 0/1
100% Functions 1/1
100% Lines 7/7

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                                  1x   1x     1x     1x 1x 1x   1x                        
import { IVolumeViewport } from '../types';
import getVolumeSliceRangeInfo from './getVolumeSliceRangeInfo';
 
/**
 * Calculates the number os steps the volume can scroll based on its orientation
 * @param viewport - Volume viewport
 * @param volumeId - Id of one of the volumes loaded on the given viewport
 * @param useSlabThickness - If true, the number of steps will be calculated
 * based on the slab thickness instead of the spacing in the normal direction
 * @returns number of steps the volume can scroll and its current position
 */
function getVolumeViewportScrollInfo(
  viewport: IVolumeViewport,
  volumeId: string,
  useSlabThickness = false
) {
  const { sliceRange, spacingInNormalDirection, camera } =
    getVolumeSliceRangeInfo(viewport, volumeId, useSlabThickness);
 
  const { min, max, current } = sliceRange;
 
  // Now we can see how many steps there are in this direction
  const numScrollSteps = Math.round((max - min) / spacingInNormalDirection);
 
  // Find out current frameIndex
  const fraction = (current - min) / (max - min);
  const floatingStepNumber = fraction * numScrollSteps;
  const currentStepIndex = Math.round(floatingStepNumber);
 
  return {
    numScrollSteps,
    currentStepIndex,
    sliceRangeInfo: {
      sliceRange,
      spacingInNormalDirection,
      camera,
    },
  };
}
 
export default getVolumeViewportScrollInfo;