Как проблема была решена:
Как уже упоминалось в комментарии, я увидел, что не было прямых линий даже в фрагментах, которые должны иметь прямые линии.Поэтому я проверил координаты и понял, что есть прямые линии (пути с ручкой x1 / y2 и x2 / y2 по координате 0/0), если я просто подтолкну их вперед.
Например:
x y x1 y1 x2 y2
1: 148.29 92.125 0 0 -1.25 -3.5
2: 140 85 3.93 1.084 0 0
3: 139.99 74.16 0 0 12.95 2.02
4: 159.55 92.1 -1.238 -8.283 0 0
Поэтому мне пришлось изменить цикл for, чтобы фактически смешать дескрипторы последней точки с дескрипторами из реальной точки.
Так что в этом примере Nr.1 и номер3 получит x1: 0, y1: 0 // x2: 0, y2: 0
В моем цикле for я беру x1 / y1 из последнего сегмента:
// handle In
var x1 = fragmentPathObj.segments[i2-1].handleOut.x * letterScale;
var y1 = fragmentPathObj.segments[i2-1].handleOut.y*-1 * letterScale;
// handle Out
var x2 = fragmentPathObj.segments[i2].handleIn.x * letterScale;
var y2 = fragmentPathObj.segments[i2].handleIn.y*-1 * letterScale;
Если яДля этого я могу проверить наличие прямых линий с помощью:
if(x1==0 && y1==0 && x2 == 0 && y2 == 0) {
glyphTempPath.lineTo(x, y);
}
и нарисовать кривые при наличии маркеров:
var lastX = fragmentPathObj.segments[i2-1].point.x * letterScale - letterPosCorrectionX;
var lastY = fragmentPathObj.segments[i2-1].point.y*-1 * letterScale - letterPosCorrectionY;
glyphTempPath.curveTo(x1+lastX, y1+lastY, x2+x, y2+y, x,y);
lastX / lastY: поскольку x1 / y1 идет от последнегосегмент, мне нужно рассчитать положение для маркеров также с x / y последней точки.
Масштаб буквы: используется для масштабирования буквы и рассчитывается путем деления значения advanceWidth глифа на scaledAdvanceWith
y * -1: используется для решения проблемы переворачивания.
letterPosCorrectionX и letterPosCorrectionY;являются поправками для позиции (поэтому они перемещаются в правильную позицию в шрифте.)
Может быть, это может помочь кому-то сэкономить время:)