Версия 2.1.0

Quick search

Инструкции вершин

Этот модуль включает в себя все классы для отрисовки простых вершинных объектов.

Обновление свойств

Атрибуты списков классов инструкций графики (например, Triangle.points, Mesh.indices и так далее) не являются свойствами Kivy, а являются свойствами Python. Следовательно, графика будет обновляться только тогда, когда сам объект списка изменяется, а не тогда, когда изменяются значения в списке.

Например, на Python:

class MyWidget(Button):

    triangle = ObjectProperty(None)
    def __init__(self, **kwargs):
        super(MyWidget, self).__init__(**kwargs)
        with self.canvas:
            self.triangle = Triangle(points=[0,0, 100,100, 200,0])

и в KV:

<MyWidget>:
    text: 'Обновить'
    on_press:
        self.triangle.points[3] = 400

Хотя нажатие кнопки изменит координаты треугольника, графика не будет обновляться, потому что сам список не изменился. Аналогично, обновления не будут происходить при использовании синтаксиса, который изменяет только элементы списка, например, self.triangle.points[0:2] = [10,10] или self.triangle.points.insert(10) и так далее. Для принудительного обновления после изменения, сама переменная списка должна быть изменена, что в данном случае можно достичь следующим образом:

<MyWidget>:
    text: 'Обновить'
    on_press:
        self.triangle.points[3] = 400
        self.triangle.points = self.triangle.points
class kivy.graphics.vertex_instructions.Bezier(**kwargs)

Базовый класс: kivy.graphics.instructions.VertexInstruction

Добавлено в версии 1.0.8.

Parameters
points: list

Список точек в формате (x1, y1, x2, y2…)

segments: int, по умолчанию 180

Определяет, сколько сегментов нужно для отрисовки кривой. Отрисовка будет более плавной, если сегментов много.

loop: bool, по умолчанию False

Устанавливает кривой Безье так, чтобы последняя точка соединялась с первой.

dash_length: int

Длина сегмента (если пунктирный), по умолчанию 1.

dash_offset: int

Расстояние между концом сегмента и началом следующего, по умолчанию 0. Изменение этого значения делает линию пунктирной.

dash_length

Свойство для получения/установки длины пунктирных линий в кривой.

dash_offset

Свойство для получения/установки смещения между пунктирными линиями в кривой.

points

Свойство для получения/установки точек треугольника.

Предупреждение

Это всегда будет перестраивать всю графику с новыми точками списка. Это может быть очень нагружено процессором.

segments

Свойство для получения/установки количества сегментов кривой.

class kivy.graphics.vertex_instructions.BorderImage(**kwargs)

Базовый класс: kivy.graphics.vertex_instructions.Rectangle

концепция CSS3 граничного изображения.

Parameters
border: list

Информация о границе в формате (снизу, справа, сверху, слева). Каждое значение в пикселях.

auto_scale: string

Добавлено в версии 1.9.1.

Изменено в версии 1.9.2: Ранее это был тип bool и был изменен на строку состояния.

Может быть одним из следующих значений: 'off', 'both', 'x_only', 'y_only', 'y_full_x_lower', 'x_full_y_lower', 'both_lower'.

Автомасштабирование контролирует поведение 9-сегментного рисунка.

По умолчанию значения границ сохраняются точно, что означает, что если общий размер объекта меньше, чем значения границ, у вас могут возникнуть "ошибки рендеринга", где текстура переворачивается наизнанку. Это также делает невозможным создание округлой кнопки, которая масштабируется больше, чем размер ее исходной текстуры. Различные варианты для auto_scale позволят вам добиться некоторых комбинаций 2 типов рендеринга.

'off': это значение по умолчанию и ведет себя так же, как BorderImage делал до того, как auto_scale был False.

'both': масштабирует как горизонтальные, так и вертикальные границы в соответствии с размером BorderImage, это отключает BorderImage и делает его таким же, как обычное изображение.

'x_only': вертикальная размерность работает как по умолчанию, а горизонтальная масштабируется до ширины BorderImage.

'y_only': горизонтальная размерность работает как по умолчанию, а вертикальная масштабируется до высоты BorderImage.

'y_full_x_lower': вертикальная размерность масштабируется как в 'y_only', вертикальная размерность масштабируется, если размер масштабированной версии будет меньше, чем заданный размер границы.

'x_full_y_lower': горизонтальная размерность масштабируется как в 'x_only', вертикальная размерность масштабируется, если размер масштабированной версии будет меньше, чем заданный размер границы.

'both_lower': это то, что делал auto_scale, когда он был True в версии 1.9.1 Обе размерности X и Y будут масштабироваться, если BorderImage будет меньше исходника.

Если размер BorderImage меньше суммы его границ, по горизонтали или вертикали, и это свойство установлено в True, границы будут масштабироваться, чтобы учесть меньший размер.

auto_scale

Свойство для установки, автоматически масштабировать ли углы когда BorderImage слишком маленький.

border

Свойство для получения/установки границы класса.

display_border

Свойство для получения/установки размера отображаемой границы.

class kivy.graphics.vertex_instructions.Ellipse(*args, **kwargs)

Базовый класс: kivy.graphics.vertex_instructions.Rectangle

Изменено в версии 1.0.7: Добавлены angle_start и angle_end.

Parameters
segments: int, по умолчанию 180

Задает количество сегментов, необходимых для рисования эллипса. Чем больше сегментов, тем более плавной будет отрисовка.

angle_start: int, по умолчанию 0

Указывает начальный угол, в градусах, для части диска.

angle_end: int, по умолчанию 360

Указывает конечный угол, в градусах, для части диска.

angle_end

Конечный угол эллипса в градусах, по умолчанию 360.

angle_start

Начальный угол эллипса в градусах, по умолчанию 0.

segments

Свойство для получения/установки количества сегментов эллипса.

exception kivy.graphics.vertex_instructions.GraphicException

Базовый класс: Exception

Исключение, возникающее при ошибке графики.

class kivy.graphics.vertex_instructions.Line(**kwargs)

Базовый класс: kivy.graphics.instructions.VertexInstruction

Рисование линии можно выполнить легко:

with self.canvas:
    Line(points=[100, 100, 200, 100, 100, 200], width=10)

У линии есть 3 внутренних режима рисования, о которых вам следует знать для достижения оптимальных результатов:

  1. Если width равен 1.0, то будет использоваться стандартное рисование GL_LINE из OpenGL. dash_length, dash_offset и dashes будут работать, а свойства для cap и joint здесь не имеют значения.

  2. Если width больше 1.0, то будет использоваться специальный метод рисования на основе триангуляции. dash_length, dash_offset и dashes не работают в этом режиме. Кроме того, если текущий цвет имеет альфа-канал меньше 1.0, то будет внутренне использоваться трафарет для рисования линии.

_images/line-instruction.png
Parameters
points: list

Список точек в формате (x1, y1, x2, y2…)

dash_length: int

Длина сегмента (если пунктирный), по умолчанию 1.

dash_offset: int

Смещение между концом одного сегмента и началом следующего, по умолчанию 0. Изменение этого значения делает линию пунктирной.

dashes: list of ints

Список [длина ВКЛ, смещение, длина ВКЛ, смещение, …]. Например, [2,4,1,6,8,2] создаст линию с первой длиной ВКЛ 2, затем смещение 4, затем длиной ВКЛ 1, затем смещение 6 и так далее. По умолчанию []. Изменение этого значения делает линию пунктирной и переопределяет dash_length и dash_offset.

width: float

Ширина линии, по умолчанию 1.0.

cap: str, по умолчанию ‘round’

См. cap для получения дополнительной информации.

joint: str, по умолчанию ‘round’

См. joint для получения дополнительной информации.

cap_precision: int, по умолчанию 10

См. cap_precision для получения дополнительной информации

joint_precision: int, по умолчанию 10

См. joint_precision для получения дополнительной информации См. cap_precision для получения дополнительной информации.

joint_precision: int, по умолчанию 10

См. joint_precision для получения дополнительной информации.

close: bool, по умолчанию False

Если True, то линия будет замкнутой.

circle: list

Если задан, то points будет установлен для построения круга. См. circle для получения дополнительной информации.

ellipse: list

Если задан, то points будет установлен для построения эллипса. См. ellipse для получения дополнительной информации.

rectangle: list

Если задан, то points будет установлен для построения прямоугольника. См. rectangle для получения дополнительной информации.

bezier: list

Если задан, то points будет установлен для построения кривой Безье. См. bezier для получения дополнительной информации.

bezier_precision: int, по умолчанию 180

Точность рисования кривой Безье.

Изменено в версии 1.0.8: dash_offset и dash_length были добавлены.

Изменено в версии 1.4.1: width, cap, joint, cap_precision, joint_precision, close, ellipse, rectangle были добавлены.

Изменено в версии 1.4.1: bezier, bezier_precision были добавлены.

Изменено в версии 1.11.0: dashes были добавлены

bezier

Используйте этот атрибут для построения кривой Безье без вычисления points. Вы можете только установить этот атрибут, а не получить его.

Аргумент должен быть кортежем из 2n элементов, где n - количество точек.

Использование:

Line(bezier=(x1, y1, x2, y2, x3, y3)

Добавлено в версии 1.4.2.

Примечание

Вычисления для кривых Безье дешевы для небольшого количества точек, но сложность квадратична, поэтому линии с большим количеством точек могут быть очень дорогими в построении, используйте осторожно!

bezier_precision

Количество итераций для рисования кривой Безье между 2 сегментами, по умолчанию 180. bezier_precision должен быть не менее 1.

Добавлено в версии 1.4.2.

cap

Определяет форму конца линии, по умолчанию 'round'. Может быть 'none', 'square' или 'round'

Добавлено в версии 1.4.1.

cap_precision

Количество итераций для рисования "круглого" конца, по умолчанию 10. cap_precision должен быть не менее 1.

Добавлено в версии 1.4.1.

circle

Используйте этот атрибут для построения окружности без вычисления points. Вы можете только установить этот атрибут, а не получить его.

Аргумент должен быть кортежем из (центр_x, центр_y, радиус, угол_начала, угол_конца, сегменты):

  • центр_x и центр_y представляют центр окружности

  • радиус представляет радиус окружности

  • (опционально) угол_начала и угол_конца в градусах. Значение по умолчанию - 0 и 360.

  • (опционально) сегменты - точность эллипса. Значение по умолчанию рассчитывается из диапазона между углами.

Обратите внимание, что это зависит от вас, чтобы close окружность или нет.

Например, для построения простого эллипса на Python:

# простая окружность
Line(circle=(150, 150, 50))

# только с 90 по 180 градусов
Line(circle=(150, 150, 50, 90, 180))

# только с 90 по 180 градусов, с небольшим количеством сегментов
Line(circle=(150, 150, 50, 90, 180, 20))

Добавлено в версии 1.4.1.

close

Если True, линия будет замкнута.

Добавлено в версии 1.4.1.

dash_length

Свойство для получения/установки длины штрихов на кривой.

Добавлено в версии 1.0.8.

dash_offset

Свойство для получения/установки смещения между штрихами на кривой.

Добавлено в версии 1.0.8.

dashes

Свойство для получения/установки dashes.

Список [длина ВКЛ, смещение, длина ВКЛ, смещение, …]. Например, [2,4,1,6,8,2] создаст линию с первой длиной штриха 2, затем смещение 4, затем длина штриха 1, затем смещение 6 и так далее.

Добавлено в версии 1.11.0.

ellipse

Используйте это свойство для построения эллипса, без вычисления points. Вы можете только установить это свойство, но не получить его.

Аргумент должен быть кортежем из (x, y, ширина, высота, угол_начала, угол_конца, сегменты):

  • x и y представляют нижний левый угол эллипса

  • ширина и высота представляют размер эллипса

  • (опционально) угол_начала и угол_конца заданы в градусах. Значение по умолчанию - 0 и 360.

  • (опционально) сегменты - точность эллипса. Значение по умолчанию рассчитывается из диапазона углов.

Обратите внимание, что зависит от вас закрыть эллипс или нет.

Например, для построения простого эллипса на Python:

# простой эллипс
Line(ellipse=(0, 0, 150, 150))

# только с 90 по 180 градусов
Line(ellipse=(0, 0, 150, 150, 90, 180))

# только с 90 по 180 градусов, с небольшим количеством сегментов
Line(ellipse=(0, 0, 150, 150, 90, 180, 20))

Добавлено в версии 1.4.1.

joint

Определяет соединение линии, по умолчанию - ‘round’. Может быть одним из ‘none’, ‘round’, ‘bevel’, ‘miter’.

Добавлено в версии 1.4.1.

joint_precision

Количество итераций для рисования “round” соединения, по умолчанию 10. Точность соединения должна быть как минимум 1.

Добавлено в версии 1.4.1.

points

Свойство для получения/установки точек линии.

Предупреждение

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

rectangle

Используйте это свойство для построения прямоугольника, без вычисления points. Вы можете только установить это свойство, но не получить его.

Аргумент должен быть кортежем из (x, y, ширина, высота):

  • x и y представляют позицию левого нижнего угла прямоугольника

  • ширина и высота представляют размер

Линия автоматически будет замкнута.

Использование:

Line(rectangle=(0, 0, 200, 200))

Добавлено в версии 1.4.1.

rounded_rectangle

Используйте это свойство для построения закругленного прямоугольника, без вычисления points. Вы можете только установить это свойство, но не получить его.

Аргумент должен быть кортежем одной из следующих форм:

  • (x, y, ширина, высота, радиус_угла)

  • (x, y, ширина, высота, радиус_угла, разрешение)

  • (x, y, ширина, высота, радиус_угла1, радиус_угла2, радиус_угла3, радиус_угла4)

  • (x, y, ширина, высота, радиус_угла1, радиус_угла2, радиус_угла3, радиус_угла4, разрешение)

  • x и y представляют позицию левого нижнего угла прямоугольника

  • ширина и высота представляют размер

  • радиус_угла - количество пикселей между двумя границами и центром дуги круга, соединяющей их

  • разрешение - количество сегментов линии, которые будут использоваться для рисования дуги круга на каждом углу (по умолчанию 30)

Линия автоматически будет замкнута.

Использование:

Line(rounded_rectangle=(0, 0, 200, 200, 10, 20, 30, 40, 100))

Добавлено в версии 1.9.0.

width

Определяет ширину линии, по умолчанию 1.0.

Добавлено в версии 1.4.1.

class kivy.graphics.vertex_instructions.Mesh(**kwargs)

Базовый класс: kivy.graphics.instructions.VertexInstruction

В OpenGL ES 2.0 и в нашей графической реализации нельзя иметь более 65535 индексов.

Список вершин описывается следующим образом:

vertices = [x1, y1, u1, v1, x2, y2, u2, v2, ...]
            |            |  |            |
            +---- i1 ----+  +---- i2 ----+

Если вы хотите нарисовать треугольник, добавьте 3 вершины. Затем вы можете создать список индексов следующим образом:

indices = [0, 1, 2]

Добавлено в версии 1.1.0.

Parameters
vertices: iterable

Список вершин в формате (x1, y1, u1, v1, x2, y2, u2, v2…).

indices: iterable

Список индексов в формате (i1, i2, i3…).

mode: str

Режим vbo. См. mode для более подробной информации. По умолчанию ‘points’.

fmt: list

Формат вершин, по умолчанию, каждая вершина описывается 2D координатами (x, y) и 2D текстурными координатами (u, v). Каждый элемент списка должен быть кортежем или списком следующего вида:

(имя_переменной, размер, тип)

что позволит отобразить данные вершины на инструкции glsl.

[(b’v_pos’, 2, ‘float’), (b’v_tc’, 2, ‘float’),]

позволит использовать

attribute vec2 v_pos; attribute vec2 v_tc;

в вершинном шейдере glsl.

Изменено в версии 1.8.1: Ранее vertices и indices всегда преобразовывались в список, теперь они преобразовываются в список только в том случае, если они не реализуют буферный интерфейс. Таким образом, массивы numpy, массивы python и т. д. используются на месте, без создания дополнительных копий. Однако буферы не могут быть только для чтения (даже если они не изменяются, из-за ограничения cython) и должны быть непрерывными в памяти.

Примечание

При передаче объекта memoryview или экземпляра, реализующего буферный интерфейс, vertices должны быть буфером с плавающей точкой (код ‘f’ в массиве python) и indices должны быть буфером беззнаковых коротких целых (код ‘H’ в массиве python). Массивы в других форматах все равно придется преобразовывать внутренне, что аннулирует любой потенциальный выигрыш.

indices

Индексы вершин, используемые для указания порядка при рисовании сетки.

mode

Режим VBO, используемый для рисования вершин/индексов. Может быть одним из ‘points’, ‘line_strip’, ‘line_loop’, ‘lines’, ‘triangles’, ‘triangle_strip’ или ‘triangle_fan’.

vertices

Список координат x, y, u, v, используемых для создания сетки. В данный момент инструкция Mesh не позволяет изменять формат вершин, что означает, что есть только x, y + одна текстурная координата.

class kivy.graphics.vertex_instructions.Point(**kwargs)

Базовый класс: kivy.graphics.instructions.VertexInstruction

ширина/высота в 2 раза больше pointsize.

Parameters
points: list

Список точек в формате (x1, y1, x2, y2…), где каждая пара координат указывает центр новой точки.

pointsize: float, по умолчанию 1.

Размер точки, измеряется от центра до края. Значение 1.0 означает, что реальный размер будет 2.0 x 2.0.

Предупреждение

Начиная с версии 1.0.7, инструкция вершины имеет ограничение в 65535 вершинах (точнее, в индексах вершин). 2 записи в списке (x, y) будут преобразованы в 4 вершины. Поэтому ограничение внутри класса Point() составляет 2^15-2.

add_point(float x, float y)

Добавить точку в текущий список points.

Если вы намереваетесь добавить несколько точек, предпочтительнее использовать этот метод вместо переназначения нового списка points. Переназначение нового списка points пересчитает и перезагрузит весь буфер в GPU. Если вы используете add_point, он загрузит только изменения.

points

Свойство для получения/установки центральных точек в списке точек. Каждая пара координат указывает центр новой точки.

pointsize

Свойство для получения/установки размера точки. Размер измеряется от центра до края, поэтому значение 1.0 означает, что реальный размер будет 2.0 x 2.0.

class kivy.graphics.vertex_instructions.Quad(**kwargs)

Базовый класс: kivy.graphics.instructions.VertexInstruction

Parameters
points: list

Список точек в формате (x1, y1, x2, y2, x3, y3, x4, y4).

points

Свойство для получения/установки точек квадрата.

Вот перевод на русский текста с сохранением тегов:
class kivy.graphics.vertex_instructions.Rectangle(**kwargs)

Базовый класс: kivy.graphics.instructions.VertexInstruction

Parameters
pos: list

Положение прямоугольника, в формате (x, y).

size: list

Размер прямоугольника, в формате (ширина, высота).

pos

Свойство для получения/установки положения прямоугольника.

size

Свойство для получения/установки размера прямоугольника.

class kivy.graphics.vertex_instructions.RoundedRectangle(**kwargs)

Базовый класс: kivy.graphics.vertex_instructions.Rectangle

Добавлено в версии 1.9.1.

Parameters
segments: int, по умолчанию 10

Определяет, сколько сегментов необходимо для рисования закругленных углов. Рисунок будет более плавным, если у вас много сегментов.

radius: list, по умолчанию [(10.0, 10.0), (10.0, 10.0), (10.0, 10.0), (10.0, 10.0)]

Задает радиусы, используемые для закругленных углов по часовой стрелке: верхний левый, верхний правый, нижний правый, нижний левый. Элементы списка могут быть числами или кортежами из двух чисел для задания разных размеров x, y. Одно значение будет задавать все радиусы углов этим значением. Четыре значения будут задавать каждый радиус угла отдельно. Большие числа значений будут усечены до четырех. Первое значение будет использоваться для всех углов, если значений меньше четырех.

radius

Радиусы закругленных углов прямоугольника, по умолчанию [10,].

segments

Свойство для получения/установки количества сегментов для каждого угла.

class kivy.graphics.vertex_instructions.SmoothLine(**kwargs)

Базовый класс: kivy.graphics.vertex_instructions.Line

имеет несколько недостатков:

  • рисование линии с альфой, вероятно, не даст задуманный результат, если линия пересекает саму себя.

  • cap, joint и dash свойства не поддерживаются.

  • используется специальная текстура с предварительным умножением альфы.

  • линии менее 1px в ширину не поддерживаются: они будут выглядеть одинаково.

Предупреждение

Это незавершенная работа, экспериментальная и может вызывать сбои.

Добавлено в версии 1.9.0.

overdraw_width

Определение ширины избыточного рисования линии, по умолчанию 1.2.

premultiplied_texture()
class kivy.graphics.vertex_instructions.Triangle(**kwargs)

Базовый класс: kivy.graphics.instructions.VertexInstruction

Parameters
points: list

Список точек в формате (x1, y1, x2, y2, x3, y3).

points

Свойство для получения/установки точек треугольника.