Files
NapCatQQ/.pnpm-store/v3/files/57/6ddabb5ec41c2f8d4871fb745953fee66d85fcf1205df6d06717cdfd9772472706b21e4cf4727bacf8c15a5d2afd822a230078ac534d9c5050f2654331a2ec
T
TanTan e311ca3275
Build NapCat Artifacts / Type Check & Test (push) Waiting to run
docs: 仓库链接指向本镜像仓库
2026-11-13 09:25:58 +08:00

76 lines
2.1 KiB
Plaintext

"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = contour2svg;
/**
* @file 将ttf路径转换为svg路径`d`
* @author mengke01(kekee000@gmail.com)
*/
/**
* 将路径转换为svg路径
*
* @param {Array} contour 轮廓序列
* @param {number} precision 精确度
* @return {string} 路径
*/
function contour2svg(contour) {
var precision = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 2;
if (!contour.length) {
return '';
}
var ceil = function ceil(number) {
return +number.toFixed(precision);
};
var pathArr = [];
var curPoint;
var prevPoint;
var nextPoint;
var x; // x相对坐标
var y; // y相对坐标
for (var i = 0, l = contour.length; i < l; i++) {
curPoint = contour[i];
prevPoint = i === 0 ? contour[l - 1] : contour[i - 1];
nextPoint = i === l - 1 ? contour[0] : contour[i + 1];
// 起始坐标
if (i === 0) {
if (curPoint.onCurve) {
x = curPoint.x;
y = curPoint.y;
pathArr.push('M' + ceil(x) + ' ' + ceil(y));
} else if (prevPoint.onCurve) {
x = prevPoint.x;
y = prevPoint.y;
pathArr.push('M' + ceil(x) + ' ' + ceil(y));
} else {
x = (prevPoint.x + curPoint.x) / 2;
y = (prevPoint.y + curPoint.y) / 2;
pathArr.push('M' + ceil(x) + ' ' + ceil(y));
}
}
// 直线
if (curPoint.onCurve && nextPoint.onCurve) {
pathArr.push('l' + ceil(nextPoint.x - x) + ' ' + ceil(nextPoint.y - y));
x = nextPoint.x;
y = nextPoint.y;
} else if (!curPoint.onCurve) {
if (nextPoint.onCurve) {
pathArr.push('q' + ceil(curPoint.x - x) + ' ' + ceil(curPoint.y - y) + ' ' + ceil(nextPoint.x - x) + ' ' + ceil(nextPoint.y - y));
x = nextPoint.x;
y = nextPoint.y;
} else {
var x1 = (curPoint.x + nextPoint.x) / 2;
var y1 = (curPoint.y + nextPoint.y) / 2;
pathArr.push('q' + ceil(curPoint.x - x) + ' ' + ceil(curPoint.y - y) + ' ' + ceil(x1 - x) + ' ' + ceil(y1 - y));
x = x1;
y = y1;
}
}
}
pathArr.push('Z');
return pathArr.join(' ');
}