У вас есть текстовая ограничивающая коробка через getBBox()
. К сожалению, как вы, возможно, уже обнаружили, это не плотная ограничивающая рамка глифов. Он включает в себя полные высоты сценария и высоты возвышения шрифта. Однако он должен получить разумное приближение.
Следующий шаг - определить, куда путь попадает в ограничивающий прямоугольник. Получение идеального математического решения очень сложно, но есть итеративные подходы, которые намного проще и дают хорошие результаты.
Элементы пути имеют couple of DOM functions, которые могут помочь: getTotalLength()
и getPointAtLength()
. Вы можете перемещаться по пути от 0 до длины пути, вызывая getPointAtLength()
, пока возвращаемая точка не окажется внутри текстового поля bbox.
Если вы хотите уточнить, какой персонаж в тексте касается линии, есть DOM functions on SVG text elements, который должен быть полезен. Например, `getExtentOfChar (n) возвращает границы n-го символа в тексте.
Когда вы говорите «где они пересекаются», что вы имеете в виду? Вы имеете в виду, к каким персонажам прикасается линия, или точным местам, когда линия касается каких-либо контуров глифа, или просто просто касаются ли они друг друга? –
, где они касаются друг друга вообще - или, чтобы упростить, когда ограничивающая рамка текста касается линии. – praks5432