Для того чтобы вносить изменения в меню UI Blender, например, добавлять новые пункты или переопределять меню полностью, в первую очередь требуется узнать класс изменяемого меню.
До определения классов меню в некоторых случаях можно быстро добраться, кликая по ним правой кнопкой мышки, и переходя к коду нажатием на пункт “Edit source” во всплывающем меню. Однако этот способ работает далеко не со всеми меню в интерфейсе Blender.
Полный список классов меню можно получить из списка типов bpy.types.
Определим функцию-генератор, который из всего списку типов выдаст нам классы, наследованные от базового типа “меню” bpy.types.Menu:
1 2 3 4 5 6 |
def _all_menu_classes(): for type in dir(bpy.types): type_cls = getattr(bpy.types, type) if hasattr(type_cls, '__mro__'): if bpy.types.Menu in type_cls.__mro__: yield type_cls, type_cls.bl_rna.name |
Кортеж __mro__ предоставляет доступ ко всем классам, от которых наследуется текущий класс. Проверяя, есть ли в нем класс bpy.types.Menu, мы в итоге получаем только классы нужного нам типа.
Пройдем по генерируемы значениям и выведем в консоль список классов меню:
1 2 |
for cls in _all_menu_classes(): print(cls) |
В результате мы получили перечень классов с идентификаторами:
1 2 3 4 5 6 7 8 |
(<class 'bl_ui.space_topbar.TOPBAR_MT_file'>, 'TOPBAR_MT_file') (<class 'bl_ui.space_topbar.TOPBAR_MT_file_cleanup'>, 'TOPBAR_MT_file_cleanup') (<class 'bl_ui.space_topbar.TOPBAR_MT_file_context_menu'>, 'TOPBAR_MT_file_context_menu') (<class 'bl_ui.space_topbar.TOPBAR_MT_file_defaults'>, 'TOPBAR_MT_file_defaults') (<class 'bl_ui.space_topbar.TOPBAR_MT_file_export'>, 'TOPBAR_MT_file_export') (<class 'bl_ui.space_topbar.TOPBAR_MT_file_external_data'>, 'TOPBAR_MT_file_external_data') (<class 'bl_ui.space_topbar.TOPBAR_MT_file_import'>, 'TOPBAR_MT_file_import') ... |
Найдя нужный идентификатор в списке, мы можем использовать его для дальнейшей модификации пользовательского UI в Blender.