UNPKG

@cornerstonejs/core

Version:
36 lines (35 loc) 1.51 kB
import macro from '@kitware/vtk.js/macros.js'; import vtkCamera from '@kitware/vtk.js/Rendering/Core/Camera.js'; import { getProjectionScaleMatrix } from '../helpers/getProjectionScaleMatrix.js'; import { getNormalizedAspectRatio } from '../../utilities/getNormalizedAspectRatio.js'; import { mat4 } from 'gl-matrix'; function extendedVtkCamera(publicAPI, model) { model.classHierarchy.push('extendedVtkCamera'); const superGetProjectionMatrix = publicAPI.getProjectionMatrix; publicAPI.getProjectionMatrix = (aspect, nearZ, farZ) => { const matrix = superGetProjectionMatrix(aspect, nearZ, farZ); const [sx, sy] = getNormalizedAspectRatio(model.aspectRatio); if (sx !== 1.0 || sy !== 1.0) { const scaleMatrix = getProjectionScaleMatrix([sx, sy]); mat4.multiply(matrix, scaleMatrix, matrix); } return matrix; }; publicAPI.getAspectRatio = () => { return model.aspectRatio; }; publicAPI.setAspectRatio = (aspectRatio) => { model.aspectRatio = aspectRatio; }; } const DEFAULT_VALUES = { aspectRatio: [1, 1], }; export function extend(publicAPI, model, initialValues = {}) { Object.assign(model, DEFAULT_VALUES, initialValues); vtkCamera.extend(publicAPI, model, initialValues); macro.setGet(publicAPI, model, ['aspectRatio']); extendedVtkCamera(publicAPI, model); } export const newInstance = macro.newInstance(extend, 'extendedVtkCamera'); export default { newInstance, extend };