UNPKG

@cornerstonejs/core

Version:
95 lines (94 loc) 3.32 kB
import { ECG_PROJECTION_ID, } from './ECGProjectionTypes.js'; import { normalizeECGViewState } from './ecgViewportCamera.js'; function clonePoint2(point) { return [point[0], point[1]]; } function getCenterCanvasPoint(canvasWidth, canvasHeight) { return [canvasWidth / 2, canvasHeight / 2]; } function getSignalScale(resolvedView) { const origin = resolvedView.canvasToWorld([0, 0]); const nextSample = resolvedView.canvasToWorld([1, 0]); const nextValue = resolvedView.canvasToWorld([0, 1]); return { kind: 'signal', samplesPerCanvasPixel: Math.abs(nextSample[0] - origin[0]) || 0, valueUnitsPerCanvasPixel: Math.abs(nextValue[1] - origin[1]) || 0, }; } function getScale(resolvedView, zoom) { if (!resolvedView) { return { kind: 'fit', value: zoom }; } return getSignalScale(resolvedView); } function getSignalPosition(worldPoint, canvasPoint) { if (!worldPoint) { return; } return { kind: 'signalPoint', sampleIndex: worldPoint[0], value: worldPoint[1], channelIndex: worldPoint[2], canvasPoint, }; } export function getECGProjectionSnapshot(request) { const { viewport } = request; const currentViewState = request.viewState ?? viewport.getViewState?.(); if (!currentViewState) { return; } const viewState = normalizeECGViewState(currentViewState); const resolvedView = request.resolvedView ?? viewport.getResolvedView?.(); const canvasWidth = request.canvasWidth ?? resolvedView?.state?.canvas?.clientWidth ?? viewport.canvas?.clientWidth ?? viewport.element?.clientWidth ?? 1; const canvasHeight = request.canvasHeight ?? resolvedView?.state?.canvas?.clientHeight ?? viewport.canvas?.clientHeight ?? viewport.element?.clientHeight ?? 1; const canvasPoint = getCenterCanvasPoint(canvasWidth, canvasHeight); const signalPoint = resolvedView?.canvasToWorld(canvasPoint); const zoom = resolvedView?.zoom ?? Math.max(viewState.scale ?? 1, 0.001); const rawPan = resolvedView?.pan ?? [0, 0]; const rendererCamera = resolvedView?.toICamera(); const frameOfReferenceUID = request.frameOfReferenceUID ?? resolvedView?.getFrameOfReferenceUID() ?? viewport.getFrameOfReferenceUID?.(); return { kind: ECG_PROJECTION_ID, adapterId: ECG_PROJECTION_ID, canvasHeight, canvasWidth, dataId: request.dataId, frameOfReferenceUID, presentation: { pan: clonePoint2(rawPan), position: getSignalPosition(signalPoint, canvasPoint), rawPan: clonePoint2(rawPan), scale: getScale(resolvedView, zoom), zoom, }, rendererCamera, resolvedView, spaces: { canvas: true, image: false, renderer: Boolean(rendererCamera), world: Boolean(resolvedView), }, transforms: resolvedView ? { canvasToWorld: (point) => resolvedView.canvasToWorld(point), worldToCanvas: (point) => resolvedView.worldToCanvas(point), } : undefined, viewState, viewportType: viewport.type, }; }