UNPKG

@antv/util

Version:

> AntV 底层依赖的工具库,不建议在自己业务中使用。

78 lines 2.68 kB
import { midPoint } from './mid-point'; import { segmentCubicFactory } from './segment-cubic-factory'; function splitCubic(pts, t) { if (t === void 0) { t = 0.5; } var p0 = pts.slice(0, 2); var p1 = pts.slice(2, 4); var p2 = pts.slice(4, 6); var p3 = pts.slice(6, 8); var p4 = midPoint(p0, p1, t); var p5 = midPoint(p1, p2, t); var p6 = midPoint(p2, p3, t); var p7 = midPoint(p4, p5, t); var p8 = midPoint(p5, p6, t); var p9 = midPoint(p7, p8, t); return [ // @ts-ignore ['C'].concat(p4, p7, p9), // @ts-ignore ['C'].concat(p8, p6, p3), ]; } function getCurveArray(segments) { return segments.map(function (segment, i, pathArray) { // @ts-ignore var segmentData = i && pathArray[i - 1].slice(-2).concat(segment.slice(1)); // @ts-ignore var curveLength = i ? segmentCubicFactory(segmentData[0], segmentData[1], segmentData[2], segmentData[3], segmentData[4], segmentData[5], segmentData[6], segmentData[7], segmentData[8], { bbox: false }).length : 0; var subsegs; if (i) { // must be [segment,segment] subsegs = curveLength ? splitCubic(segmentData) : [segment, segment]; } else { subsegs = [segment]; } return { s: segment, ss: subsegs, l: curveLength, }; }); } export function equalizeSegments(path1, path2, TL) { var c1 = getCurveArray(path1); var c2 = getCurveArray(path2); var L1 = c1.length; var L2 = c2.length; var l1 = c1.filter(function (x) { return x.l; }).length; var l2 = c2.filter(function (x) { return x.l; }).length; var m1 = c1.filter(function (x) { return x.l; }).reduce(function (a, _a) { var l = _a.l; return a + l; }, 0) / l1 || 0; var m2 = c2.filter(function (x) { return x.l; }).reduce(function (a, _a) { var l = _a.l; return a + l; }, 0) / l2 || 0; var tl = TL || Math.max(L1, L2); var mm = [m1, m2]; var dif = [tl - L1, tl - L2]; var canSplit = 0; var result = [c1, c2].map(function (x, i) { // @ts-ignore return x.l === tl ? x.map(function (y) { return y.s; }) : x .map(function (y, j) { canSplit = j && dif[i] && y.l >= mm[i]; dif[i] -= canSplit ? 1 : 0; return canSplit ? y.ss : [y.s]; }) .flat(); }); return result[0].length === result[1].length ? result : equalizeSegments(result[0], result[1], tl); } //# sourceMappingURL=equalize-segments.js.map