Версия 2.1.0

Quick search

Инструкции трафарета

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

Изменено в версии 1.3.0: Операция трафарета была обновлена для устранения некоторых проблем, возникших при вложенном использовании. Теперь вы обязаны использовать StencilUnUse и повторить ту же самую операцию, что и после StencilPush.

Инструкции трафарета позволяют вам рисовать и использовать текущий рисунок в качестве маски. Они не обеспечивают такого контроля, как чистый OpenGL, но вы все равно можете выполнять интересные вещи!

Буфер трафарета можно управлять с помощью следующих 3 инструкций:

  • StencilPush: вталкивание нового уровня трафарета. Любое рисование, которое происходит после этого, будет использоваться в качестве маски.

  • StencilUse: теперь рисуйте следующие инструкции и используйте трафарет для их маскирования.

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

  • StencilPop: извлечение текущего уровня трафарета.

Вы всегда должны соблюдать эту схему:

StencilPush

# ФАЗА 1: поместите здесь любые инструкции для рисования в качестве маски.

StencilUse

# ФАЗА 2: весь рисунок здесь будет автоматически обрезан маской, созданной в ФАЗЕ 1.

StencilUnUse

# ФАЗА 3: поместите сюда ту же инструкцию для рисования, что и в ФАЗЕ 1

StencilPop

# ФАЗА 4: теперь трафарет удален из стека и выгружен.

Ограничения

  • Рисование в ФАЗЕ 1 и ФАЗЕ 3 не должно пересекаться, иначе вы получите неожиданные результаты.

  • Трафарет активируется сразу после выполнения StencilPush.

  • Трафарет деактивируется сразу после правильного извлечения всех уровней трафарета.

  • Вы не должны сами манипулировать трафаретами между StencilPush / StencilPop.

  • Вы можете добавить другой трафарет после StencilUse / перед StencilPop.

  • Вы можете добавить до 128 уровней трафарета (8 для kivy < 1.3.0).

Пример использования трафарета

Вот пример в стиле kv:

StencilPush

# Создайте прямоугольную маску с позицией (100, 100) и размером (100, 100).
Rectangle:
    pos: 100, 100
    size: 100, 100

StencilUse

# Мы хотим показать большой зеленый прямоугольник, но предыдущая маска трафарета нас обрежет :)
Color:
    rgb: 0, 1, 0
Rectangle:
    size: 900, 900

StencilUnUse

# Вы должны заново нарисовать маску трафарета, чтобы ее убрать.
Rectangle:
    pos: 100, 100
    size: 100, 100

StencilPop
class kivy.graphics.stencil_instructions.StencilPop

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

Извлекает трафарет из стека. Дополнительную информацию см. в документации модуля.

class kivy.graphics.stencil_instructions.StencilPush

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

Помещает трафарет в стек. Дополнительную информацию см. в документации модуля.

class kivy.graphics.stencil_instructions.StencilUnUse

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

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

class kivy.graphics.stencil_instructions.StencilUse(**kwargs)

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

Дополнительную информацию см. в документации модуля.

func_op

Определяет операцию трафарета для использования glStencilFunc(). Может быть одним из 'never', 'less', 'equal', 'lequal', 'greater', 'notequal', 'gequal' или 'always'.

По умолчанию оператор установлен в 'equal'.

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