import { earcut } from '@pixi/utils'; /** * Builds a polygon to draw * * Ignored from docs since it is not directly exposed. * * @ignore * @private * @param {PIXI.WebGLGraphicsData} graphicsData - The graphics object containing all the necessary properties * @param {object} webGLData - an object containing all the webGL-specific information to create this shape * @param {object} webGLDataNativeLines - an object containing all the webGL-specific information to create nativeLines */ export default { build(graphicsData) { graphicsData.points = graphicsData.shape.points.slice(); }, triangulate(graphicsData, graphicsGeometry) { let points = graphicsData.points; const holes = graphicsData.holes; const verts = graphicsGeometry.points; const indices = graphicsGeometry.indices; if (points.length >= 6) { const holeArray = []; // Process holes.. for (let i = 0; i < holes.length; i++) { const hole = holes[i]; holeArray.push(points.length / 2); points = points.concat(hole.points); } // sort color const triangles = earcut(points, holeArray, 2); if (!triangles) { return; } const vertPos = verts.length / 2; for (let i = 0; i < triangles.length; i += 3) { indices.push(triangles[i] + vertPos); indices.push(triangles[i + 1] + vertPos); indices.push(triangles[i + 2] + vertPos); } for (let i = 0; i < points.length; i++) { verts.push(points[i]); } } }, };