UNPKG

@cornerstonejs/core

Version:
53 lines (52 loc) 1.82 kB
import { normalizeECGViewState } from './ecgViewportCamera.js'; const DEFAULT_SELECTOR = { zoom: true, pan: true, }; function hasOwn(obj, key) { return Object.prototype.hasOwnProperty.call(obj, key); } export function getECGProjectionPresentation(snapshot, selector) { const target = {}; const ecgSelector = selector ?? DEFAULT_SELECTOR; const zoom = snapshot.presentation.zoom ?? 1; if (ecgSelector.zoom) { target.zoom = zoom; } if (ecgSelector.pan) { const pan = snapshot.presentation.rawPan; target.pan = [pan[0] / zoom, pan[1] / zoom]; } return target; } export function withECGProjectionPresentation(snapshot, presentation, options = {}) { const viewState = snapshot.viewState; const hasZoom = hasOwn(presentation, 'zoom'); const hasPan = hasOwn(presentation, 'pan'); const nextZoom = Math.max(presentation.zoom ?? snapshot.presentation.zoom ?? viewState.scale ?? 1, 0.001); let resolvedView = snapshot.resolvedView; let nextViewState = normalizeECGViewState(viewState); if (hasZoom) { if (resolvedView) { resolvedView = resolvedView.withZoom(nextZoom, options.anchorCanvas); nextViewState = normalizeECGViewState(resolvedView.state.viewState); } else { nextViewState = normalizeECGViewState({ ...nextViewState, scale: nextZoom, scaleMode: 'fit', }); } } if (hasPan && presentation.pan) { const targetPan = [ presentation.pan[0] * nextZoom, presentation.pan[1] * nextZoom, ]; if (resolvedView) { nextViewState = normalizeECGViewState(resolvedView.withPan(targetPan).state.viewState); } } return nextViewState; }