@cornerstonejs/core
Version:
Cornerstone3D Core
53 lines (52 loc) • 2.08 kB
JavaScript
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,
};
}