All files / core/src/RenderingEngine/GenericViewport/Volume3D applyVolume3DCamera.ts

0% Statements 0/21
0% Branches 0/21
0% Functions 0/1
0% Lines 0/21

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                                                                                                             
import type {
  Volume3DCamera,
  Volume3DViewportRenderContext,
} from './viewport3DTypes';
 
export default function applyVolume3DCamera(
  ctx: Pick<Volume3DViewportRenderContext, 'vtk'>,
  camera?: Partial<Volume3DCamera>,
  options: { resetClippingRange?: boolean } = {}
): void {
  if (!camera) {
    return;
  }
 
  const vtkCamera = ctx.vtk.renderer.getActiveCamera();
 
  if (camera.parallelProjection !== undefined) {
    vtkCamera.setParallelProjection(camera.parallelProjection);
  }
 
  if (camera.viewUp) {
    vtkCamera.setViewUp(...camera.viewUp);
  }
 
  if (camera.viewPlaneNormal) {
    vtkCamera.setDirectionOfProjection(
      -camera.viewPlaneNormal[0],
      -camera.viewPlaneNormal[1],
      -camera.viewPlaneNormal[2]
    );
  }
 
  if (camera.position) {
    vtkCamera.setPosition(...camera.position);
  }
 
  if (camera.focalPoint) {
    vtkCamera.setFocalPoint(...camera.focalPoint);
  }
 
  if (camera.parallelScale !== undefined) {
    vtkCamera.setParallelScale(camera.parallelScale);
  }
 
  if (camera.viewAngle !== undefined) {
    vtkCamera.setViewAngle(camera.viewAngle);
  }
 
  if (camera.clippingRange !== undefined) {
    vtkCamera.setClippingRange(...camera.clippingRange);
  } else if (options.resetClippingRange) {
    ctx.vtk.renderer.resetCameraClippingRange();
  }
}