tldraw
Version:
A tiny little drawing editor.
8 lines (7 loc) • 5.89 kB
Source Map (JSON)
{
"version": 3,
"sources": ["../../../../../src/lib/ui/components/Minimap/minimap-webgl-shapes.ts"],
"sourcesContent": ["import { Box, HALF_PI, PI, PI2, Vec } from '@tldraw/editor'\n\nexport const numArcSegmentsPerCorner = 10\n\nexport const roundedRectangleDataSize =\n\t// num triangles in corners\n\t4 * 6 * numArcSegmentsPerCorner +\n\t// num triangles in center rect\n\t12 +\n\t// num triangles in outer rects\n\t4 * 12\n\nexport function pie(\n\tarray: Float32Array,\n\t{\n\t\tcenter,\n\t\tradius,\n\t\tnumArcSegments = 20,\n\t\tstartAngle = 0,\n\t\tendAngle = PI2,\n\t\toffset = 0,\n\t}: {\n\t\tcenter: Vec\n\t\tradius: number\n\t\tnumArcSegments?: number\n\t\tstartAngle?: number\n\t\tendAngle?: number\n\t\toffset?: number\n\t}\n) {\n\tconst angle = (endAngle - startAngle) / numArcSegments\n\tlet i = offset\n\tfor (let a = startAngle; a < endAngle; a += angle) {\n\t\tarray[i++] = center.x\n\t\tarray[i++] = center.y\n\t\tarray[i++] = center.x + Math.cos(a) * radius\n\t\tarray[i++] = center.y + Math.sin(a) * radius\n\t\tarray[i++] = center.x + Math.cos(a + angle) * radius\n\t\tarray[i++] = center.y + Math.sin(a + angle) * radius\n\t}\n\treturn array\n}\n\n/** @internal **/\nexport function rectangle(\n\tarray: Float32Array,\n\toffset: number,\n\tx: number,\n\ty: number,\n\tw: number,\n\th: number\n) {\n\tarray[offset++] = x\n\tarray[offset++] = y\n\tarray[offset++] = x\n\tarray[offset++] = y + h\n\tarray[offset++] = x + w\n\tarray[offset++] = y\n\n\tarray[offset++] = x + w\n\tarray[offset++] = y\n\tarray[offset++] = x\n\tarray[offset++] = y + h\n\tarray[offset++] = x + w\n\tarray[offset++] = y + h\n}\n\nexport function roundedRectangle(data: Float32Array, box: Box, radius: number): number {\n\tconst numArcSegments = numArcSegmentsPerCorner\n\tradius = Math.min(radius, Math.min(box.w, box.h) / 2)\n\t// first draw the inner box\n\tconst innerBox = Box.ExpandBy(box, -radius)\n\tif (innerBox.w <= 0 || innerBox.h <= 0) {\n\t\t// just draw a circle\n\t\tpie(data, { center: box.center, radius: radius, numArcSegments: numArcSegmentsPerCorner * 4 })\n\t\treturn numArcSegmentsPerCorner * 4 * 6\n\t}\n\tlet offset = 0\n\t// draw center rect first\n\trectangle(data, offset, innerBox.minX, innerBox.minY, innerBox.w, innerBox.h)\n\toffset += 12\n\t// then top rect\n\trectangle(data, offset, innerBox.minX, box.minY, innerBox.w, radius)\n\toffset += 12\n\t// then right rect\n\trectangle(data, offset, innerBox.maxX, innerBox.minY, radius, innerBox.h)\n\toffset += 12\n\t// then bottom rect\n\trectangle(data, offset, innerBox.minX, innerBox.maxY, innerBox.w, radius)\n\toffset += 12\n\t// then left rect\n\trectangle(data, offset, box.minX, innerBox.minY, radius, innerBox.h)\n\toffset += 12\n\n\t// draw the corners\n\n\t// top left\n\tpie(data, {\n\t\tnumArcSegments,\n\t\toffset,\n\t\tcenter: innerBox.point,\n\t\tradius,\n\t\tstartAngle: PI,\n\t\tendAngle: PI * 1.5,\n\t})\n\n\toffset += numArcSegments * 6\n\n\t// top right\n\tpie(data, {\n\t\tnumArcSegments,\n\t\toffset,\n\t\tcenter: Vec.Add(innerBox.point, new Vec(innerBox.w, 0)),\n\t\tradius,\n\t\tstartAngle: PI * 1.5,\n\t\tendAngle: PI2,\n\t})\n\n\toffset += numArcSegments * 6\n\n\t// bottom right\n\tpie(data, {\n\t\tnumArcSegments,\n\t\toffset,\n\t\tcenter: Vec.Add(innerBox.point, innerBox.size),\n\t\tradius,\n\t\tstartAngle: 0,\n\t\tendAngle: HALF_PI,\n\t})\n\n\toffset += numArcSegments * 6\n\n\t// bottom left\n\tpie(data, {\n\t\tnumArcSegments,\n\t\toffset,\n\t\tcenter: Vec.Add(innerBox.point, new Vec(0, innerBox.h)),\n\t\tradius,\n\t\tstartAngle: HALF_PI,\n\t\tendAngle: PI,\n\t})\n\n\treturn roundedRectangleDataSize\n}\n"],
"mappings": "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",
"names": []
}