UNPKG

pixi.js

Version:

<p align="center"> <a href="https://pixijs.com" target="_blank" rel="noopener noreferrer"> <img height="150" src="https://files.pixijs.download/branding/pixijs-logo-transparent-dark.svg?v=1" alt="PixiJS logo"> </a> </p> <br/> <p align="center">

1 lines 6.42 kB
{"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\n/**\n * @param points\n * @param sX\n * @param sY\n * @param cp1x\n * @param cp1y\n * @param eX\n * @param eY\n * @param smoothness\n * @internal\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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"}