@logicflow/core
Version:
LogicFlow, help you quickly create flowcharts
75 lines (74 loc) • 2.86 kB
JavaScript
var __read = (this && this.__read) || function (o, n) {
var m = typeof Symbol === "function" && o[Symbol.iterator];
if (!m) return o;
var i = m.call(o), r, ar = [], e;
try {
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
}
catch (error) { e = { error: error }; }
finally {
try {
if (r && !r.done && (m = i["return"])) m.call(i);
}
finally { if (e) throw e.error; }
}
return ar;
};
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
if (ar || !(i in from)) {
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
ar[i] = from[i];
}
}
return to.concat(ar || Array.prototype.slice.call(from));
};
export function snapToGrid(point, gridSize, snapGrid) {
// 开启节网格对齐时才根据网格尺寸校准坐标
if (!snapGrid)
return point;
// 保证 x, y 的值为 gridSize 的整数倍
return gridSize * Math.round(point / gridSize) || point;
}
// 获取节点偏移时,产生的偏移量。当节点基于gridSize进行了偏移后,
// 节点上的文本可以基于此方法移动对应的距离来保持与节点相对位置不变。
export function getGridOffset(distance, gridSize) {
return distance % gridSize;
}
/**
* 多边形设置 points 后,坐标平移至原点 并 根据 width、height 缩放
* @param points
* @param width
* @param height
*/
export function normalizePolygon(points, width, height) {
if (!points)
return [];
// 计算边界框
var minX = Math.min.apply(Math, __spreadArray([], __read(points.map(function (p) { return p[0]; })), false));
var maxX = Math.max.apply(Math, __spreadArray([], __read(points.map(function (p) { return p[0]; })), false));
var minY = Math.min.apply(Math, __spreadArray([], __read(points.map(function (p) { return p[1]; })), false));
var maxY = Math.max.apply(Math, __spreadArray([], __read(points.map(function (p) { return p[1]; })), false));
// 平移至原点
var dx = -minX;
var dy = -minY;
var translatedPoints = points.map(function (_a) {
var _b = __read(_a, 2), x = _b[0], y = _b[1];
return [
x + dx,
y + dy,
];
});
// 计算边界框的宽度和高度
var bboxWidth = maxX - minX;
var bboxHeight = maxY - minY;
// 计算缩放因子
var scaleX = width ? width / bboxWidth : 1;
var scaleY = height ? height / bboxHeight : 1;
var scaleFactor = Math.min(scaleX, scaleY);
// 缩放顶点
return translatedPoints.map(function (_a) {
var _b = __read(_a, 2), x = _b[0], y = _b[1];
return [x * scaleFactor, y * scaleFactor];
});
}