{ "version": 3, "sources": ["../../../../src/lib/shapes/shared/polygon-helpers.ts"], "sourcesContent": ["import { Vec2d, VecLike, toDomPrecision } from '@tldraw/editor'\n\nfunction precise(A: VecLike) {\n\treturn `${toDomPrecision(A.x)},${toDomPrecision(A.y)} `\n}\n\nfunction rng(seed = '') {\n\tlet x = 0\n\tlet y = 0\n\tlet z = 0\n\tlet w = 0\n\n\tfunction next() {\n\t\tconst t = x ^ (x << 11)\n\t\tx = y\n\t\ty = z\n\t\tz = w\n\t\tw ^= ((w >>> 19) ^ t ^ (t >>> 8)) >>> 0\n\t\treturn (w / 0x100000000) * 2\n\t}\n\n\tfor (let k = 0; k < seed.length + 64; k++) {\n\t\tx ^= seed.charCodeAt(k) | 0\n\t\tnext()\n\t}\n\n\treturn next\n}\n\n/** @public */\nexport function getRoundedInkyPolygonPath(points: VecLike[]) {\n\tlet polylineA = `M`\n\n\tconst len = points.length\n\n\tlet p0: VecLike\n\tlet p1: VecLike\n\tlet p2: VecLike\n\n\tfor (let i = 0, n = len; i < n; i += 3) {\n\t\tp0 = points[i]\n\t\tp1 = points[i + 1]\n\t\tp2 = points[i + 2]\n\n\t\tpolylineA += `${precise(p0)}L${precise(p1)}Q${precise(p2)}`\n\t}\n\n\tpolylineA += `${precise(points[0])}`\n\n\treturn polylineA\n}\n\n/** @public */\nexport function getRoundedPolygonPoints(\n\tid: string,\n\toutline: VecLike[],\n\toffset: number,\n\troundness: number,\n\tpasses: number\n) {\n\tconst results: VecLike[] = []\n\n\tconst random = rng(id)\n\tlet p0 = outline[0]\n\tlet p1: VecLike\n\n\tconst len = outline.length\n\n\tfor (let i = 0, n = len * passes; i < n; i++) {\n\t\tp1 = Vec2d.AddXY(outline[(i + 1) % len], random() * offset, random() * offset)\n\n\t\tconst delta = Vec2d.Sub(p1, p0)\n\t\tconst distance = Vec2d.Len(delta)\n\t\tconst vector = Vec2d.Div(delta, distance).mul(Math.min(distance / 4, roundness))\n\t\tresults.push(Vec2d.Add(p0, vector), Vec2d.Add(p1, vector.neg()), p1)\n\n\t\tp0 = p1\n\t}\n\n\treturn results\n}\n\n/** @public */\nexport function getDrawLinePathData(id: string, outline: VecLike[], strokeWidth: number) {\n\tlet innerPathData = `M ${precise(outline[0])}L`\n\tlet outerPathData2 = `M ${precise(outline[0])}L`\n\n\tconst offset = strokeWidth / 3\n\tconst roundness = strokeWidth * 2\n\n\tconst random = rng(id)\n\tlet p0 = outline[0]\n\tlet p1: VecLike\n\n\tlet s0 = outline[0]\n\tlet s1: VecLike\n\n\tconst len = outline.length\n\n\tfor (let i = 0, n = len - 1; i < n; i++) {\n\t\tp1 = outline[i + 1]\n\t\ts1 = Vec2d.AddXY(outline[i + 1], random() * offset, random() * offset)\n\n\t\tconst delta = Vec2d.Sub(p1, p0)\n\t\tconst distance = Vec2d.Len(delta)\n\t\tconst vector = Vec2d.Div(delta, distance).mul(Math.min(distance / 4, roundness))\n\n\t\tconst q0 = Vec2d.Add(p0, vector)\n\t\tconst q1 = Vec2d.Add(p1, vector.neg())\n\n\t\tconst sDelta = Vec2d.Sub(s1, s0)\n\t\tconst sDistance = Vec2d.Len(sDelta)\n\t\tconst sVector = Vec2d.Div(sDelta, sDistance).mul(Math.min(sDistance / 4, roundness))\n\n\t\tconst sq0 = Vec2d.Add(s0, sVector)\n\t\tconst sq1 = Vec2d.Add(s1, sVector.neg())\n\n\t\tif (i === n - 1) {\n\t\t\tinnerPathData += `${precise(q0)}L ${precise(p1)}`\n\t\t\touterPathData2 += `${precise(sq0)}L ${precise(s1)}`\n\t\t} else {\n\t\t\tinnerPathData += `${precise(q0)}L ${precise(q1)}Q ${precise(p1)}`\n\t\t\touterPathData2 += `${precise(sq0)}L ${precise(sq1)}Q ${precise(s1)}`\n\n\t\t\tp0 = p1\n\t\t\ts0 = s1\n\t\t}\n\t}\n\n\treturn [innerPathData, innerPathData + outerPathData2]\n}\n"], "mappings": "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", "names": [] }