Как создать вогнутый многоугольник из одной буквы, используя freetype? - PullRequest
0 голосов
/ 10 января 2020

Я хотел бы преобразовать одну букву в вогнутый многоугольник, на котором я позже смогу запустить алгоритм триангуляции, чтобы представить его в виде кратных выпуклых многоугольников. Однако я просто понятия не имею, как мне достичь своей цели.

Это мой нынешний подход к решению проблемы:

  1. Найти контрольные точки (векторы) внешнего контур

enter image description here

Создайте путь, соединив эти внешние контрольные точки друг с другом и сформировав из него вогнутый многоугольник

enter image description here

Запустите на нем алгоритм триангуляции, чтобы разбить вогнутый многоугольник на множество меньших выпуклых многоугольников (треугольников)

enter image description here

Точки, возвращаемые приведенный ниже фрагмент кода фактически является контрольными точками, необходимыми для алгоритма интерполяции bezier для рисования буквы. Таким образом, они не представляют векторы и в основном находятся за пределами формы (из-за характера алгоритма).

face = Face("C:\\Windows\\Fonts\\Arial.ttf")
face.set_char_size( 48*64 )
face.load_char('A')
slot = face.glyph

outline = slot.outline
points = numpy.array(outline.points, dtype=[('x',float), ('y',float)])
x, y = points['x'], points['y']

Приведенный выше фрагмент взят из примера freetypes glyph-vector.py.

Итак, первое, с чем я борюсь, это получение набора точек / векторов, которые представляют внешний контур буквы. Как я могу создать / прочитать их с помощью freetype?

Обратите внимание: мне не нужно использовать freetype, поэтому любая другая возможность / библиотека (C ++, python) также подойдет. Любая помощь в этом очень ценится!

...