1 line
8.7 KiB
Plaintext
1 line
8.7 KiB
Plaintext
{"version":3,"file":"buildCircle.mjs","sources":["../../src/utils/buildCircle.ts"],"sourcesContent":["// for type only\nimport { SHAPES } from '@pixi/core';\n\nimport type { Circle, Ellipse, RoundedRectangle } from '@pixi/core';\nimport type { IShapeBuildCommand } from './IShapeBuildCommand';\n\n/**\n * Builds a circle to draw\n *\n * Ignored from docs since it is not directly exposed.\n * @ignore\n * @private\n * @param {PIXI.WebGLGraphicsData} graphicsData - The graphics object to draw\n * @param {object} webGLData - an object containing all the WebGL-specific information to create this shape\n * @param {object} webGLDataNativeLines - an object containing all the WebGL-specific information to create nativeLines\n */\nexport const buildCircle: IShapeBuildCommand = {\n\n build(graphicsData)\n {\n // need to convert points to a nice regular data\n const points = graphicsData.points;\n\n let x;\n let y;\n let dx;\n let dy;\n let rx;\n let ry;\n\n if (graphicsData.type === SHAPES.CIRC)\n {\n const circle = graphicsData.shape as Circle;\n\n x = circle.x;\n y = circle.y;\n rx = ry = circle.radius;\n dx = dy = 0;\n }\n else if (graphicsData.type === SHAPES.ELIP)\n {\n const ellipse = graphicsData.shape as Ellipse;\n\n x = ellipse.x;\n y = ellipse.y;\n rx = ellipse.width;\n ry = ellipse.height;\n dx = dy = 0;\n }\n else\n {\n const roundedRect = graphicsData.shape as RoundedRectangle;\n const halfWidth = roundedRect.width / 2;\n const halfHeight = roundedRect.height / 2;\n\n x = roundedRect.x + halfWidth;\n y = roundedRect.y + halfHeight;\n rx = ry = Math.max(0, Math.min(roundedRect.radius, Math.min(halfWidth, halfHeight)));\n dx = halfWidth - rx;\n dy = halfHeight - ry;\n }\n\n if (!(rx >= 0 && ry >= 0 && dx >= 0 && dy >= 0))\n {\n points.length = 0;\n\n return;\n }\n\n // Choose a number of segments such that the maximum absolute deviation from the circle is approximately 0.029\n const n = Math.ceil(2.3 * Math.sqrt(rx + ry));\n const m = (n * 8) + (dx ? 4 : 0) + (dy ? 4 : 0);\n\n points.length = m;\n\n if (m === 0)\n {\n return;\n }\n\n if (n === 0)\n {\n points.length = 8;\n points[0] = points[6] = x + dx;\n points[1] = points[3] = y + dy;\n points[2] = points[4] = x - dx;\n points[5] = points[7] = y - dy;\n\n return;\n }\n\n let j1 = 0;\n let j2 = (n * 4) + (dx ? 2 : 0) + 2;\n let j3 = j2;\n let j4 = m;\n\n {\n const x0 = dx + rx;\n const y0 = dy;\n const x1 = x + x0;\n const x2 = x - x0;\n const y1 = y + y0;\n\n points[j1++] = x1;\n points[j1++] = y1;\n points[--j2] = y1;\n points[--j2] = x2;\n\n if (dy)\n {\n const y2 = y - y0;\n\n points[j3++] = x2;\n points[j3++] = y2;\n points[--j4] = y2;\n points[--j4] = x1;\n }\n }\n\n for (let i = 1; i < n; i++)\n {\n const a = Math.PI / 2 * (i / n);\n const x0 = dx + (Math.cos(a) * rx);\n const y0 = dy + (Math.sin(a) * ry);\n const x1 = x + x0;\n const x2 = x - x0;\n const y1 = y + y0;\n const y2 = y - y0;\n\n points[j1++] = x1;\n points[j1++] = y1;\n points[--j2] = y1;\n points[--j2] = x2;\n points[j3++] = x2;\n points[j3++] = y2;\n points[--j4] = y2;\n points[--j4] = x1;\n }\n\n {\n const x0 = dx;\n const y0 = dy + ry;\n const x1 = x + x0;\n const x2 = x - x0;\n const y1 = y + y0;\n const y2 = y - y0;\n\n points[j1++] = x1;\n points[j1++] = y1;\n points[--j4] = y2;\n points[--j4] = x1;\n\n if (dx)\n {\n points[j1++] = x2;\n points[j1++] = y1;\n points[--j4] = y2;\n points[--j4] = x2;\n }\n }\n },\n\n triangulate(graphicsData, graphicsGeometry)\n {\n const points = graphicsData.points;\n const verts = graphicsGeometry.points;\n const indices = graphicsGeometry.indices;\n\n if (points.length === 0)\n {\n return;\n }\n\n let vertPos = verts.length / 2;\n const center = vertPos;\n\n let x;\n let y;\n\n if (graphicsData.type !== SHAPES.RREC)\n {\n const circle = graphicsData.shape as Circle;\n\n x = circle.x;\n y = circle.y;\n }\n else\n {\n const roundedRect = graphicsData.shape as RoundedRectangle;\n\n x = roundedRect.x + (roundedRect.width / 2);\n y = roundedRect.y + (roundedRect.height / 2);\n }\n\n const matrix = graphicsData.matrix;\n\n // Push center (special point)\n verts.push(\n graphicsData.matrix ? (matrix.a * x) + (matrix.c * y) + matrix.tx : x,\n graphicsData.matrix ? (matrix.b * x) + (matrix.d * y) + matrix.ty : y);\n\n vertPos++;\n\n verts.push(points[0], points[1]);\n\n for (let i = 2; i < points.length; i += 2)\n {\n verts.push(points[i], points[i + 1]);\n\n // add some uvs\n indices.push(vertPos++, center, vertPos);\n }\n\n indices.push(center + 1, center, vertPos);\n },\n};\n"],"names":[],"mappings":"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"} |