Fix text decluttering when segment length is zero

This commit is contained in:
Maximilian Krög
2021-09-17 23:09:35 +02:00
parent 367d77d1dc
commit 4be657a28f

View File

@@ -54,7 +54,8 @@ export function drawTextOnPath(
advance(); advance();
} while (offset < end - stride && segmentM + segmentLength < startM); } while (offset < end - stride && segmentM + segmentLength < startM);
let interpolate = (startM - segmentM) / segmentLength; let interpolate =
segmentLength === 0 ? 0 : (startM - segmentM) / segmentLength;
const beginX = lerp(x1, x2, interpolate); const beginX = lerp(x1, x2, interpolate);
const beginY = lerp(y1, y2, interpolate); const beginY = lerp(y1, y2, interpolate);
@@ -64,7 +65,7 @@ export function drawTextOnPath(
while (offset < end - stride && segmentM + segmentLength < endM) { while (offset < end - stride && segmentM + segmentLength < endM) {
advance(); advance();
} }
interpolate = (endM - segmentM) / segmentLength; interpolate = segmentLength === 0 ? 0 : (endM - segmentM) / segmentLength;
const endX = lerp(x1, x2, interpolate); const endX = lerp(x1, x2, interpolate);
const endY = lerp(y1, y2, interpolate); const endY = lerp(y1, y2, interpolate);
@@ -88,11 +89,12 @@ export function drawTextOnPath(
x2 = flatCoordinates[offset]; x2 = flatCoordinates[offset];
y2 = flatCoordinates[offset + 1]; y2 = flatCoordinates[offset + 1];
let previousAngle;
// All on the same segment // All on the same segment
if (singleSegment) { if (singleSegment) {
advance(); advance();
let previousAngle = Math.atan2(y2 - y1, x2 - x1); previousAngle = Math.atan2(y2 - y1, x2 - x1);
if (reverse) { if (reverse) {
previousAngle += previousAngle > 0 ? -PI : PI; previousAngle += previousAngle > 0 ? -PI : PI;
} }
@@ -102,7 +104,6 @@ export function drawTextOnPath(
return result; return result;
} }
let previousAngle;
for (let i = 0, ii = text.length; i < ii; ) { for (let i = 0, ii = text.length; i < ii; ) {
advance(); advance();
let angle = Math.atan2(y2 - y1, x2 - x1); let angle = Math.atan2(y2 - y1, x2 - x1);
@@ -137,7 +138,10 @@ export function drawTextOnPath(
const chars = reverse const chars = reverse
? text.substring(ii - iStart, ii - i) ? text.substring(ii - iStart, ii - i)
: text.substring(iStart, i); : text.substring(iStart, i);
interpolate = (startM + charLength / 2 - segmentM) / segmentLength; interpolate =
segmentLength === 0
? 0
: (startM + charLength / 2 - segmentM) / segmentLength;
const x = lerp(x1, x2, interpolate); const x = lerp(x1, x2, interpolate);
const y = lerp(y1, y2, interpolate); const y = lerp(y1, y2, interpolate);
result.push([x, y, charLength / 2, angle, chars]); result.push([x, y, charLength / 2, angle, chars]);