Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
export function getAbsoluteMatrix(matrix: number[], n: number, origin: number[]) {
return multiplies(
n,
createOriginMatrix(origin, n),
matrix,
createOriginMatrix(origin.map(a => -a), n),
);
}
export function measureSVGSize(el: SVGElement, unit: string, isHorizontal: boolean) {
export function getSVGOffset(
el: SVGElement,
container: HTMLElement | SVGElement,
n: number, origin: number[], beforeMatrix: number[], absoluteMatrix: number[]) {
const [width, height] = getSize(el);
const containerRect = container.getBoundingClientRect();
const rect = el.getBoundingClientRect();
const rectLeft = rect.left - containerRect.left + container.scrollLeft;
const rectTop = rect.top - containerRect.top + container.scrollTop;
const rectWidth = rect.width;
const rectHeight = rect.height;
const mat = multiplies(
n,
beforeMatrix,
absoluteMatrix,
);
const {
left: prevLeft,
top: prevTop,
width: prevWidth,
height: prevHeight,
} = caculateRect(mat, width, height, n);
const posOrigin = caculatePosition(mat, origin, n);
const prevOrigin = minus(posOrigin, [prevLeft, prevTop]);
const rectOrigin = [
rectLeft + prevOrigin[0] * rectWidth / prevWidth,
rectTop + prevOrigin[1] * rectHeight / prevHeight,
];
const posOrigin = caculatePosition(mat, origin, n);
const prevOrigin = minus(posOrigin, [prevLeft, prevTop]);
const rectOrigin = [
rectLeft + prevOrigin[0] * rectWidth / prevWidth,
rectTop + prevOrigin[1] * rectHeight / prevHeight,
];
const offset = [0, 0];
let count = 0;
while (++count < 10) {
const inverseBeforeMatrix = invert(beforeMatrix, n);
[offset[0], offset[1]] = minus(
caculatePosition(inverseBeforeMatrix, rectOrigin, n),
caculatePosition(inverseBeforeMatrix, posOrigin, n),
);
const mat2 = multiplies(
n,
beforeMatrix,
createOriginMatrix(offset, n),
absoluteMatrix,
);
const {
left: nextLeft,
top: nextTop,
} = caculateRect(mat2, width, height, n);
const distLeft = nextLeft - rectLeft;
const distTop = nextTop - rectTop;
if (Math.abs(distLeft) < 2 && Math.abs(distTop) < 2) {
break;
}
rectOrigin[0] -= distLeft;