UNPKG

tldraw

Version:

A tiny little drawing editor.

8 lines (7 loc) 2.97 kB
{ "version": 3, "sources": ["../../../../src/lib/shapes/line/line-helpers.ts"], "sourcesContent": ["import { Vec, VecLike, precise, rng } from '@tldraw/editor'\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 = Vec.AddXY(outline[i + 1], random() * offset, random() * offset)\n\n\t\tconst delta = Vec.Sub(p1, p0)\n\t\tconst distance = Vec.Len(delta)\n\t\tconst vector = Vec.Div(delta, distance).mul(Math.min(distance / 4, roundness))\n\n\t\tconst q0 = Vec.Add(p0, vector)\n\t\tconst q1 = Vec.Add(p1, vector.neg())\n\n\t\tconst sDelta = Vec.Sub(s1, s0)\n\t\tconst sDistance = Vec.Len(sDelta)\n\t\tconst sVector = Vec.Div(sDelta, sDistance).mul(Math.min(sDistance / 4, roundness))\n\n\t\tconst sq0 = Vec.Add(s0, sVector)\n\t\tconst sq1 = Vec.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": "AAAA,SAAS,KAAc,SAAS,WAAW;AAGpC,SAAS,oBAAoB,IAAY,SAAoB,aAAqB;AACxF,MAAI,gBAAgB,KAAK,QAAQ,QAAQ,CAAC,CAAC,CAAC;AAC5C,MAAI,iBAAiB,KAAK,QAAQ,QAAQ,CAAC,CAAC,CAAC;AAE7C,QAAM,SAAS,cAAc;AAC7B,QAAM,YAAY,cAAc;AAEhC,QAAM,SAAS,IAAI,EAAE;AACrB,MAAI,KAAK,QAAQ,CAAC;AAClB,MAAI;AAEJ,MAAI,KAAK,QAAQ,CAAC;AAClB,MAAI;AAEJ,QAAM,MAAM,QAAQ;AAEpB,WAAS,IAAI,GAAG,IAAI,MAAM,GAAG,IAAI,GAAG,KAAK;AACxC,SAAK,QAAQ,IAAI,CAAC;AAClB,SAAK,IAAI,MAAM,QAAQ,IAAI,CAAC,GAAG,OAAO,IAAI,QAAQ,OAAO,IAAI,MAAM;AAEnE,UAAM,QAAQ,IAAI,IAAI,IAAI,EAAE;AAC5B,UAAM,WAAW,IAAI,IAAI,KAAK;AAC9B,UAAM,SAAS,IAAI,IAAI,OAAO,QAAQ,EAAE,IAAI,KAAK,IAAI,WAAW,GAAG,SAAS,CAAC;AAE7E,UAAM,KAAK,IAAI,IAAI,IAAI,MAAM;AAC7B,UAAM,KAAK,IAAI,IAAI,IAAI,OAAO,IAAI,CAAC;AAEnC,UAAM,SAAS,IAAI,IAAI,IAAI,EAAE;AAC7B,UAAM,YAAY,IAAI,IAAI,MAAM;AAChC,UAAM,UAAU,IAAI,IAAI,QAAQ,SAAS,EAAE,IAAI,KAAK,IAAI,YAAY,GAAG,SAAS,CAAC;AAEjF,UAAM,MAAM,IAAI,IAAI,IAAI,OAAO;AAC/B,UAAM,MAAM,IAAI,IAAI,IAAI,QAAQ,IAAI,CAAC;AAErC,QAAI,MAAM,IAAI,GAAG;AAChB,uBAAiB,GAAG,QAAQ,EAAE,CAAC,KAAK,QAAQ,EAAE,CAAC;AAC/C,wBAAkB,GAAG,QAAQ,GAAG,CAAC,KAAK,QAAQ,EAAE,CAAC;AAAA,IAClD,OAAO;AACN,uBAAiB,GAAG,QAAQ,EAAE,CAAC,KAAK,QAAQ,EAAE,CAAC,KAAK,QAAQ,EAAE,CAAC;AAC/D,wBAAkB,GAAG,QAAQ,GAAG,CAAC,KAAK,QAAQ,GAAG,CAAC,KAAK,QAAQ,EAAE,CAAC;AAElE,WAAK;AACL,WAAK;AAAA,IACN;AAAA,EACD;AAEA,SAAO,CAAC,eAAe,gBAAgB,cAAc;AACtD;", "names": [] }