@cornerstonejs/core
Version:
Cornerstone3D Core
36 lines (35 loc) • 1.51 kB
JavaScript
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 };