Создание произвольных фигур с заливкой в Kivy

Возникла у меня необходимость нарисовать некоторую произвольную фигуру и залить ее определенным цветом.

Обратившись к документации kivy нашел несколько способов рисования:

  • Применение классов Rectangle, Ellipse, Triangle – при создании экземпляров которых в контексте canvas происходит рисование указанной фигуры по заданным координатам и с заданным размером. Например Rectangle(pos=pos, size=size). При этом фигура закрашивается или заранее определенным цветом (создание экземпляра Color) или для нее определяется атрибут texture. Однако стоит заметить, что создание более сложных фигур при этом становится задачей комбинирования этих фигур
  • Применение класса Line, который позволяет рисовать произвольные фигуры линиями, или создать сразу готовую фигуру треугольник, прямоугольник, эллипс. Цвет линий определяется по заданной для контекста canvas. Можно задать толщину линии, но нет способа выполнить заливку. Например: Line(points=<список точек>)
  • Применение класса Mesh. При создании экземпляра этого класса в контексте canvas происходит рисование указанной по точке фигуры. Фигура заливается либо цветом определенным в контексте canvas, либо атрибутом texture. И вот тут в зависимости от значения атрибута mode будет произведено рисования в разных режимах, а именно:

Но самое интересное в применение Mesh заключается в том, что кроме координат вершин фигуры, задаются также и текстурные координаты, которые указывают на каким цветом из текстуры должна быть закрашено вершина. Значение текстурных координат – это числа с плавающей запятой в диапазоне от 0 до 1. При этом 0 – первый пиксель из текстуры, 1 – это последний. Так как текстура имеет два измерения, то текстурные координаты это пара значений. При этом стоит отметить, что при выполнении заливки происходит интерполяция цветов.

Например нарисуем прямоугольник и зальем его одним цветом:

В этом случае на экране отобразится окно:

Красный прямоугольник

Однако если код немного изменить:

То отобразится прямоугольник залитый градиентом:

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

Обсуждение закрыто.