diff options
| author | bobzel <zzzman@gmail.com> | 2024-10-01 09:04:41 -0400 |
|---|---|---|
| committer | bobzel <zzzman@gmail.com> | 2024-10-01 09:04:41 -0400 |
| commit | 2e001d89e2490f278764135f02d9191b5d704dbd (patch) | |
| tree | 75c3ba5c7983d97e49e06f4fa2702abbebe9b6f7 /src/fields | |
| parent | 6d0cec80757dcdb07434d7788dd2eb97c2ce4b7c (diff) | |
| parent | fa17eee93e43e2a06565045557e01a3687fb2505 (diff) | |
merged with master
Diffstat (limited to 'src/fields')
| -rw-r--r-- | src/fields/InkField.ts | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/src/fields/InkField.ts b/src/fields/InkField.ts index 123d32301..aa3d73e3e 100644 --- a/src/fields/InkField.ts +++ b/src/fields/InkField.ts @@ -103,6 +103,26 @@ export class InkField extends ObjectField { const top = Math.min(...ys); return { right, left, bottom, top, width: right - left, height: bottom - top }; } + + // for some reason bezier.js doesn't handle the case of intersecting a linear curve, so we wrap the intersection + // call in a test for linearity + public static bintersects(curve: Bezier, otherCurve: Bezier) { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + if ((curve as any)._linear) { + // bezier.js doesn't intersect properly if the curve is actually a line -- so get intersect other curve against this line, then figure out the t coordinates of the intersection on this line + const intersections = otherCurve.lineIntersects({ p1: curve.points[0], p2: curve.points[3] }); + if (intersections.length) { + const intPt = otherCurve.get(intersections[0]); + const intT = curve.project(intPt).t; + return intT ? [intT] : []; + } + } + // eslint-disable-next-line @typescript-eslint/no-explicit-any + if ((otherCurve as any)._linear) { + return curve.lineIntersects({ p1: otherCurve.points[0], p2: otherCurve.points[3] }); + } + return curve.intersects(otherCurve); + } } ScriptingGlobals.add('InkField', InkField); |
