{"version":3,"file":"buildCircle.mjs","sources":["../../src/utils/buildCircle.ts"],"sourcesContent":["// for type only\nimport { SHAPES } from 'pixijs/core';\n\nimport type { Circle, Ellipse, RoundedRectangle } from 'pixijs/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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"}