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 11.9 kB
{"version":3,"file":"buildCircle.mjs","sources":["../../../../../src/scene/graphics/shared/buildCommands/buildCircle.ts"],"sourcesContent":["import { ExtensionType } from '../../../../extensions/Extensions';\n\nimport type { Circle } from '../../../../maths/shapes/Circle';\nimport type { Ellipse } from '../../../../maths/shapes/Ellipse';\nimport type { RoundedRectangle } from '../../../../maths/shapes/RoundedRectangle';\nimport type { ShapeBuildCommand } from './ShapeBuildCommand';\n\n/** @internal */\ntype RoundedShape = Circle | Ellipse | RoundedRectangle;\n\n/**\n * Builds a rectangle to draw\n *\n * Ignored from docs since it is not directly exposed.\n * @internal\n */\nexport const buildCircle: ShapeBuildCommand<RoundedShape> = {\n extension: {\n type: ExtensionType.ShapeBuilder,\n name: 'circle',\n },\n\n build(shape: RoundedShape, points: number[]): boolean\n {\n let x;\n let y;\n let dx;\n let dy;\n\n let rx;\n let ry;\n\n if (shape.type === 'circle')\n {\n const circle = shape as Circle;\n\n rx = ry = circle.radius;\n if (rx <= 0)\n {\n return false;\n }\n x = circle.x;\n y = circle.y;\n dx = dy = 0;\n }\n\n else if (shape.type === 'ellipse')\n {\n const ellipse = shape as Ellipse;\n\n rx = ellipse.halfWidth;\n ry = ellipse.halfHeight;\n if (rx <= 0 || ry <= 0)\n { // skip zero ellipse\n return false;\n }\n x = ellipse.x;\n y = ellipse.y;\n dx = dy = 0;\n }\n else\n {\n const roundedRect = 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 (dx < 0 || dy < 0)\n {\n return false;\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 if (m === 0)\n {\n return false;\n }\n\n if (n === 0)\n {\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 true;\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 let x0 = dx + rx;\n let y0 = dy;\n let x1 = x + x0;\n let x2 = x - x0;\n let 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 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 x0 = dx;\n y0 = dy + ry;\n x1 = x + x0;\n x2 = x - x0;\n 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 return true;\n },\n\n triangulate(points, vertices, verticesStride, verticesOffset, indices, indicesOffset)\n {\n if (points.length === 0)\n {\n return;\n }\n\n // Compute center (average of all points)\n let centerX = 0; let\n centerY = 0;\n\n for (let i = 0; i < points.length; i += 2)\n {\n centerX += points[i];\n centerY += points[i + 1];\n }\n centerX /= (points.length / 2);\n centerY /= (points.length / 2);\n\n // Set center vertex\n let count = verticesOffset;\n\n vertices[count * verticesStride] = centerX;\n vertices[(count * verticesStride) + 1] = centerY;\n const centerIndex = count++;\n\n // Set edge vertices and indices\n for (let i = 0; i < points.length; i += 2)\n {\n vertices[count * verticesStride] = points[i];\n vertices[(count * verticesStride) + 1] = points[i + 1];\n\n if (i > 0)\n { // Skip first point for indices\n indices[indicesOffset++] = count;\n indices[indicesOffset++] = centerIndex;\n indices[indicesOffset++] = count - 1;\n }\n count++;\n }\n\n // Connect last point to the first edge point\n indices[indicesOffset++] = centerIndex + 1;\n indices[indicesOffset++] = centerIndex;\n indices[indicesOffset++] = count - 1;\n }\n\n};\n\n/** @internal */\nexport const buildEllipse = { ...buildCircle, extension: { ...buildCircle.extension, name: 'ellipse' } };\n/** @internal */\nexport const buildRoundedRectangle = { ...buildCircle, extension: { ...buildCircle.extension, name: 'roundedRectangle' } };\n"],"names":["y2","x0","y0","x1","x2","y1"],"mappings":"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"}