Table Of Contents
Tesselator¶
Новое в версии 1.9.0.


Предупреждение
Это экспериментально и может измениться до тех пор, пока это предупреждение присутствует. В данный момент поддерживается только TYPE_POLYGONS.
Tesselator - это библиотека для тесселирования многоугольников, основанная на libtess2. Он рендерит многоугольники с выпуклыми областями, сначала тесселируя их в выпуклые многоугольники. Он также поддерживает отверстия.
Использование¶
Сначала вам нужно создать объект Tesselator
и добавить контуры. Первый контур - это внешний контур вашей фигуры, а все последующие - это отверстия:
from kivy.graphics.tesselator import Tesselator
tess = Tesselator()
tess.add_contour([0, 0, 200, 0, 200, 200, 0, 200])
tess.add_contour([50, 50, 150, 50, 150, 150, 50, 150])
Затем вызовите метод Tesselator.tesselate()
для вычисления точек. Возможно, тесселятор не сможет работать. В этом случае он может вернуть False:
if not tess.tesselate():
print("Tesselator не работает :(")
return
После тесселяции у вас есть несколько способов итерации по результату. Лучший подход - использование Tesselator.meshes
для получения формата, который можно легко использовать в объекте Mesh
Kivy:
for vertices, indices in tess.meshes:
self.canvas.add(Mesh(
vertices=vertices,
indices=indices,
mode="triangle_fan"
))
Или вы можете получить "сырой" результат, содержащий только многоугольники и координаты x/y, с помощью Tesselator.vertices()
:
for vertices in tess.vertices:
print("получен многоугольник", vertices)
- class kivy.graphics.tesselator.Tesselator¶
Базовый класс:
builtins.object
Класс Tesselator. См. модуль для получения дополнительной информации о использовании.
- add_contour(points)¶
Добавить контур в тесселирователь. Это может быть:
список координат [x, y, x2, y2, …]
массив с плавающей запятой: array("f", [x, y, x2, y2, …])
любой буфер с плавающей запятой.
- element_count¶
Возвращает количество выпуклых многоугольников.
- meshes¶
Итерация по результату
tesselate()
для предоставления результата, который можно легко передать в объект Mesh Kivy.Это список: [[vertices, indices], [vertices, indices], …]. Вершины в формате [x, y, u, v, x2, y2, u2, v2].
Будьте осторожны, координаты u/v такие же, как x/y. Вы должны изменить их для настройки текстурного сопоставления, если это необходимо.
Вы можете создавать объекты Mesh следующим образом:
tess = Tesselator() # добавьте контуры здесь tess.tesselate() for vertices, indices in self.meshes: self.canvas.add(Mesh( vertices=vertices, indices=indices, mode="triangle_fan"))
- tesselate(int winding_rule=WINDING_ODD, int element_type=TYPE_POLYGONS, int polysize=65535) int ¶
Вычислить все контуры, добавленные с помощью
add_contour()
, и сгенерировать многоугольники.- Parameters
- winding_rule: enum
Правило намотки классифицирует область как внутреннюю, если ее число намоток принадлежит выбранной категории. Может быть одним из WINDING_ODD, WINDING_NONZERO, WINDING_POSITIVE, WINDING_NEGATIVE, WINDING_ABS_GEQ_TWO. По умолчанию WINDING_ODD.
- element_type: enum
Тип результата, можно генерировать многоугольники с помощью TYPE_POLYGONS или контуры с помощью TYPE_BOUNDARY_CONTOURS. По умолчанию TYPE_POLYGONS.
- Returns
1, если произошла тесселяция, 0 в противном случае.
- Return type
int
- vertex_count¶
Возвращает количество созданных вершин.
Это сырой результат, однако, так как Tesselator форматирует результат для вас с помощью
meshes
илиvertices
для каждого многоугольника, в результате будет больше вершин.
- vertices¶
Итерация по результату
tesselate()
для получения только списка многоугольников в формате [x, y, x2, y2, …].