@gorpacrate/core-graphics
Version:
A core library for creating shape-based graphic editors
106 lines • 3.88 kB
JavaScript
;
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