Обычно при создании оператора в Blender Python API его описание задается через параметр “bl_description”. Однако достаточно часто один и тот же оператор выполняет различные действия в разных случаях и единое описание не отражает всех возможностей оператора. В этом случае оператору можно задать динамическое описание.
Для того, чтобы задать оператору динамическое описание, используется метод класса “description”.
1 2 |
@classmethod def description(cls, context, properties): |
Параметры метода:
cls – указатель на класс оператора
context – указатель на контекст выполнения оператора
properties – через это свойство можно получить доступ к входным параметрам оператора
Возвращаемое методом значение будет отображаться в качестве описания оператора.
Например, для того, чтобы оператор имел одно описание при включенном режиме редактирования меша и другое – в объектном режиме, добавим в метод простое условие:
1 2 3 4 5 6 |
@classmethod def description(cls, context, properties): if context.mode == 'OBJECT': return 'DESCRIPTION FOR OBJECT MODE' elif context.mode == 'EDIT_MESH': return 'DESCRIPTION FOR EDIT MODE' |
Если у оператора есть входные параметры, например, “param” и требуется, чтобы в зависимости от его значения описание оператора тоже менялось, мы можем добавить в метод “description” следующее условие:
1 2 3 4 |
@classmethod def description(cls, context, properties): if properties.param != '': return 'DESCRIPTION BY PARAMETER' |
Обращение к параметрам оператора производится через свойство “properties”.
Полный код оператора с динамическим описанием:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
class TEST_OT_test_op(Operator): bl_idname = 'test.test_op' bl_label = 'Test' bl_description = 'Default Description' bl_options = {'REGISTER'} param: StringProperty( name='param', default='' ) @classmethod def description(cls, context, properties): if properties.param != '': return 'DESCRIPTION BY PARAMETER' elif context.mode == 'OBJECT': return 'DESCRIPTION FOR OBJECT MODE' elif context.mode == 'EDIT_MESH': return 'DESCRIPTION FOR EDIT MODE' def execute(self, context): return {'FINISHED'} |