All files / tools/src/stateManagement/segmentation/helpers getViewportLabelmapRenderMode.ts

21.87% Statements 7/32
13.15% Branches 5/38
100% Functions 1/1
21.87% Lines 7/32

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 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107                                        7526x           7526x   7526x       7526x 1858x     5668x 5668x                                                                                                                                          
import {
  ActorRenderMode,
  BaseVolumeViewport,
  StackViewport,
  Enums,
  type Types,
} from '@cornerstonejs/core';
import {
  canRenderVolumeViewportLabelmapAsImage,
  isSliceRenderingEnabled,
} from './labelmapImageMapperSupport';
 
export type ViewportLabelmapRenderMode = 'image' | 'volume' | 'unsupported';
 
export default function getViewportLabelmapRenderMode(
  viewport: Types.IViewport,
  options?: {
    useSliceRendering?: boolean;
  }
): ViewportLabelmapRenderMode {
  const compatibilityViewport = viewport as Types.IViewport & {
    getCurrentImageId?: () => string;
    getDefaultActor?: () => Types.ActorEntry | undefined;
    getVolumeId?: () => string | undefined;
    type?: string;
  };
  const useSliceRendering = isSliceRenderingEnabled(options);
 
  Iif (useSliceRendering && canRenderVolumeViewportLabelmapAsImage(viewport)) {
    return 'image';
  }
 
  if (viewport instanceof BaseVolumeViewport) {
    return 'volume';
  }
 
  Eif (viewport instanceof StackViewport) {
    return 'image';
  }
 
  const defaultActor =
    typeof compatibilityViewport.getDefaultActor === 'function'
      ? compatibilityViewport.getDefaultActor()
      : undefined;
  const actorMapper = defaultActor?.actorMapper as
    | {
        renderMode?: Types.ActorRenderMode;
      }
    | undefined;
  const renderMode = actorMapper?.renderMode;
 
  if (
    renderMode === ActorRenderMode.VTK_VOLUME ||
    renderMode === ActorRenderMode.VTK_VOLUME_SLICE
  ) {
    return 'volume';
  }
 
  if (renderMode === ActorRenderMode.CPU_VOLUME) {
    return 'volume';
  }
 
  if (
    renderMode === ActorRenderMode.VTK_IMAGE ||
    renderMode === ActorRenderMode.CPU_IMAGE
  ) {
    return 'image';
  }
 
  const actorClassName =
    typeof defaultActor?.actor?.getClassName === 'function'
      ? defaultActor.actor.getClassName()
      : undefined;
 
  if (actorClassName === 'vtkVolume') {
    return 'volume';
  }
 
  if (actorClassName === 'vtkImageSlice') {
    return 'image';
  }
 
  if (actorClassName === 'CanvasActor') {
    const defaultActorRenderMode = actorMapper?.renderMode;
 
    if (defaultActorRenderMode === ActorRenderMode.CPU_VOLUME) {
      return 'volume';
    }
 
    return 'image';
  }
 
  if (compatibilityViewport.type === Enums.ViewportType.PLANAR_NEXT) {
    if (compatibilityViewport.getVolumeId?.()) {
      return 'volume';
    }
 
    return typeof compatibilityViewport.getCurrentImageId === 'function'
      ? 'image'
      : 'unsupported';
  }
 
  return typeof compatibilityViewport.getCurrentImageId === 'function'
    ? 'image'
    : 'unsupported';
}