Files
il/resources/public/js/cljs-runtime/module$node_modules$pixi_DOT_js$lib$scene$graphics$shared$buildCommands$buildArcToSvg.js
2026-07-01 22:38:29 -06:00

75 lines
3.9 KiB
JavaScript

shadow$provide.module$node_modules$pixi_DOT_js$lib$scene$graphics$shared$buildCommands$buildArcToSvg = function(global, require, module, exports) {
var buildAdaptiveBezier = require("module$node_modules$pixi_DOT_js$lib$scene$graphics$shared$buildCommands$buildAdaptiveBezier");
"use strict";
const TAU = 2 * Math.PI, out = {centerX:0, centerY:0, ang1:0, ang2:0}, mapToEllipse = ({x, y}, rx, ry, cosPhi, sinPhi, centerX, centerY, out2) => {
x *= rx;
y *= ry;
out2.x = cosPhi * x - sinPhi * y + centerX;
out2.y = sinPhi * x + cosPhi * y + centerY;
return out2;
}, vectorAngle = (ux, uy, vx, vy) => {
let dot = ux * vx + uy * vy;
1 < dot && (dot = 1);
-1 > dot && (dot = -1);
return (0 > ux * vy - uy * vx ? -1 : 1) * Math.acos(dot);
};
exports.buildArcToSvg = function(points, px, py, cx, cy, rx$jscomp$0, ry, xAxisRotation = 0, largeArcFlag = 0, sweepFlag = 0) {
if (0 !== rx$jscomp$0 && 0 !== ry) {
var sinPhi = Math.sin(xAxisRotation * TAU / 360);
xAxisRotation = Math.cos(xAxisRotation * TAU / 360);
var pxp = xAxisRotation * (px - cx) / 2 + sinPhi * (py - cy) / 2, pyp = -sinPhi * (px - cx) / 2 + xAxisRotation * (py - cy) / 2;
if (0 !== pxp || 0 !== pyp) {
rx$jscomp$0 = Math.abs(rx$jscomp$0);
ry = Math.abs(ry);
var lambda = Math.pow(pxp, 2) / Math.pow(rx$jscomp$0, 2) + Math.pow(pyp, 2) / Math.pow(ry, 2);
1 < lambda && (rx$jscomp$0 *= Math.sqrt(lambda), ry *= Math.sqrt(lambda));
var rx = rx$jscomp$0;
lambda = ry;
var rxSq = Math.pow(rx, 2), rySq = Math.pow(lambda, 2), pxpSq = Math.pow(pxp, 2), pypSq = Math.pow(pyp, 2), radicant = rxSq * rySq - rxSq * pypSq - rySq * pxpSq;
0 > radicant && (radicant = 0);
radicant = Math.sqrt(radicant / (rxSq * pypSq + rySq * pxpSq)) * (largeArcFlag === sweepFlag ? -1 : 1);
largeArcFlag = radicant * rx / lambda * pyp;
radicant = radicant * -lambda / rx * pxp;
px = xAxisRotation * largeArcFlag - sinPhi * radicant + (px + cx) / 2;
py = sinPhi * largeArcFlag + xAxisRotation * radicant + (py + cy) / 2;
cy = (pxp - largeArcFlag) / rx;
cx = (pyp - radicant) / lambda;
pxp = (-pxp - largeArcFlag) / rx;
lambda = (-pyp - radicant) / lambda;
pyp = vectorAngle(1, 0, cy, cx);
pxp = vectorAngle(cy, cx, pxp, lambda);
0 === sweepFlag && 0 < pxp && (pxp -= TAU);
1 === sweepFlag && 0 > pxp && (pxp += TAU);
out.centerX = px;
out.centerY = py;
out.ang1 = pyp;
out.ang2 = pxp;
var {ang1, ang2} = out, {centerX, centerY} = out;
sweepFlag = Math.abs(ang2) / (TAU / 4);
1e-7 > Math.abs(1 - sweepFlag) && (sweepFlag = 1);
sweepFlag = Math.max(Math.ceil(sweepFlag), 1);
ang2 /= sweepFlag;
pyp = points[points.length - 2];
pxp = points[points.length - 1];
lambda = {x:0, y:0};
for (rx = 0; rx < sweepFlag; rx++) {
py = -1.5707963267948966 === ang2 ? -0.551915024494 : 4 / 3 * Math.tan(ang2 / 4);
py = 1.5707963267948966 === ang2 ? 0.551915024494 : py;
cy = Math.cos(ang1);
px = Math.sin(ang1);
cx = Math.cos(ang1 + ang2);
largeArcFlag = Math.sin(ang1 + ang2);
py = [{x:cy - px * py, y:px + cy * py}, {x:cx + largeArcFlag * py, y:largeArcFlag - cx * py}, {x:cx, y:largeArcFlag}];
const {x:x1, y:y1} = mapToEllipse(py[0], rx$jscomp$0, ry, xAxisRotation, sinPhi, centerX, centerY, lambda), {x:x2, y:y2} = mapToEllipse(py[1], rx$jscomp$0, ry, xAxisRotation, sinPhi, centerX, centerY, lambda), {x, y} = mapToEllipse(py[2], rx$jscomp$0, ry, xAxisRotation, sinPhi, centerX, centerY, lambda);
buildAdaptiveBezier.buildAdaptiveBezier(points, pyp, pxp, x1, y1, x2, y2, x, y);
pyp = x;
pxp = y;
ang1 += ang2;
}
}
}
};
};
//# sourceMappingURL=module$node_modules$pixi_DOT_js$lib$scene$graphics$shared$buildCommands$buildArcToSvg.js.map