diff options
author | bobzel <zzzman@gmail.com> | 2024-10-09 21:55:06 -0400 |
---|---|---|
committer | bobzel <zzzman@gmail.com> | 2024-10-09 21:55:06 -0400 |
commit | 4864f06dcc6eac232bbb9346c68f831fd6420dae (patch) | |
tree | 36354417e952c979ceb03e8370f39b6223b964f3 /src/fields/InkField.ts | |
parent | 139a3cb0b3b081c270187e9b4ca281d04ca923bf (diff) | |
parent | b9fda86731a01ebfc3f21ebdd4eaf43a1c9eccc6 (diff) |
Merge branch 'master' into ajs-before-executable
Diffstat (limited to 'src/fields/InkField.ts')
-rw-r--r-- | src/fields/InkField.ts | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/src/fields/InkField.ts b/src/fields/InkField.ts index 32abf0076..17b99b033 100644 --- a/src/fields/InkField.ts +++ b/src/fields/InkField.ts @@ -14,9 +14,11 @@ export enum InkTool { StrokeEraser = 'strokeeraser', SegmentEraser = 'segmenteraser', RadiusEraser = 'radiuseraser', + Eraser = 'eraser', // not a real tool, but a class of tools Stamp = 'stamp', Write = 'write', PresentationPin = 'presentationpin', + SmartDraw = 'smartdraw', } export type Segment = Array<Bezier>; @@ -102,6 +104,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); |