Doodle3D-Core/src/reducer/d2/constrainMatrix.js

16 lines
674 B
JavaScript

import { Vector, Utils as CALUtils } from '@doodle3d/cal';
import { MIN_ZOOM, MAX_ZOOM, CANVAS_SIZE } from '../../constants/d2Constants.js';
export default function constrainMatrix(matrix) {
const scale = matrix.sx;
const scaleClamped = CALUtils.MathExtended.clamb(scale, MIN_ZOOM, MAX_ZOOM);
matrix.scale = scaleClamped;
const pan = new Vector().copy(matrix).scale(scaleClamped / scale);
const maxTranslate = (CANVAS_SIZE / MIN_ZOOM - CANVAS_SIZE / scaleClamped) * scaleClamped;
matrix.x = CALUtils.MathExtended.clamb(pan.x, -maxTranslate, maxTranslate);
matrix.y = CALUtils.MathExtended.clamb(pan.y, -maxTranslate, maxTranslate);
matrix.rotation = 0;
}