UNPKG

@tldraw/editor

Version:

A tiny little drawing app (editor).

8 lines (7 loc) 3.26 kB
{ "version": 3, "sources": ["../../../../src/lib/primitives/geometry/Circle2d.ts"], "sourcesContent": ["import { Box } from '../Box'\nimport { Vec } from '../Vec'\nimport { intersectLineSegmentCircle } from '../intersect'\nimport { PI2, getPointOnCircle } from '../utils'\nimport { Geometry2d, Geometry2dOptions } from './Geometry2d'\nimport { getVerticesCountForLength } from './geometry-constants'\n\n/** @public */\nexport class Circle2d extends Geometry2d {\n\t_center: Vec\n\tradius: number\n\tx: number\n\ty: number\n\n\tconstructor(\n\t\tpublic config: Omit<Geometry2dOptions, 'isClosed'> & {\n\t\t\tx?: number\n\t\t\ty?: number\n\t\t\tradius: number\n\t\t\tisFilled: boolean\n\t\t}\n\t) {\n\t\tsuper({ isClosed: true, ...config })\n\t\tconst { x = 0, y = 0, radius } = config\n\t\tthis.x = x\n\t\tthis.y = y\n\t\tthis._center = new Vec(radius + x, radius + y)\n\t\tthis.radius = radius\n\t}\n\n\tgetBounds() {\n\t\treturn new Box(this.x, this.y, this.radius * 2, this.radius * 2)\n\t}\n\n\tgetVertices(): Vec[] {\n\t\tconst { _center, radius } = this\n\t\tconst perimeter = PI2 * radius\n\t\tconst vertices: Vec[] = []\n\t\tfor (let i = 0, n = getVerticesCountForLength(perimeter); i < n; i++) {\n\t\t\tconst angle = (i / n) * PI2\n\t\t\tvertices.push(getPointOnCircle(_center, radius, angle))\n\t\t}\n\t\treturn vertices\n\t}\n\n\tnearestPoint(point: Vec): Vec {\n\t\tconst { _center, radius } = this\n\t\tif (_center.equals(point)) return Vec.AddXY(_center, radius, 0)\n\t\treturn _center.clone().add(point.clone().sub(_center).uni().mul(radius))\n\t}\n\n\thitTestLineSegment(A: Vec, B: Vec, distance = 0): boolean {\n\t\tconst { _center, radius } = this\n\t\treturn intersectLineSegmentCircle(A, B, _center, radius + distance) !== null\n\t}\n\n\tgetSvgPathData(): string {\n\t\tconst { _center, radius } = this\n\t\treturn `M${_center.x + radius},${_center.y} a${radius},${radius} 0 1,0 ${radius * 2},0a${radius},${radius} 0 1,0 -${radius * 2},0`\n\t}\n}\n"], "mappings": "AAAA,SAAS,WAAW;AACpB,SAAS,WAAW;AACpB,SAAS,kCAAkC;AAC3C,SAAS,KAAK,wBAAwB;AACtC,SAAS,kBAAqC;AAC9C,SAAS,iCAAiC;AAGnC,MAAM,iBAAiB,WAAW;AAAA,EAMxC,YACQ,QAMN;AACD,UAAM,EAAE,UAAU,MAAM,GAAG,OAAO,CAAC;AAP5B;AAQP,UAAM,EAAE,IAAI,GAAG,IAAI,GAAG,OAAO,IAAI;AACjC,SAAK,IAAI;AACT,SAAK,IAAI;AACT,SAAK,UAAU,IAAI,IAAI,SAAS,GAAG,SAAS,CAAC;AAC7C,SAAK,SAAS;AAAA,EACf;AAAA,EAnBA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAkBA,YAAY;AACX,WAAO,IAAI,IAAI,KAAK,GAAG,KAAK,GAAG,KAAK,SAAS,GAAG,KAAK,SAAS,CAAC;AAAA,EAChE;AAAA,EAEA,cAAqB;AACpB,UAAM,EAAE,SAAS,OAAO,IAAI;AAC5B,UAAM,YAAY,MAAM;AACxB,UAAM,WAAkB,CAAC;AACzB,aAAS,IAAI,GAAG,IAAI,0BAA0B,SAAS,GAAG,IAAI,GAAG,KAAK;AACrE,YAAM,QAAS,IAAI,IAAK;AACxB,eAAS,KAAK,iBAAiB,SAAS,QAAQ,KAAK,CAAC;AAAA,IACvD;AACA,WAAO;AAAA,EACR;AAAA,EAEA,aAAa,OAAiB;AAC7B,UAAM,EAAE,SAAS,OAAO,IAAI;AAC5B,QAAI,QAAQ,OAAO,KAAK,EAAG,QAAO,IAAI,MAAM,SAAS,QAAQ,CAAC;AAC9D,WAAO,QAAQ,MAAM,EAAE,IAAI,MAAM,MAAM,EAAE,IAAI,OAAO,EAAE,IAAI,EAAE,IAAI,MAAM,CAAC;AAAA,EACxE;AAAA,EAEA,mBAAmB,GAAQ,GAAQ,WAAW,GAAY;AACzD,UAAM,EAAE,SAAS,OAAO,IAAI;AAC5B,WAAO,2BAA2B,GAAG,GAAG,SAAS,SAAS,QAAQ,MAAM;AAAA,EACzE;AAAA,EAEA,iBAAyB;AACxB,UAAM,EAAE,SAAS,OAAO,IAAI;AAC5B,WAAO,IAAI,QAAQ,IAAI,MAAM,IAAI,QAAQ,CAAC,KAAK,MAAM,IAAI,MAAM,UAAU,SAAS,CAAC,MAAM,MAAM,IAAI,MAAM,WAAW,SAAS,CAAC;AAAA,EAC/H;AACD;", "names": [] }