Иногда бывает необходимо зарегистрировать оператор так, чтобы пользователь не мог вызвать его напрямую. Например, если данный оператор предполагается вызывать только из другого оператора после выполнения ряда проверок или дополнительных действий.
Однако, даже если для такого оператора отсутствует кнопки запуска в UI, пользователь все равно сможет вызвать его, выбрав из списка найденных через поиск операторов.
Для того, чтобы убрать оператор из результатов поиска, необходимо в его параметре “bl_options” указать опцию “INTERNAL”.
Для примера зарегистрируем простейший оператор, добавляющий в сцену дефолтный куб, стандартным образом:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
from bpy.types import Operator from bpy.utils import register_class class TEST_OT_add_cube_alt(Operator): bl_idname = 'test.add_cube_alt' bl_label = 'Add Cube Alt' bl_options = {'REGISTER'} def execute(self, context): bpy.ops.mesh.primitive_cube_add() return {'FINISHED'} def register(): register_class(TEST_OT_add_cube_alt) register() |
Такой оператор будет отображаться в поиске:
Теперь добавим в него опцию “INTERNAL”:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
from bpy.types import Operator from bpy.utils import register_class class TEST_OT_add_cube_alt(Operator): bl_idname = 'test.add_cube_alt' bl_label = 'Add Cube Alt' bl_options = {'REGISTER', 'INTERNAL'} def execute(self, context): bpy.ops.mesh.primitive_cube_add() return {'FINISHED'} def register(): register_class(TEST_OT_add_cube_alt) register() |
После чего оператор не будет показываться в результатах поиска: