Для корректного задания значений свойству типа EnumProperty необходимо знать все его возможные варианты.
Если попытаться задать значение, которого нет в перечислимом свойстве, Blender выдаст ошибку вида:
TypeError: bpy_struct: item.attr = val: enum “xxx” not found in (‘value_001′, value_002’, …)
где:
xxx – значение, которые мы попытались задать свойству EnumProperty
value_001, value_002, … – возможные значения, которые может принимать данное свойство EnumProperty
Список значений, которые может принимать нужное нам свойство EnumProperty можно получить через его rna-структуру.
Определим функцию, которая будет возвращать список возможных значений EnumProperty, получая во входных параметрах объект и название перечислимого свойства, возможные значения которого нужно получить.
1 2 3 4 |
import bpy def show_enum_values(obj, prop_name): print([item.identifier for item in obj.bl_rna.properties[prop_name].enum_items]) |
Для примера получим все возможные системы координат в сцене:
1 2 3 |
show_enum_values(bpy.context.scene.transform_orientation_slots[0], 'type') # ['GLOBAL', 'LOCAL', 'NORMAL', 'GIMBAL', 'VIEW', 'CURSOR'] |
или все возможные значения режимов работы с мешем:
1 2 3 |
show_enum_values(bpy.context.object, 'mode') # ['OBJECT', 'EDIT', 'POSE', 'SCULPT', 'VERTEX_PAINT', 'WEIGHT_PAINT', 'TEXTURE_PAINT', 'PARTICLE_EDIT', 'EDIT_GPENCIL', 'SCULPT_GPENCIL', 'PAINT_GPENCIL', 'WEIGHT_GPENCIL'] |