Table Of Contents
Инструкции вершин¶
Этот модуль включает в себя все классы для отрисовки простых вершинных объектов.
Обновление свойств¶
Атрибуты списков классов инструкций графики (например,
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 внутренних режима рисования, о которых вам следует знать для достижения оптимальных результатов:
Если
width
равен 1.0, то будет использоваться стандартное рисование GL_LINE из OpenGL.dash_length
,dash_offset
иdashes
будут работать, а свойства для cap и joint здесь не имеют значения.Если
width
больше 1.0, то будет использоваться специальный метод рисования на основе триангуляции.dash_length
,dash_offset
иdashes
не работают в этом режиме. Кроме того, если текущий цвет имеет альфа-канал меньше 1.0, то будет внутренне использоваться трафарет для рисования линии.
- 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
имеет несколько недостатков:
рисование линии с альфой, вероятно, не даст задуманный результат, если линия пересекает саму себя.
используется специальная текстура с предварительным умножением альфы.
линии менее 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¶
Свойство для получения/установки точек треугольника.