UNPKG

@gorpacrate/core-graphics

Version:

A core library for creating shape-based graphic editors

106 lines 3.88 kB
"use strict"; exports.__esModule = true; var tslib_1 = require("tslib"); var matrix_utilities_1 = require("matrix-utilities"); exports.multiply = matrix_utilities_1.multiply; exports.flip = matrix_utilities_1.flip; var matrix_utilities_2 = require("matrix-utilities"); var math_1 = require("./math"); exports.getCol3FromPoint = function (x, y) { return ([ [x], [y], [1] ]); }; exports.getTranslateMatrix = function (dx, dy) { return ([ [1, 0, dx], [0, 1, dy], [0, 0, 1] ]); }; exports.getScaleMatrix = function (kx, ky) { return ([ [kx, 0, 0], [0, ky, 0], [0, 0, 1] ]); }; // mirrors the handle, for now function getResizeOrigin(params) { var handle = params.handle, bb = params.bb; var x1 = bb.x1, y1 = bb.y1, x2 = bb.x2, y2 = bb.y2, width = bb.width, height = bb.height; var relX = handle.relX, relY = handle.relY; var centerX = (x1 + x2) / 2; var centerY = (y1 + y2) / 2; var x = centerX - relX * width / 2; var y = centerY - relY * height / 2; return { x: x, y: y }; } exports.getResizeOrigin = getResizeOrigin; var padResizeCoeff = function (a, b) { if (Math.abs(b) === 0) { return 1; } // if (Math.abs(b) < SHAPE_BB_PADDING) return (1 + SHAPE_BB_PADDING); // if ((a / b) < 1 / SHAPE_BB_PADDING) return (1 / SHAPE_BB_PADDING); //TODO FIX return (a / b); }; function getResizeCoeffs(params) { var pOrigin = params.pOrigin, pEnd = params.pEnd, pStart = params.pStart, proportional = params.proportional, minWidth = params.minWidth, minHeight = params.minHeight; var doh = { x: pStart.x - pOrigin.x, y: pStart.y - pOrigin.y }; var dod = { x: pEnd.x - pOrigin.x, y: pEnd.y - pOrigin.y }; var paddedDod = { x: math_1.padNumAbs({ minAbs: minWidth, x: dod.x }), y: math_1.padNumAbs({ minAbs: minHeight, x: dod.y }) }; var kx = padResizeCoeff(paddedDod.x, doh.x); var ky = padResizeCoeff(paddedDod.y, doh.y); if (proportional) { if (math_1.approxEqual(pOrigin.x, pStart.x)) { return { kx: ky, ky: ky }; } if (math_1.approxEqual(pOrigin.y, pStart.y)) { return { kx: kx, ky: kx }; } var k = Math.max(Math.abs(kx), Math.abs(ky)); var signKx = math_1.sign(kx); var signKy = math_1.sign(ky); return { kx: k * signKx, ky: k * signKy }; } return { kx: kx, ky: ky }; } exports.getResizeCoeffs = getResizeCoeffs; function transformShapeKeyPoints(transformMatrix, data) { var keyPoints = data.keyPoints; var transformedKeyPoints = keyPoints.map(function (point) { var x = point.x, y = point.y; var res = matrix_utilities_2.multiply(transformMatrix, exports.getCol3FromPoint(x, y)); var px = res[0][0]; var py = res[1][0]; if (point.payload) { return { x: px, y: py, payload: point.payload }; } return { x: px, y: py }; }); return tslib_1.__assign({}, data, { keyPoints: transformedKeyPoints }); } exports.transformShapeKeyPoints = transformShapeKeyPoints; function moveShapeKeyPoints(delta, data) { var dx = delta.dx, dy = delta.dy; var transformMatrix = exports.getTranslateMatrix(dx, dy); return transformShapeKeyPoints(transformMatrix, data); } exports.moveShapeKeyPoints = moveShapeKeyPoints; function scaleShapeKeyPoints(origin, scale, data) { var oX = origin.oX, oY = origin.oY; var kx = scale.kx, ky = scale.ky; var T1 = exports.getTranslateMatrix(-oX, -oY); var S = exports.getScaleMatrix(kx, ky); var T2 = exports.getTranslateMatrix(oX, oY); var transformMatrix = matrix_utilities_2.multiply(T2, matrix_utilities_2.multiply(S, T1)); return transformShapeKeyPoints(transformMatrix, data); } exports.scaleShapeKeyPoints = scaleShapeKeyPoints; //# sourceMappingURL=transform.js.map