Table Of Contents
Инструкции трафарета¶
Добавлено в версии 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.