UNPKG

@cornerstonejs/core

Version:
53 lines (52 loc) 2.08 kB
import { cloneVolume3DCamera, getVolume3DProjectionPosition, getVolume3DProjectionScale, } from './volume3DProjectionCamera.js'; import { VOLUME3D_PROJECTION_ID, } from './Volume3DProjectionTypes.js'; export function getVolume3DProjectionSnapshot(request) { const { viewport } = request; const resolvedView = request.resolvedView ?? viewport.getResolvedView?.(); const viewState = request.camera ?? viewport.getViewState?.(); const rendererCamera = resolvedView?.toICamera() ?? viewState; if (!rendererCamera) { return; } const camera = cloneVolume3DCamera(rendererCamera); const canvasWidth = request.canvasWidth ?? viewport.canvas?.clientWidth ?? viewport.element?.clientWidth ?? 1; const canvasHeight = request.canvasHeight ?? viewport.canvas?.clientHeight ?? viewport.element?.clientHeight ?? 1; const frameOfReferenceUID = request.frameOfReferenceUID ?? resolvedView?.getFrameOfReferenceUID() ?? viewport.getFrameOfReferenceUID?.(); return { kind: VOLUME3D_PROJECTION_ID, adapterId: VOLUME3D_PROJECTION_ID, canvasHeight, canvasWidth, dataId: request.dataId, frameOfReferenceUID, presentation: { camera: cloneVolume3DCamera(camera), position: getVolume3DProjectionPosition(camera), rotation: camera.rotation, scale: getVolume3DProjectionScale({ camera, canvasHeight }), }, rendererCamera: cloneVolume3DCamera(camera), resolvedView, spaces: { canvas: Boolean(resolvedView), renderer: true, world: Boolean(resolvedView || camera.focalPoint), }, transforms: resolvedView ? { canvasToWorld: (point) => resolvedView.canvasToWorld(point), worldToCanvas: (point) => resolvedView.worldToCanvas(point), } : undefined, viewState: cloneVolume3DCamera(camera), viewportType: viewport.type, }; }