All files / core/src/RenderingEngine/GenericViewport/Planar planarProjectionAdapter.ts

12.5% Statements 1/8
0% Branches 0/6
0% Functions 0/5
12.5% Lines 1/8

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                                                                                                                                128x                                                  
import type vtkRenderer from '@kitware/vtk.js/Rendering/Core/Renderer';
import { ViewportType } from '../../../enums';
import type { ViewPresentationSelector } from '../../../types/IViewport';
import type {
  ProjectionWriteOptions,
  ViewportProjectionAdapter,
} from '../ViewportProjectionTypes';
import type {
  PlanarResolvedICamera,
  PlanarViewState,
} from './PlanarViewportTypes';
import { applyPlanarICameraToRenderer } from './planarRenderCamera';
import {
  getPlanarProjectionPresentation,
  withPlanarProjectionPresentation,
} from './planarProjectionPresentation';
import {
  getPlanarProjectionPan,
  getPlanarProjectionScale,
  getPlanarProjectionSnapshot,
  getPlanarProjectionZoom,
} from './planarProjectionSnapshot';
import {
  PLANAR_PROJECTION_ID,
  type PlanarProjectionRequest,
  type PlanarProjectionSnapshot,
  type PlanarProjectionAdapterPresentation,
} from './PlanarProjectionTypes';
 
export {
  getPlanarProjectionPan,
  getPlanarProjectionScale,
  getPlanarProjectionSnapshot,
  getPlanarProjectionZoom,
};
export type {
  PlanarProjectionPresentation,
  PlanarProjectionRequest,
  PlanarProjectionSnapshot,
} from './PlanarProjectionTypes';
 
/**
 * Identifies VTK renderers as valid Planar renderer-application targets.
 */
function isVtkRenderer(target: unknown): target is vtkRenderer {
  return Boolean(
    target &&
      typeof target === 'object' &&
      'getActiveCamera' in target &&
      typeof (target as vtkRenderer).getActiveCamera === 'function'
  );
}
 
/**
 * Planar projection adapter.
 *
 * Snapshot construction, presentation compatibility, and reverse projection
 * are intentionally delegated to focused modules so this file remains the
 * adapter seam rather than the full implementation.
 */
export const planarProjectionAdapter: ViewportProjectionAdapter<
  PlanarViewState,
  PlanarProjectionAdapterPresentation,
  PlanarProjectionSnapshot
> = {
  id: PLANAR_PROJECTION_ID,
  viewportTypes: [ViewportType.PLANAR_NEXT],
  getSnapshot: (request) =>
    getPlanarProjectionSnapshot(request as PlanarProjectionRequest),
  getPresentation: (snapshot, selector?: ViewPresentationSelector) =>
    getPlanarProjectionPresentation(snapshot, selector),
  withPresentation: (
    snapshot,
    presentation: Partial<PlanarProjectionAdapterPresentation>,
    _options?: ProjectionWriteOptions
  ) => withPlanarProjectionPresentation(snapshot, presentation),
  applyToRenderer: (snapshot, target) => {
    if (!isVtkRenderer(target)) {
      return;
    }
 
    applyPlanarICameraToRenderer({
      activeSourceICamera: snapshot.rendererCamera as
        | PlanarResolvedICamera
        | undefined,
      renderer: target,
    });
  },
};