Files
nothoughts/node_modules/pixi.js/lib/scene/graphics/shared/buildCommands/buildAdaptiveQuadratic.mjs.map
2025-08-04 18:57:35 +02:00

1 line
6.3 KiB
Plaintext

{"version":3,"file":"buildAdaptiveQuadratic.mjs","sources":["../../../../../src/scene/graphics/shared/buildCommands/buildAdaptiveQuadratic.ts"],"sourcesContent":["// thanks to https://github.com/mattdesl/adaptive-quadratic-curve\n// for the original code!\n\nimport { GraphicsContextSystem } from '../GraphicsContextSystem';\n\nconst RECURSION_LIMIT = 8;\nconst FLT_EPSILON = 1.19209290e-7;\nconst PATH_DISTANCE_EPSILON = 1.0;\n\nconst curveAngleToleranceEpsilon = 0.01;\nconst mAngleTolerance = 0;\n\nexport function buildAdaptiveQuadratic(\n points: number[],\n sX: number, sY: number,\n cp1x: number, cp1y: number,\n eX: number, eY: number,\n smoothness?: number,\n)\n{\n const scale = 1.0;\n const smoothing = Math.min(\n 0.99, // a value of 1.0 actually inverts smoothing, so we cap it at 0.99\n Math.max(0, smoothness ?? GraphicsContextSystem.defaultOptions.bezierSmoothness)\n );\n let distanceTolerance = (PATH_DISTANCE_EPSILON - smoothing) / scale;\n\n distanceTolerance *= distanceTolerance;\n begin(sX, sY, cp1x, cp1y, eX, eY, points, distanceTolerance);\n\n return points;\n}\n\n// //// Based on:\n// //// https://github.com/pelson/antigrain/blob/master/agg-2.4/src/agg_curves.cpp\n\nfunction begin(\n sX: number, sY: number,\n cp1x: number, cp1y: number,\n eX: number, eY: number,\n points: number[],\n distanceTolerance: number\n)\n{\n recursive(points, sX, sY, cp1x, cp1y, eX, eY, distanceTolerance, 0);\n\n points.push(eX, eY);\n}\n\nfunction recursive(\n points: number[],\n x1: number, y1: number,\n x2: number, y2: number,\n x3: number, y3: number,\n distanceTolerance: number,\n level: number\n)\n{\n if (level > RECURSION_LIMIT)\n { return; }\n\n const pi = Math.PI;\n\n // Calculate all the mid-points of the line segments\n // ----------------------\n const x12 = (x1 + x2) / 2;\n const y12 = (y1 + y2) / 2;\n const x23 = (x2 + x3) / 2;\n const y23 = (y2 + y3) / 2;\n const x123 = (x12 + x23) / 2;\n const y123 = (y12 + y23) / 2;\n\n let dx = x3 - x1;\n let dy = y3 - y1;\n const d = Math.abs((((x2 - x3) * dy) - ((y2 - y3) * dx)));\n\n if (d > FLT_EPSILON)\n {\n // Regular care\n // -----------------\n if (d * d <= distanceTolerance * ((dx * dx) + (dy * dy)))\n {\n // If the curvature doesn't exceed the distance_tolerance value\n // we tend to finish subdivisions.\n // ----------------------\n if (mAngleTolerance < curveAngleToleranceEpsilon)\n {\n points.push(x123, y123);\n\n return;\n }\n\n // Angle & Cusp Condition\n // ----------------------\n let da = Math.abs(Math.atan2(y3 - y2, x3 - x2) - Math.atan2(y2 - y1, x2 - x1));\n\n if (da >= pi) da = (2 * pi) - da;\n\n if (da < mAngleTolerance)\n {\n // Finally we can stop the recursion\n // ----------------------\n points.push(x123, y123);\n\n return;\n }\n }\n }\n else\n {\n // Collinear case\n // -----------------\n dx = x123 - ((x1 + x3) / 2);\n dy = y123 - ((y1 + y3) / 2);\n if ((dx * dx) + (dy * dy) <= distanceTolerance)\n {\n points.push(x123, y123);\n\n return;\n }\n }\n\n // Continue subdivision\n // ----------------------\n recursive(points, x1, y1, x12, y12, x123, y123, distanceTolerance, level + 1);\n recursive(points, x123, y123, x23, y23, x3, y3, distanceTolerance, level + 1);\n}\n\n"],"names":[],"mappings":"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"}