@tldraw/editor
Version:
tldraw infinite canvas SDK (editor).
8 lines (7 loc) • 27.4 kB
Source Map (JSON)
{
"version": 3,
"sources": ["../../../src/lib/primitives/Vec.ts"],
"sourcesContent": ["import { VecModel } from '@tldraw/tlschema'\nimport { EASINGS } from './easings'\nimport { clamp, toFixed } from './utils'\n\n/** @public */\nexport type VecLike = Vec | VecModel\n\n/** @public */\nexport class Vec {\n\tconstructor(\n\t\tpublic x = 0,\n\t\tpublic y = 0,\n\t\tpublic z = 1\n\t) {}\n\n\t// eslint-disable-next-line no-restricted-syntax\n\tget pressure() {\n\t\treturn this.z\n\t}\n\n\tset(x = this.x, y = this.y, z = this.z) {\n\t\tthis.x = x\n\t\tthis.y = y\n\t\tthis.z = z\n\t\treturn this\n\t}\n\n\tsetTo({ x = 0, y = 0, z = 1 }: VecLike) {\n\t\tthis.x = x\n\t\tthis.y = y\n\t\tthis.z = z\n\t\treturn this\n\t}\n\n\trot(r: number) {\n\t\tif (r === 0) return this\n\t\tconst { x, y } = this\n\t\tconst s = Math.sin(r)\n\t\tconst c = Math.cos(r)\n\t\tthis.x = x * c - y * s\n\t\tthis.y = x * s + y * c\n\t\treturn this\n\t}\n\n\trotWith(C: VecLike, r: number) {\n\t\tif (r === 0) return this\n\t\tconst x = this.x - C.x\n\t\tconst y = this.y - C.y\n\t\tconst s = Math.sin(r)\n\t\tconst c = Math.cos(r)\n\t\tthis.x = C.x + (x * c - y * s)\n\t\tthis.y = C.y + (x * s + y * c)\n\t\treturn this\n\t}\n\n\tclone(): Vec {\n\t\tconst { x, y, z } = this\n\t\treturn new Vec(x, y, z)\n\t}\n\n\tsub(V: VecLike) {\n\t\tthis.x -= V.x\n\t\tthis.y -= V.y\n\t\treturn this\n\t}\n\n\tsubXY(x: number, y: number) {\n\t\tthis.x -= x\n\t\tthis.y -= y\n\t\treturn this\n\t}\n\n\tsubScalar(n: number) {\n\t\tthis.x -= n\n\t\tthis.y -= n\n\t\t// this.z -= n\n\n\t\treturn this\n\t}\n\n\tadd(V: VecLike) {\n\t\tthis.x += V.x\n\t\tthis.y += V.y\n\t\treturn this\n\t}\n\n\taddXY(x: number, y: number) {\n\t\tthis.x += x\n\t\tthis.y += y\n\t\treturn this\n\t}\n\n\taddScalar(n: number) {\n\t\tthis.x += n\n\t\tthis.y += n\n\t\t// this.z += n\n\n\t\treturn this\n\t}\n\n\tclamp(min: number, max?: number) {\n\t\tthis.x = Math.max(this.x, min)\n\t\tthis.y = Math.max(this.y, min)\n\t\tif (max !== undefined) {\n\t\t\tthis.x = Math.min(this.x, max)\n\t\t\tthis.y = Math.min(this.y, max)\n\t\t}\n\t\treturn this\n\t}\n\n\tdiv(t: number) {\n\t\tthis.x /= t\n\t\tthis.y /= t\n\t\t// this.z /= t\n\t\treturn this\n\t}\n\n\tdivV(V: VecLike) {\n\t\tthis.x /= V.x\n\t\tthis.y /= V.y\n\t\t// this.z /= V.z\n\t\treturn this\n\t}\n\n\tmul(t: number) {\n\t\tthis.x *= t\n\t\tthis.y *= t\n\t\t// this.z *= t\n\t\treturn this\n\t}\n\n\tmulV(V: VecLike) {\n\t\tthis.x *= V.x\n\t\tthis.y *= V.y\n\t\t// this.z *= V.z\n\t\treturn this\n\t}\n\n\tabs() {\n\t\tthis.x = Math.abs(this.x)\n\t\tthis.y = Math.abs(this.y)\n\t\treturn this\n\t}\n\n\tnudge(B: VecLike, distance: number) {\n\t\tconst tan = Vec.Tan(B, this)\n\t\treturn this.add(tan.mul(distance))\n\t}\n\n\tneg() {\n\t\tthis.x *= -1\n\t\tthis.y *= -1\n\t\t// this.z *= -1\n\t\treturn this\n\t}\n\n\tcross(V: VecLike) {\n\t\tthis.x = this.y * V.z! - this.z * V.y\n\t\tthis.y = this.z * V.x - this.x * V.z!\n\t\t// this.z = this.x * V.y - this.y * V.x\n\t\treturn this\n\t}\n\n\tdpr(V: VecLike): number {\n\t\treturn Vec.Dpr(this, V)\n\t}\n\n\tcpr(V: VecLike) {\n\t\treturn Vec.Cpr(this, V)\n\t}\n\n\tlen2(): number {\n\t\treturn Vec.Len2(this)\n\t}\n\n\tlen(): number {\n\t\treturn Vec.Len(this)\n\t}\n\n\tpry(V: VecLike): number {\n\t\treturn Vec.Pry(this, V)\n\t}\n\n\tper() {\n\t\tconst { x, y } = this\n\t\tthis.x = y\n\t\tthis.y = -x\n\t\treturn this\n\t}\n\n\tuni() {\n\t\tconst l = this.len()\n\t\tif (l === 0) return this\n\t\tthis.x /= l\n\t\tthis.y /= l\n\t\treturn this\n\t}\n\n\ttan(V: VecLike): Vec {\n\t\treturn this.sub(V).uni()\n\t}\n\n\tdist(V: VecLike): number {\n\t\treturn Vec.Dist(this, V)\n\t}\n\n\tdistanceToLineSegment(A: VecLike, B: VecLike): number {\n\t\treturn Vec.DistanceToLineSegment(A, B, this)\n\t}\n\n\tslope(B: VecLike): number {\n\t\treturn Vec.Slope(this, B)\n\t}\n\n\tsnapToGrid(gridSize: number) {\n\t\tthis.x = Math.round(this.x / gridSize) * gridSize\n\t\tthis.y = Math.round(this.y / gridSize) * gridSize\n\t\treturn this\n\t}\n\n\tangle(B: VecLike): number {\n\t\treturn Vec.Angle(this, B)\n\t}\n\n\ttoAngle() {\n\t\treturn Vec.ToAngle(this)\n\t}\n\n\tlrp(B: VecLike, t: number): Vec {\n\t\tthis.x = this.x + (B.x - this.x) * t\n\t\tthis.y = this.y + (B.y - this.y) * t\n\t\treturn this\n\t}\n\n\tequals(B: VecLike) {\n\t\treturn Vec.Equals(this, B)\n\t}\n\n\tequalsXY(x: number, y: number) {\n\t\treturn Vec.EqualsXY(this, x, y)\n\t}\n\n\t/** @deprecated use `uni` instead */\n\tnorm() {\n\t\treturn this.uni()\n\t}\n\n\ttoFixed() {\n\t\tthis.x = toFixed(this.x)\n\t\tthis.y = toFixed(this.y)\n\t\treturn this\n\t}\n\n\ttoString() {\n\t\treturn Vec.ToString(Vec.ToFixed(this))\n\t}\n\n\ttoJson(): VecModel {\n\t\treturn Vec.ToJson(this)\n\t}\n\n\ttoArray(): number[] {\n\t\treturn Vec.ToArray(this)\n\t}\n\n\tstatic Add(A: VecLike, B: VecLike): Vec {\n\t\treturn new Vec(A.x + B.x, A.y + B.y)\n\t}\n\n\tstatic AddXY(A: VecLike, x: number, y: number): Vec {\n\t\treturn new Vec(A.x + x, A.y + y)\n\t}\n\n\tstatic Sub(A: VecLike, B: VecLike): Vec {\n\t\treturn new Vec(A.x - B.x, A.y - B.y)\n\t}\n\n\tstatic SubXY(A: VecLike, x: number, y: number): Vec {\n\t\treturn new Vec(A.x - x, A.y - y)\n\t}\n\n\tstatic AddScalar(A: VecLike, n: number): Vec {\n\t\treturn new Vec(A.x + n, A.y + n)\n\t}\n\n\tstatic SubScalar(A: VecLike, n: number): Vec {\n\t\treturn new Vec(A.x - n, A.y - n)\n\t}\n\n\tstatic Div(A: VecLike, t: number): Vec {\n\t\treturn new Vec(A.x / t, A.y / t)\n\t}\n\n\tstatic Mul(A: VecLike, t: number): Vec {\n\t\treturn new Vec(A.x * t, A.y * t)\n\t}\n\n\tstatic DivV(A: VecLike, B: VecLike): Vec {\n\t\treturn new Vec(A.x / B.x, A.y / B.y)\n\t}\n\n\tstatic MulV(A: VecLike, B: VecLike): Vec {\n\t\treturn new Vec(A.x * B.x, A.y * B.y)\n\t}\n\n\tstatic Neg(A: VecLike): Vec {\n\t\treturn new Vec(-A.x, -A.y)\n\t}\n\n\t/**\n\t * Get the perpendicular vector to A.\n\t */\n\tstatic Per(A: VecLike): Vec {\n\t\treturn new Vec(A.y, -A.x)\n\t}\n\n\tstatic Abs(A: VecLike): Vec {\n\t\treturn new Vec(Math.abs(A.x), Math.abs(A.y))\n\t}\n\n\t// Get the distance between two points.\n\tstatic Dist(A: VecLike, B: VecLike): number {\n\t\treturn ((A.y - B.y) ** 2 + (A.x - B.x) ** 2) ** 0.5\n\t}\n\n\t// Get the Manhattan distance between two points.\n\tstatic ManhattanDist(A: VecLike, B: VecLike): number {\n\t\treturn Math.abs(A.x - B.x) + Math.abs(A.y - B.y)\n\t}\n\n\t// Get whether a distance between two points is less than a number. This is faster to calulate than using `Vec.Dist(a, b) < n`.\n\tstatic DistMin(A: VecLike, B: VecLike, n: number): boolean {\n\t\treturn (A.x - B.x) * (A.x - B.x) + (A.y - B.y) * (A.y - B.y) < n ** 2\n\t}\n\n\t// Get the squared distance between two points. This is faster to calculate (no square root) so useful for \"minimum distance\" checks where the actual measurement does not matter.\n\tstatic Dist2(A: VecLike, B: VecLike): number {\n\t\treturn (A.x - B.x) * (A.x - B.x) + (A.y - B.y) * (A.y - B.y)\n\t}\n\n\t/**\n\t * Dot product of two vectors which is used to calculate the angle between them.\n\t */\n\tstatic Dpr(A: VecLike, B: VecLike): number {\n\t\treturn A.x * B.x + A.y * B.y\n\t}\n\n\tstatic Cross(A: VecLike, V: VecLike) {\n\t\treturn new Vec(\n\t\t\tA.y * V.z! - A.z! * V.y,\n\t\t\tA.z! * V.x - A.x * V.z!\n\t\t\t// A.z = A.x * V.y - A.y * V.x\n\t\t)\n\t}\n\n\t/**\n\t * Cross product of two vectors which is used to calculate the area of a parallelogram.\n\t */\n\tstatic Cpr(A: VecLike, B: VecLike) {\n\t\treturn A.x * B.y - B.x * A.y\n\t}\n\n\tstatic Len2(A: VecLike): number {\n\t\treturn A.x * A.x + A.y * A.y\n\t}\n\n\tstatic Len(A: VecLike): number {\n\t\treturn (A.x * A.x + A.y * A.y) ** 0.5\n\t}\n\n\t/**\n\t * Get the projection of A onto B.\n\t */\n\tstatic Pry(A: VecLike, B: VecLike): number {\n\t\treturn Vec.Dpr(A, B) / Vec.Len(B)\n\t}\n\n\t/**\n\t * Get the unit vector of A.\n\t */\n\tstatic Uni(A: VecLike) {\n\t\tconst l = Vec.Len(A)\n\t\treturn new Vec(l === 0 ? 0 : A.x / l, l === 0 ? 0 : A.y / l)\n\t}\n\n\tstatic Tan(A: VecLike, B: VecLike): Vec {\n\t\treturn Vec.Uni(Vec.Sub(A, B))\n\t}\n\n\tstatic Min(A: VecLike, B: VecLike): Vec {\n\t\treturn new Vec(Math.min(A.x, B.x), Math.min(A.y, B.y))\n\t}\n\n\tstatic Max(A: VecLike, B: VecLike): Vec {\n\t\treturn new Vec(Math.max(A.x, B.x), Math.max(A.y, B.y))\n\t}\n\n\tstatic From({ x, y, z = 1 }: VecModel) {\n\t\treturn new Vec(x, y, z)\n\t}\n\n\tstatic FromArray(v: number[]): Vec {\n\t\treturn new Vec(v[0], v[1])\n\t}\n\n\tstatic Rot(A: VecLike, r = 0): Vec {\n\t\tconst s = Math.sin(r)\n\t\tconst c = Math.cos(r)\n\t\treturn new Vec(A.x * c - A.y * s, A.x * s + A.y * c)\n\t}\n\n\tstatic RotWith(A: VecLike, C: VecLike, r: number): Vec {\n\t\tconst x = A.x - C.x\n\t\tconst y = A.y - C.y\n\t\tconst s = Math.sin(r)\n\t\tconst c = Math.cos(r)\n\t\treturn new Vec(C.x + (x * c - y * s), C.y + (x * s + y * c))\n\t}\n\n\t/**\n\t * Get the nearest point on a line with a known unit vector that passes through point A\n\t *\n\t * ```ts\n\t * Vec.nearestPointOnLineThroughPoint(A, u, Point)\n\t * ```\n\t *\n\t * @param A - Any point on the line\n\t * @param u - The unit vector for the line.\n\t * @param P - A point not on the line to test.\n\t */\n\tstatic NearestPointOnLineThroughPoint(A: VecLike, u: VecLike, P: VecLike): Vec {\n\t\treturn Vec.Mul(u, Vec.Sub(P, A).pry(u)).add(A)\n\t}\n\n\tstatic NearestPointOnLineSegment(A: VecLike, B: VecLike, P: VecLike, clamp = true): Vec {\n\t\tif (Vec.Equals(A, P)) return Vec.From(P)\n\t\tif (Vec.Equals(B, P)) return Vec.From(P)\n\n\t\tconst u = Vec.Tan(B, A)\n\t\tconst C = Vec.Add(A, Vec.Mul(u, Vec.Sub(P, A).pry(u)))\n\n\t\tif (clamp) {\n\t\t\tif (C.x < Math.min(A.x, B.x)) return Vec.Cast(A.x < B.x ? A : B)\n\t\t\tif (C.x > Math.max(A.x, B.x)) return Vec.Cast(A.x > B.x ? A : B)\n\t\t\tif (C.y < Math.min(A.y, B.y)) return Vec.Cast(A.y < B.y ? A : B)\n\t\t\tif (C.y > Math.max(A.y, B.y)) return Vec.Cast(A.y > B.y ? A : B)\n\t\t}\n\n\t\treturn C\n\t}\n\n\tstatic DistanceToLineThroughPoint(A: VecLike, u: VecLike, P: VecLike): number {\n\t\treturn Vec.Dist(P, Vec.NearestPointOnLineThroughPoint(A, u, P))\n\t}\n\n\tstatic DistanceToLineSegment(A: VecLike, B: VecLike, P: VecLike, clamp = true): number {\n\t\treturn Vec.Dist(P, Vec.NearestPointOnLineSegment(A, B, P, clamp))\n\t}\n\n\tstatic Snap(A: VecLike, step = 1) {\n\t\treturn new Vec(Math.round(A.x / step) * step, Math.round(A.y / step) * step)\n\t}\n\n\tstatic Cast(A: VecLike): Vec {\n\t\tif (A instanceof Vec) return A\n\t\treturn Vec.From(A)\n\t}\n\n\tstatic Slope(A: VecLike, B: VecLike): number {\n\t\tif (A.x === B.y) return NaN\n\t\treturn (A.y - B.y) / (A.x - B.x)\n\t}\n\n\tstatic IsNaN(A: VecLike): boolean {\n\t\treturn isNaN(A.x) || isNaN(A.y)\n\t}\n\n\t/**\n\t * Get the angle from position A to position B.\n\t */\n\tstatic Angle(A: VecLike, B: VecLike): number {\n\t\treturn Math.atan2(B.y - A.y, B.x - A.x)\n\t}\n\n\t/**\n\t * Get the angle between vector A and vector B. This will return the smallest angle between the\n\t * two vectors, between -\u03C0 and \u03C0. The sign indicates direction of angle.\n\t */\n\tstatic AngleBetween(A: VecLike, B: VecLike): number {\n\t\tconst p = A.x * B.x + A.y * B.y\n\t\tconst n = Math.sqrt(\n\t\t\t(Math.pow(A.x, 2) + Math.pow(A.y, 2)) * (Math.pow(B.x, 2) + Math.pow(B.y, 2))\n\t\t)\n\t\tconst sign = A.x * B.y - A.y * B.x < 0 ? -1 : 1\n\t\tconst angle = sign * Math.acos(clamp(p / n, -1, 1))\n\n\t\treturn angle\n\t}\n\n\t/**\n\t * Linearly interpolate between two points.\n\t * @param A - The first point.\n\t * @param B - The second point.\n\t * @param t - The interpolation value between 0 and 1.\n\t * @returns The interpolated point.\n\t */\n\tstatic Lrp(A: VecLike, B: VecLike, t: number): Vec {\n\t\treturn Vec.Sub(B, A).mul(t).add(A)\n\t}\n\n\tstatic Med(A: VecLike, B: VecLike): Vec {\n\t\treturn new Vec((A.x + B.x) / 2, (A.y + B.y) / 2)\n\t}\n\n\tstatic Equals(A: VecLike, B: VecLike): boolean {\n\t\treturn Math.abs(A.x - B.x) < 0.0001 && Math.abs(A.y - B.y) < 0.0001\n\t}\n\n\tstatic EqualsXY(A: VecLike, x: number, y: number): boolean {\n\t\treturn A.x === x && A.y === y\n\t}\n\n\tstatic Clockwise(A: VecLike, B: VecLike, C: VecLike): boolean {\n\t\treturn (C.x - A.x) * (B.y - A.y) - (B.x - A.x) * (C.y - A.y) < 0\n\t}\n\n\tstatic Rescale(A: VecLike, n: number) {\n\t\tconst l = Vec.Len(A)\n\t\treturn new Vec((n * A.x) / l, (n * A.y) / l)\n\t}\n\n\tstatic ScaleWithOrigin(A: VecLike, scale: number, origin: VecLike) {\n\t\treturn Vec.Sub(A, origin).mul(scale).add(origin)\n\t}\n\n\tstatic ToFixed(A: VecLike) {\n\t\treturn new Vec(toFixed(A.x), toFixed(A.y))\n\t}\n\n\tstatic ToInt(A: VecLike) {\n\t\treturn new Vec(\n\t\t\tparseInt(A.x.toFixed(0)),\n\t\t\tparseInt(A.y.toFixed(0)),\n\t\t\tparseInt((A.z ?? 0).toFixed(0))\n\t\t)\n\t}\n\n\tstatic ToCss(A: VecLike) {\n\t\treturn `${A.x},${A.y}`\n\t}\n\n\tstatic Nudge(A: VecLike, B: VecLike, distance: number) {\n\t\treturn Vec.Add(A, Vec.Tan(B, A).mul(distance))\n\t}\n\n\tstatic ToString(A: VecLike) {\n\t\treturn `${A.x}, ${A.y}`\n\t}\n\n\tstatic ToAngle(A: VecLike) {\n\t\tlet r = Math.atan2(A.y, A.x)\n\t\tif (r < 0) r += Math.PI * 2\n\n\t\treturn r\n\t}\n\n\tstatic FromAngle(r: number, length = 1) {\n\t\treturn new Vec(Math.cos(r) * length, Math.sin(r) * length)\n\t}\n\n\tstatic ToArray(A: VecLike) {\n\t\treturn [A.x, A.y, A.z!]\n\t}\n\n\tstatic ToJson(A: VecLike) {\n\t\tconst { x, y, z } = A\n\t\treturn { x, y, z }\n\t}\n\n\tstatic Average(arr: VecLike[]) {\n\t\tconst len = arr.length\n\t\tconst avg = new Vec(0, 0)\n\t\tif (len === 0) {\n\t\t\treturn avg\n\t\t}\n\t\tfor (let i = 0; i < len; i++) {\n\t\t\tavg.add(arr[i])\n\t\t}\n\t\treturn avg.div(len)\n\t}\n\n\tstatic Clamp(A: Vec, min: number, max?: number) {\n\t\tif (max === undefined) {\n\t\t\treturn new Vec(Math.min(Math.max(A.x, min)), Math.min(Math.max(A.y, min)))\n\t\t}\n\n\t\treturn new Vec(Math.min(Math.max(A.x, min), max), Math.min(Math.max(A.y, min), max))\n\t}\n\n\t/**\n\t * Get an array of points (with simulated pressure) between two points.\n\t *\n\t * @param A - The first point.\n\t * @param B - The second point.\n\t * @param steps - The number of points to return.\n\t */\n\tstatic PointsBetween(A: VecModel, B: VecModel, steps = 6): Vec[] {\n\t\tconst results: Vec[] = []\n\n\t\tfor (let i = 0; i < steps; i++) {\n\t\t\tconst t = EASINGS.easeInQuad(i / (steps - 1))\n\t\t\tconst point = Vec.Lrp(A, B, t)\n\t\t\tpoint.z = Math.min(1, 0.5 + Math.abs(0.5 - ease(t)) * 0.65)\n\t\t\tresults.push(point)\n\t\t}\n\n\t\treturn results\n\t}\n\n\tstatic SnapToGrid(A: VecLike, gridSize = 8) {\n\t\treturn new Vec(Math.round(A.x / gridSize) * gridSize, Math.round(A.y / gridSize) * gridSize)\n\t}\n}\n\nconst ease = (t: number) => (t < 0.5 ? 2 * t * t : -1 + (4 - 2 * t) * t)\n"],
"mappings": "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",
"names": ["clamp"]
}