svg-path-d
Version:
SVG path data (path[d] attribute content) manipulation library.
76 lines • 3.51 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.promoteToCurve = exports.promoteToQCurve = exports.promoteToLine = exports.canPromoteToCurve = exports.canPromoteToQCurve = exports.canPromoteToLine = void 0;
var command_assertion_1 = require("./command-assertion");
var curve_node_1 = require("./curve-node");
var path_node_1 = require("./path-node");
function canPromoteToLine(item) {
return command_assertion_1.isHLineTo(item) || command_assertion_1.isVLineTo(item);
}
exports.canPromoteToLine = canPromoteToLine;
function canPromoteToQCurve(item) {
return canPromoteToLine(item) || command_assertion_1.isLineTo(item) || command_assertion_1.isSmoothQCurveTo(item);
}
exports.canPromoteToQCurve = canPromoteToQCurve;
function canPromoteToCurve(item) {
return canPromoteToQCurve(item) || command_assertion_1.isQCurveTo(item) || command_assertion_1.isSmoothCurveTo(item);
}
exports.canPromoteToCurve = canPromoteToCurve;
function promoteToLine(item) {
return { name: 'L', x: path_node_1.getX(item), y: path_node_1.getY(item), prev: item.prev };
}
exports.promoteToLine = promoteToLine;
function promoteToQCurve(item) {
var prev = item.prev;
if (command_assertion_1.isSmoothQCurveTo(item)) {
var x1 = curve_node_1.getReflectedX1(item);
var y1 = curve_node_1.getReflectedY1(item);
return { name: 'Q', x1: x1, y1: y1, x: item.x, y: item.y, prev: prev };
}
else {
// Treat it as a line.
var x0 = path_node_1.getX(prev);
var y0 = path_node_1.getY(prev);
var x = path_node_1.getX(item);
var y = path_node_1.getY(item);
var x1 = (x0 + x) / 2;
var y1 = (y0 + y) / 2;
return { name: 'Q', x1: x1, y1: y1, x: x, y: y, prev: prev };
}
}
exports.promoteToQCurve = promoteToQCurve;
function promoteToCurve(item) {
var prev = item.prev;
if (command_assertion_1.isSmoothCurveTo(item)) {
var x1 = curve_node_1.getReflectedX1(item);
var y1 = curve_node_1.getReflectedY1(item);
return { name: 'C', x1: x1, y1: y1, x2: item.x2, y2: item.y2, x: item.x, y: item.y, prev: prev };
}
else {
var x0 = path_node_1.getX(prev);
var y0 = path_node_1.getY(prev);
if (command_assertion_1.isQCurveTo(item) || command_assertion_1.isSmoothQCurveTo(item)) {
var control2x = 2 * curve_node_1.getFirstControlX(item);
var control2y = 2 * curve_node_1.getFirstControlY(item);
// 1/3rd start + 2/3rd control
var x1 = (x0 + control2x) / 3;
var y1 = (y0 + control2y) / 3;
// 1/3rd stop + 2/3rd control
var x2 = (item.x + control2x) / 3;
var y2 = (item.y + control2y) / 3;
return { name: 'C', x1: x1, y1: y1, x2: x2, y2: y2, x: item.x, y: item.y, prev: prev };
}
else {
// Treat it as a line.
var x = path_node_1.getX(item);
var y = path_node_1.getY(item);
var x1 = x0 + (x - x0) / 4; // (x + 2 * x0) / 3
var y1 = y0 + (y - y0) / 4; // (y + 2 * y0) / 3
var x2 = x0 + (3 * (x - x0)) / 4; // (x0 + 2 * x) / 3
var y2 = y0 + (3 * (y - y0)) / 4; // (y0 + 2 * y) / 3
return { name: 'C', x1: x1, y1: y1, x2: x2, y2: y2, x: x, y: y, prev: prev };
}
}
}
exports.promoteToCurve = promoteToCurve;
//# sourceMappingURL=promoter.js.map