1 line
33 KiB
Plaintext
1 line
33 KiB
Plaintext
{"version":3,"file":"buildLine.mjs","sources":["../../../../../src/scene/graphics/shared/buildCommands/buildLine.ts"],"sourcesContent":["import { Point } from '../../../../maths/point/Point';\nimport { closePointEps, curveEps } from '../const';\nimport { getOrientationOfPoints } from '../utils/getOrientationOfPoints';\n\nimport type { StrokeAttributes } from '../FillTypes';\n\n/**\n * Buffers vertices to draw a square cap.\n *\n * Ignored from docs since it is not directly exposed.\n * @ignore\n * @private\n * @param {number} x - X-coord of end point\n * @param {number} y - Y-coord of end point\n * @param {number} nx - X-coord of line normal pointing inside\n * @param {number} ny - Y-coord of line normal pointing inside\n * @param {number} innerWeight - Weight of inner points\n * @param {number} outerWeight - Weight of outer points\n * @param {boolean} clockwise - Whether the cap is drawn clockwise\n * @param {Array<number>} verts - vertex buffer\n * @returns {number} - no. of vertices pushed\n */\nfunction square(\n x: number,\n y: number,\n nx: number,\n ny: number,\n innerWeight: number,\n outerWeight: number,\n clockwise: boolean, /* rotation for square (true at left end, false at right end) */\n verts: Array<number>\n): number\n{\n const ix = x - (nx * innerWeight);\n const iy = y - (ny * innerWeight);\n const ox = x + (nx * outerWeight);\n const oy = y + (ny * outerWeight);\n\n /* Rotate nx,ny for extension vector */\n let exx; let\n eyy;\n\n if (clockwise)\n {\n exx = ny;\n eyy = -nx;\n }\n else\n {\n exx = -ny;\n eyy = nx;\n }\n\n /* [i|0]x,y extended at cap */\n const eix = ix + exx;\n const eiy = iy + eyy;\n const eox = ox + exx;\n const eoy = oy + eyy;\n\n /* Square itself must be inserted clockwise*/\n verts.push(eix, eiy);\n verts.push(eox, eoy);\n\n return 2;\n}\n\n/**\n * Buffers vertices to draw an arc at the line joint or cap.\n *\n * Ignored from docs since it is not directly exposed.\n * @ignore\n * @private\n * @param {number} cx - X-coord of center\n * @param {number} cy - Y-coord of center\n * @param {number} sx - X-coord of arc start\n * @param {number} sy - Y-coord of arc start\n * @param {number} ex - X-coord of arc end\n * @param {number} ey - Y-coord of arc end\n * @param {Array[]} verts - buffer of vertices\n * @param {boolean} clockwise - orientation of vertices\n * @returns {number} - no. of vertices pushed\n */\nfunction round(\n cx: number,\n cy: number,\n sx: number,\n sy: number,\n ex: number,\n ey: number,\n verts: number[],\n clockwise: boolean, /* if not cap, then clockwise is turn of joint, otherwise rotation from angle0 to angle1 */\n): number\n{\n const cx2p0x = sx - cx;\n const cy2p0y = sy - cy;\n\n let angle0 = Math.atan2(cx2p0x, cy2p0y);\n let angle1 = Math.atan2(ex - cx, ey - cy);\n\n if (clockwise && angle0 < angle1)\n {\n angle0 += Math.PI * 2;\n }\n else if (!clockwise && angle0 > angle1)\n {\n angle1 += Math.PI * 2;\n }\n\n let startAngle = angle0;\n const angleDiff = angle1 - angle0;\n const absAngleDiff = Math.abs(angleDiff);\n\n const radius = Math.sqrt((cx2p0x * cx2p0x) + (cy2p0y * cy2p0y));\n const segCount = ((15 * absAngleDiff * Math.sqrt(radius) / Math.PI) >> 0) + 1;\n const angleInc = angleDiff / segCount;\n\n startAngle += angleInc;\n\n if (clockwise)\n {\n verts.push(cx, cy);\n verts.push(sx, sy);\n\n for (let i = 1, angle = startAngle; i < segCount; i++, angle += angleInc)\n {\n verts.push(cx, cy);\n verts.push(cx + ((Math.sin(angle) * radius)),\n cy + ((Math.cos(angle) * radius)));\n }\n\n verts.push(cx, cy);\n verts.push(ex, ey);\n }\n else\n {\n verts.push(sx, sy);\n verts.push(cx, cy);\n\n for (let i = 1, angle = startAngle; i < segCount; i++, angle += angleInc)\n {\n verts.push(cx + ((Math.sin(angle) * radius)),\n cy + ((Math.cos(angle) * radius)));\n verts.push(cx, cy);\n }\n\n verts.push(ex, ey);\n verts.push(cx, cy);\n }\n\n return segCount * 2;\n}\n\n/**\n * Builds a line to draw using the polygon method.\n * @param points\n * @param lineStyle\n * @param flipAlignment\n * @param closed\n * @param vertices\n * @param _verticesStride\n * @param _verticesOffset\n * @param indices\n * @param _indicesOffset\n */\nexport function buildLine(\n points: number[],\n lineStyle: StrokeAttributes,\n flipAlignment: boolean,\n closed: boolean,\n // alignment:number,\n\n vertices: number[],\n _verticesStride: number,\n _verticesOffset: number,\n\n indices: number[],\n _indicesOffset: number,\n\n): void\n{\n // const shape = graphicsData.shape as Polygon;\n // let points = graphicsData.points || shape.points.slice();\n const eps = closePointEps;\n\n if (points.length === 0)\n {\n return;\n }\n\n const style = lineStyle;\n\n let alignment = style.alignment;\n\n if (lineStyle.alignment !== 0.5)\n {\n // rotate the points!\n let orientation = getOrientationOfPoints(points);\n\n if (flipAlignment)orientation *= -1;\n\n alignment = ((alignment - 0.5) * orientation) + 0.5;\n }\n\n // get first and last point.. figure out the middle!\n const firstPoint = new Point(points[0], points[1]);\n const lastPoint = new Point(points[points.length - 2], points[points.length - 1]);\n const closedShape = closed;\n const closedPath = Math.abs(firstPoint.x - lastPoint.x) < eps\n && Math.abs(firstPoint.y - lastPoint.y) < eps;\n\n // if the first point is the last point - gonna have issues :)\n if (closedShape)\n {\n // need to clone as we are going to slightly modify the shape..\n points = points.slice();\n\n if (closedPath)\n {\n points.pop();\n points.pop();\n lastPoint.set(points[points.length - 2], points[points.length - 1]);\n }\n\n const midPointX = (firstPoint.x + lastPoint.x) * 0.5;\n const midPointY = (lastPoint.y + firstPoint.y) * 0.5;\n\n points.unshift(midPointX, midPointY);\n points.push(midPointX, midPointY);\n }\n\n const verts = vertices;\n\n const length = points.length / 2;\n let indexCount = points.length;\n const indexStart = verts.length / 2;\n\n // Max. inner and outer width\n const width = style.width / 2;\n const widthSquared = width * width;\n const miterLimitSquared = style.miterLimit * style.miterLimit;\n\n /* Line segments of interest where (x1,y1) forms the corner. */\n let x0 = points[0];\n let y0 = points[1];\n let x1 = points[2];\n let y1 = points[3];\n let x2 = 0;\n let y2 = 0;\n\n /* perp[?](x|y) = the line normal with magnitude lineWidth. */\n let perpX = -(y0 - y1);\n let perpY = x0 - x1;\n let perp1x = 0;\n let perp1y = 0;\n\n let dist = Math.sqrt((perpX * perpX) + (perpY * perpY));\n\n perpX /= dist;\n perpY /= dist;\n perpX *= width;\n perpY *= width;\n\n const ratio = alignment;// 0.5;\n const innerWeight = (1 - ratio) * 2;\n const outerWeight = ratio * 2;\n\n if (!closedShape)\n {\n if (style.cap === 'round')\n {\n indexCount += round(\n x0 - (perpX * (innerWeight - outerWeight) * 0.5),\n y0 - (perpY * (innerWeight - outerWeight) * 0.5),\n x0 - (perpX * innerWeight),\n y0 - (perpY * innerWeight),\n x0 + (perpX * outerWeight),\n y0 + (perpY * outerWeight),\n verts,\n true,\n ) + 2;\n }\n else if (style.cap === 'square')\n {\n indexCount += square(x0, y0, perpX, perpY, innerWeight, outerWeight, true, verts);\n }\n }\n\n // Push first point (below & above vertices)\n verts.push(\n x0 - (perpX * innerWeight),\n y0 - (perpY * innerWeight));\n verts.push(\n x0 + (perpX * outerWeight),\n y0 + (perpY * outerWeight));\n\n for (let i = 1; i < length - 1; ++i)\n {\n x0 = points[(i - 1) * 2];\n y0 = points[((i - 1) * 2) + 1];\n\n x1 = points[i * 2];\n y1 = points[(i * 2) + 1];\n\n x2 = points[(i + 1) * 2];\n y2 = points[((i + 1) * 2) + 1];\n\n perpX = -(y0 - y1);\n perpY = x0 - x1;\n\n dist = Math.sqrt((perpX * perpX) + (perpY * perpY));\n perpX /= dist;\n perpY /= dist;\n perpX *= width;\n perpY *= width;\n\n perp1x = -(y1 - y2);\n perp1y = x1 - x2;\n\n dist = Math.sqrt((perp1x * perp1x) + (perp1y * perp1y));\n perp1x /= dist;\n perp1y /= dist;\n perp1x *= width;\n perp1y *= width;\n\n /* d[x|y](0|1) = the component displacement between points p(0,1|1,2) */\n const dx0 = x1 - x0;\n const dy0 = y0 - y1;\n const dx1 = x1 - x2;\n const dy1 = y2 - y1;\n\n /* +ve if internal angle < 90 degree, -ve if internal angle > 90 degree. */\n const dot = (dx0 * dx1) + (dy0 * dy1);\n /* +ve if internal angle counterclockwise, -ve if internal angle clockwise. */\n const cross = (dy0 * dx1) - (dy1 * dx0);\n const clockwise = (cross < 0);\n\n /* Going nearly parallel? */\n /* atan(0.001) ~= 0.001 rad ~= 0.057 degree */\n if (Math.abs(cross) < 0.001 * Math.abs(dot))\n {\n verts.push(\n x1 - (perpX * innerWeight),\n y1 - (perpY * innerWeight));\n verts.push(\n x1 + (perpX * outerWeight),\n y1 + (perpY * outerWeight));\n\n /* 180 degree corner? */\n if (dot >= 0)\n {\n if (style.join === 'round')\n {\n indexCount += round(\n x1, y1,\n x1 - (perpX * innerWeight), y1 - (perpY * innerWeight),\n x1 - (perp1x * innerWeight), y1 - (perp1y * innerWeight),\n verts, false) + 4;\n }\n else\n {\n indexCount += 2;\n }\n\n verts.push(\n x1 - (perp1x * outerWeight),\n y1 - (perp1y * outerWeight));\n verts.push(\n x1 + (perp1x * innerWeight),\n y1 + (perp1y * innerWeight));\n }\n\n continue;\n }\n\n /* p[x|y] is the miter point. pDist is the distance between miter point and p1. */\n const c1 = ((-perpX + x0) * (-perpY + y1)) - ((-perpX + x1) * (-perpY + y0));\n const c2 = ((-perp1x + x2) * (-perp1y + y1)) - ((-perp1x + x1) * (-perp1y + y2));\n const px = ((dx0 * c2) - (dx1 * c1)) / cross;\n const py = ((dy1 * c1) - (dy0 * c2)) / cross;\n const pDist = ((px - x1) * (px - x1)) + ((py - y1) * (py - y1));\n\n /* Inner miter point */\n const imx = x1 + ((px - x1) * innerWeight);\n const imy = y1 + ((py - y1) * innerWeight);\n /* Outer miter point */\n const omx = x1 - ((px - x1) * outerWeight);\n const omy = y1 - ((py - y1) * outerWeight);\n\n /* Is the inside miter point too far away, creating a spike? */\n const smallerInsideSegmentSq = Math.min((dx0 * dx0) + (dy0 * dy0), (dx1 * dx1) + (dy1 * dy1));\n const insideWeight = clockwise ? innerWeight : outerWeight;\n const smallerInsideDiagonalSq = smallerInsideSegmentSq + (insideWeight * insideWeight * widthSquared);\n const insideMiterOk = pDist <= smallerInsideDiagonalSq;\n\n if (insideMiterOk)\n {\n if (style.join === 'bevel' || pDist / widthSquared > miterLimitSquared)\n {\n if (clockwise) /* rotating at inner angle */\n {\n verts.push(imx, imy); // inner miter point\n verts.push(x1 + (perpX * outerWeight), y1 + (perpY * outerWeight)); // first segment's outer vertex\n verts.push(imx, imy); // inner miter point\n verts.push(x1 + (perp1x * outerWeight), y1 + (perp1y * outerWeight)); // second segment's outer vertex\n }\n else /* rotating at outer angle */\n {\n verts.push(x1 - (perpX * innerWeight), y1 - (perpY * innerWeight)); // first segment's inner vertex\n verts.push(omx, omy); // outer miter point\n verts.push(x1 - (perp1x * innerWeight), y1 - (perp1y * innerWeight)); // second segment's outer vertex\n verts.push(omx, omy); // outer miter point\n }\n\n indexCount += 2;\n }\n else if (style.join === 'round')\n {\n if (clockwise) /* arc is outside */\n {\n verts.push(imx, imy);\n verts.push(x1 + (perpX * outerWeight), y1 + (perpY * outerWeight));\n\n indexCount += round(\n x1, y1,\n x1 + (perpX * outerWeight), y1 + (perpY * outerWeight),\n x1 + (perp1x * outerWeight), y1 + (perp1y * outerWeight),\n verts, true\n ) + 4;\n\n verts.push(imx, imy);\n verts.push(x1 + (perp1x * outerWeight), y1 + (perp1y * outerWeight));\n }\n else /* arc is inside */\n {\n verts.push(x1 - (perpX * innerWeight), y1 - (perpY * innerWeight));\n verts.push(omx, omy);\n\n indexCount += round(\n x1, y1,\n x1 - (perpX * innerWeight), y1 - (perpY * innerWeight),\n x1 - (perp1x * innerWeight), y1 - (perp1y * innerWeight),\n verts, false\n ) + 4;\n\n verts.push(x1 - (perp1x * innerWeight), y1 - (perp1y * innerWeight));\n verts.push(omx, omy);\n }\n }\n else\n {\n verts.push(imx, imy);\n verts.push(omx, omy);\n }\n }\n else // inside miter is NOT ok\n {\n verts.push(x1 - (perpX * innerWeight), y1 - (perpY * innerWeight)); // first segment's inner vertex\n verts.push(x1 + (perpX * outerWeight), y1 + (perpY * outerWeight)); // first segment's outer vertex\n if (style.join === 'round')\n {\n if (clockwise) /* arc is outside */\n {\n indexCount += round(\n x1, y1,\n x1 + (perpX * outerWeight), y1 + (perpY * outerWeight),\n x1 + (perp1x * outerWeight), y1 + (perp1y * outerWeight),\n verts, true\n ) + 2;\n }\n else /* arc is inside */\n {\n indexCount += round(\n x1, y1,\n x1 - (perpX * innerWeight), y1 - (perpY * innerWeight),\n x1 - (perp1x * innerWeight), y1 - (perp1y * innerWeight),\n verts, false\n ) + 2;\n }\n }\n else if (style.join === 'miter' && pDist / widthSquared <= miterLimitSquared)\n {\n if (clockwise)\n {\n verts.push(omx, omy); // inner miter point\n verts.push(omx, omy); // inner miter point\n }\n else\n {\n verts.push(imx, imy); // outer miter point\n verts.push(imx, imy); // outer miter point\n }\n indexCount += 2;\n }\n verts.push(x1 - (perp1x * innerWeight), y1 - (perp1y * innerWeight)); // second segment's inner vertex\n verts.push(x1 + (perp1x * outerWeight), y1 + (perp1y * outerWeight)); // second segment's outer vertex\n indexCount += 2;\n }\n }\n\n x0 = points[(length - 2) * 2];\n y0 = points[((length - 2) * 2) + 1];\n\n x1 = points[(length - 1) * 2];\n y1 = points[((length - 1) * 2) + 1];\n\n perpX = -(y0 - y1);\n perpY = x0 - x1;\n\n dist = Math.sqrt((perpX * perpX) + (perpY * perpY));\n perpX /= dist;\n perpY /= dist;\n perpX *= width;\n perpY *= width;\n\n verts.push(x1 - (perpX * innerWeight), y1 - (perpY * innerWeight));\n verts.push(x1 + (perpX * outerWeight), y1 + (perpY * outerWeight));\n\n if (!closedShape)\n {\n if (style.cap === 'round')\n {\n indexCount += round(\n x1 - (perpX * (innerWeight - outerWeight) * 0.5),\n y1 - (perpY * (innerWeight - outerWeight) * 0.5),\n x1 - (perpX * innerWeight),\n y1 - (perpY * innerWeight),\n x1 + (perpX * outerWeight),\n y1 + (perpY * outerWeight),\n verts,\n false\n ) + 2;\n }\n else if (style.cap === 'square')\n {\n indexCount += square(x1, y1, perpX, perpY, innerWeight, outerWeight, false, verts);\n }\n }\n\n // const indices = graphicsGeometry.indices;\n const eps2 = curveEps * curveEps;\n\n // indices.push(indexStart);\n for (let i = indexStart; i < indexCount + indexStart - 2; ++i)\n {\n x0 = verts[(i * 2)];\n y0 = verts[(i * 2) + 1];\n\n x1 = verts[(i + 1) * 2];\n y1 = verts[((i + 1) * 2) + 1];\n\n x2 = verts[(i + 2) * 2];\n y2 = verts[((i + 2) * 2) + 1];\n\n /* Skip zero area triangles */\n if (Math.abs((x0 * (y1 - y2)) + (x1 * (y2 - y0)) + (x2 * (y0 - y1))) < eps2)\n {\n continue;\n }\n\n indices.push(i, i + 1, i + 2);\n }\n}\n\n"],"names":[],"mappings":"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"} |