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

74 lines
2.0 KiB
Plaintext

"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = otfContours2ttfContours;
var _bezierCubic2Q = _interopRequireDefault(require("../../math/bezierCubic2Q2"));
var _pathCeil = _interopRequireDefault(require("../../graphics/pathCeil"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
/**
* @file otf轮廓转ttf轮廓
* @author mengke01(kekee000@gmail.com)
*/
/**
* 转换轮廓
*
* @param {Array} otfContour otf轮廓
* @return {Array} ttf轮廓
*/
function transformContour(otfContour) {
var contour = [];
var prevPoint;
var curPoint;
var nextPoint;
var nextNextPoint;
contour.push(prevPoint = otfContour[0]);
for (var i = 1, l = otfContour.length; i < l; i++) {
curPoint = otfContour[i];
if (curPoint.onCurve) {
contour.push(curPoint);
prevPoint = curPoint;
}
// 三次bezier曲线
else {
nextPoint = otfContour[i + 1];
nextNextPoint = i === l - 2 ? otfContour[0] : otfContour[i + 2];
var bezierArray = (0, _bezierCubic2Q.default)(prevPoint, curPoint, nextPoint, nextNextPoint);
bezierArray[0][2].onCurve = true;
contour.push(bezierArray[0][1]);
contour.push(bezierArray[0][2]);
// 第二个曲线
if (bezierArray[1]) {
bezierArray[1][2].onCurve = true;
contour.push(bezierArray[1][1]);
contour.push(bezierArray[1][2]);
}
prevPoint = nextNextPoint;
i += 2;
}
}
return (0, _pathCeil.default)(contour);
}
/**
* otf轮廓转ttf轮廓
*
* @param {Array} otfContours otf轮廓数组
* @return {Array} ttf轮廓
*/
function otfContours2ttfContours(otfContours) {
if (!otfContours || !otfContours.length) {
return otfContours;
}
var contours = [];
for (var i = 0, l = otfContours.length; i < l; i++) {
// 这里可能由于转换错误导致空轮廓,需要去除
if (otfContours[i][0]) {
contours.push(transformContour(otfContours[i]));
}
}
return contours;
}