@tldraw/editor
Version:
tldraw infinite canvas SDK (editor).
8 lines (7 loc) • 3.08 kB
Source Map (JSON)
{
"version": 3,
"sources": ["../../../../src/lib/primitives/geometry/Edge2d.ts"],
"sourcesContent": ["import { Vec, VecLike } from '../Vec'\nimport { Geometry2d } from './Geometry2d'\n\n/** @public */\nexport class Edge2d extends Geometry2d {\n\tprivate _start: Vec\n\tprivate _end: Vec\n\tprivate _d: Vec\n\tprivate _u: Vec\n\tprivate _ul: number\n\n\tconstructor(config: { start: Vec; end: Vec }) {\n\t\tsuper({ ...config, isClosed: false, isFilled: false })\n\t\tconst { start, end } = config\n\n\t\tthis._start = start\n\t\tthis._end = end\n\n\t\tthis._d = start.clone().sub(end) // the delta from start to end\n\t\tthis._u = this._d.clone().uni() // the unit vector of the edge\n\t\tthis._ul = this._u.len() // the length of the unit vector\n\t}\n\n\toverride getLength() {\n\t\treturn this._d.len()\n\t}\n\n\toverride getVertices(): Vec[] {\n\t\treturn [this._start, this._end]\n\t}\n\n\toverride nearestPoint(point: VecLike): Vec {\n\t\tconst { _start: start, _end: end, _d: d, _u: u, _ul: l } = this\n\t\tif (d.len() === 0) return start // start and end are the same\n\t\tif (l === 0) return start // no length in the unit vector\n\t\tconst k = Vec.Sub(point, start).dpr(u) / l\n\t\tconst cx = start.x + u.x * k\n\t\tif (cx < Math.min(start.x, end.x)) return start.x < end.x ? start : end\n\t\tif (cx > Math.max(start.x, end.x)) return start.x > end.x ? start : end\n\t\tconst cy = start.y + u.y * k\n\t\tif (cy < Math.min(start.y, end.y)) return start.y < end.y ? start : end\n\t\tif (cy > Math.max(start.y, end.y)) return start.y > end.y ? start : end\n\t\treturn new Vec(cx, cy)\n\t}\n\n\tgetSvgPathData(first = true) {\n\t\tconst { _start: start, _end: end } = this\n\t\treturn `${first ? `M${start.toFixed()}` : ``} L${end.toFixed()}`\n\t}\n}\n"],
"mappings": "AAAA,SAAS,WAAoB;AAC7B,SAAS,kBAAkB;AAGpB,MAAM,eAAe,WAAW;AAAA,EAC9B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAER,YAAY,QAAkC;AAC7C,UAAM,EAAE,GAAG,QAAQ,UAAU,OAAO,UAAU,MAAM,CAAC;AACrD,UAAM,EAAE,OAAO,IAAI,IAAI;AAEvB,SAAK,SAAS;AACd,SAAK,OAAO;AAEZ,SAAK,KAAK,MAAM,MAAM,EAAE,IAAI,GAAG;AAC/B,SAAK,KAAK,KAAK,GAAG,MAAM,EAAE,IAAI;AAC9B,SAAK,MAAM,KAAK,GAAG,IAAI;AAAA,EACxB;AAAA,EAES,YAAY;AACpB,WAAO,KAAK,GAAG,IAAI;AAAA,EACpB;AAAA,EAES,cAAqB;AAC7B,WAAO,CAAC,KAAK,QAAQ,KAAK,IAAI;AAAA,EAC/B;AAAA,EAES,aAAa,OAAqB;AAC1C,UAAM,EAAE,QAAQ,OAAO,MAAM,KAAK,IAAI,GAAG,IAAI,GAAG,KAAK,EAAE,IAAI;AAC3D,QAAI,EAAE,IAAI,MAAM,EAAG,QAAO;AAC1B,QAAI,MAAM,EAAG,QAAO;AACpB,UAAM,IAAI,IAAI,IAAI,OAAO,KAAK,EAAE,IAAI,CAAC,IAAI;AACzC,UAAM,KAAK,MAAM,IAAI,EAAE,IAAI;AAC3B,QAAI,KAAK,KAAK,IAAI,MAAM,GAAG,IAAI,CAAC,EAAG,QAAO,MAAM,IAAI,IAAI,IAAI,QAAQ;AACpE,QAAI,KAAK,KAAK,IAAI,MAAM,GAAG,IAAI,CAAC,EAAG,QAAO,MAAM,IAAI,IAAI,IAAI,QAAQ;AACpE,UAAM,KAAK,MAAM,IAAI,EAAE,IAAI;AAC3B,QAAI,KAAK,KAAK,IAAI,MAAM,GAAG,IAAI,CAAC,EAAG,QAAO,MAAM,IAAI,IAAI,IAAI,QAAQ;AACpE,QAAI,KAAK,KAAK,IAAI,MAAM,GAAG,IAAI,CAAC,EAAG,QAAO,MAAM,IAAI,IAAI,IAAI,QAAQ;AACpE,WAAO,IAAI,IAAI,IAAI,EAAE;AAAA,EACtB;AAAA,EAEA,eAAe,QAAQ,MAAM;AAC5B,UAAM,EAAE,QAAQ,OAAO,MAAM,IAAI,IAAI;AACrC,WAAO,GAAG,QAAQ,IAAI,MAAM,QAAQ,CAAC,KAAK,EAAE,KAAK,IAAI,QAAQ,CAAC;AAAA,EAC/D;AACD;",
"names": []
}