diff --git a/packages/element/src/elbowArrow.ts b/packages/element/src/elbowArrow.ts index b9c602b9b..74e64fa64 100644 --- a/packages/element/src/elbowArrow.ts +++ b/packages/element/src/elbowArrow.ts @@ -107,10 +107,7 @@ type ElbowArrowData = { hoveredEndElement: ExcalidrawBindableElement | null; }; -const calculateDedupTreshhold = ( - a: Point, - b: Point, -) => 1 + pointDistance(a, b) / 100; +const DEDUP_TRESHOLD = 1; const calculatePadding = ( aabb: Bounds, @@ -120,8 +117,8 @@ const calculatePadding = ( const width = aabb[2] - aabb[0]; const height = aabb[3] - aabb[1]; const size = Math.max(width, height); - - return size > 75 + // || compareHeading(startHeading, flipHeading(endHeading)) + return size > 55 ? 40 : Math.min( Math.max( @@ -210,11 +207,7 @@ const handleSegmentRenormalization = ( if ( // Remove segments that are too short - pointDistance(points[i - 2], points[i - 1]) < - calculateDedupTreshhold( - points[i - 3] ?? points[i - 3], - points[i] ?? points[i - 1], - ) + pointDistance(points[i - 2], points[i - 1]) < DEDUP_TRESHOLD ) { const prevPrevSegmentIdx = nextFixedSegments?.findIndex((segment) => segment.index === i - 2) ?? @@ -2235,10 +2228,7 @@ const removeElbowArrowShortSegments = ( const prev = points[idx - 1]; const prevDist = pointDistance(prev, p); - return ( - prevDist > - calculateDedupTreshhold(points[idx - 2] ?? prev, points[idx + 1] ?? p) - ); + return prevDist > DEDUP_TRESHOLD; }); } @@ -2343,16 +2333,13 @@ const gridAddressesEqual = (a: GridAddress, b: GridAddress): boolean => export const validateElbowPoints =

( points: readonly P[], - tolerance?: number, + tolerance: number = DEDUP_TRESHOLD, ) => points .slice(1) - .map((p, i) => { - const t = - tolerance ?? - calculateDedupTreshhold(points[i - 1] ?? points[i], points[i + 2] ?? p); - return ( - Math.abs(p[0] - points[i][0]) < t || Math.abs(p[1] - points[i][1]) < t - ); - }) + .map( + (p, i) => + Math.abs(p[0] - points[i][0]) < tolerance || + Math.abs(p[1] - points[i][1]) < tolerance, + ) .every(Boolean); diff --git a/packages/element/tests/elbowArrow.test.tsx b/packages/element/tests/elbowArrow.test.tsx index 1c3d8cf6e..bb49d063b 100644 --- a/packages/element/tests/elbowArrow.test.tsx +++ b/packages/element/tests/elbowArrow.test.tsx @@ -294,11 +294,11 @@ describe("elbow arrow ui", () => { ) as HTMLInputElement; UI.updateInput(inputAngle, String("40")); - expect(arrow.points).toCloselyEqualPoints([ + expect(arrow.points.map((point) => point.map(Math.round))).toEqual([ [0, 0], - [34.9292, 0], - [34.48768, 164.6246], - [104.333, 164.6246], + [34, 0], + [34, 165], + [104, 165], ]); });