All files / core/src/utilities convertVolumeToStackViewport.ts

0% Statements 0/16
0% Branches 0/4
0% Functions 0/1
0% Lines 0/16

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                                                                                                                                             
import type * as Types from '../types';
import cache from '../cache/cache';
import { ImageVolume } from '../cache/classes/ImageVolume';
import { ViewportType } from '../enums';
 
/**
 * Converts a volume viewport to a stack viewport.
 *
 * @param params - The parameters for the conversion.
 * @param params.viewport - The volume viewport to convert.
 * @param params.options - The conversion options.
 * @param [params.options.viewportId] - The new stackViewportId, If not provided, the volume viewport id will be used.
 * @param [params.options.background] - The background color of the stack viewport.
 * @param [params.options.decache] - Whether to decache the volume. Defaults to false.
 *
 * @returns The converted stack viewport.
 */
async function convertVolumeToStackViewport({
  viewport,
  options,
}: {
  viewport: Types.IVolumeViewport;
  options: {
    viewportId?: string;
    background?: Types.Point3;
  };
}): Promise<Types.IStackViewport> {
  const volumeViewport = viewport;
  const { id, element } = volumeViewport;
  const renderingEngine = viewport.getRenderingEngine();
 
  const { background } = options;
  const viewportId = options.viewportId || id;
 
  const volume = cache.getVolume(volumeViewport.getVolumeId());
 
  if (!(volume instanceof ImageVolume)) {
    throw new Error(
      'Currently, you cannot decache a volume that is not an ImageVolume. So, unfortunately, volumes such as nifti  (which are basic Volume, without imageIds) cannot be decached.'
    );
  }
 
  const viewportInput = {
    viewportId,
    type: ViewportType.STACK,
    element,
    defaultOptions: {
      background,
    },
  };
 
  const prevView = volumeViewport.getViewReference();
 
  renderingEngine.enableElement(viewportInput);
 
  // Get the stack viewport that was created
  const stackViewport = renderingEngine.getViewport(
    viewportId
  ) as Types.IStackViewport;
 
  await stackViewport.setStack(volume.imageIds);
 
  stackViewport.setViewReference(prevView);
 
  stackViewport.render();
 
  return stackViewport;
}
 
export { convertVolumeToStackViewport };