| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- import { ext, vec2, vec3 } from '@antv/matrix-util';
- var identityMatrix = [1, 0, 0, 0, 1, 0, 0, 0, 1];
- export function getMatrixByAngle(point, angle, matrix) {
- if (matrix === void 0) { matrix = identityMatrix; }
- if (!angle) {
- // 角度为 0 或者 null 时返回 null
- return null;
- }
- var m = ext.transform(matrix, [
- ['t', -point.x, -point.y],
- ['r', angle],
- ['t', point.x, point.y],
- ]);
- return m;
- }
- export function getMatrixByTranslate(point, currentMatrix) {
- if (!point.x && !point.y) {
- // 0,0 或者 nan 的情况下返回 null
- return null;
- }
- return ext.transform(currentMatrix || identityMatrix, [['t', point.x, point.y]]);
- }
- // 从矩阵获取旋转的角度
- export function getAngleByMatrix(matrix) {
- var xVector = [1, 0, 0];
- var out = [0, 0, 0];
- vec3.transformMat3(out, xVector, matrix);
- return Math.atan2(out[1], out[0]);
- }
- // 矩阵 * 向量
- function multiplyVec2(matrix, v) {
- var out = [0, 0];
- vec2.transformMat3(out, v, matrix);
- return out;
- }
- export function applyMatrix2BBox(matrix, bbox) {
- var topLeft = multiplyVec2(matrix, [bbox.minX, bbox.minY]);
- var topRight = multiplyVec2(matrix, [bbox.maxX, bbox.minY]);
- var bottomLeft = multiplyVec2(matrix, [bbox.minX, bbox.maxY]);
- var bottomRight = multiplyVec2(matrix, [bbox.maxX, bbox.maxY]);
- var minX = Math.min(topLeft[0], topRight[0], bottomLeft[0], bottomRight[0]);
- var maxX = Math.max(topLeft[0], topRight[0], bottomLeft[0], bottomRight[0]);
- var minY = Math.min(topLeft[1], topRight[1], bottomLeft[1], bottomRight[1]);
- var maxY = Math.max(topLeft[1], topRight[1], bottomLeft[1], bottomRight[1]);
- return {
- x: minX,
- y: minY,
- minX: minX,
- minY: minY,
- maxX: maxX,
- maxY: maxY,
- width: maxX - minX,
- height: maxY - minY,
- };
- }
- export function applyRotate(shape, rotate, x, y) {
- if (rotate) {
- var matrix = getMatrixByAngle({ x: x, y: y }, rotate, shape.getMatrix());
- shape.setMatrix(matrix);
- }
- }
- export function applyTranslate(shape, x, y) {
- var translateMatrix = getMatrixByTranslate({ x: x, y: y });
- shape.attr('matrix', translateMatrix);
- }
- //# sourceMappingURL=matrix.js.map
|