В большой сцене бывает сложно быстро найти и выбрать камеру, с которой осуществляется рендер, среди множества других объектов. Однако мы можем создать оператор и назначить его вызов на хоткей, чтобы находить активную камеру одним нажатием кнопки.
Текущая активная камера для сцены хранится в
1 |
bpy.context.scene.camera |
для того, чтобы выделить ее, нужно выполнить команду
1 |
bpy.context.scene.camera.select_set(True) |
Создадим оператор, для вызова этой команды:
1 2 3 4 5 6 7 8 9 10 11 |
from bpy.types import Operator class SCENE_select_camera(Operator): bl_idname = 'scene.select_camera' bl_label = 'Select scene camera' bl_description = 'Select scene camera' bl_options = {'REGISTER', 'UNDO'} def execute(self, context): context.scene.camera.select_set(True) return {'FINISHED'} |
и зарегистрируем его в Blender Python API:
1 2 3 4 5 6 7 8 9 |
from bpy.utils import register_class, unregister_class def register(): register_class(SCENE_select_camera) def unregister(): unregister_class(SCENE_select_camera) |
Все вместе:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
import bpy from bpy.types import Operator from bpy.utils import register_class, unregister_class class SCENE_select_camera(Operator): bl_idname = 'scene.select_camera' bl_label = 'Select scene camera' bl_description = 'Select scene camera' bl_options = {'REGISTER', 'UNDO'} def execute(self, context): context.scene.camera.select_set(True) return {'FINISHED'} def register(): register_class(SCENE_select_camera) def unregister(): unregister_class(SCENE_select_camera) if __name__ == '__main__': register() |
Выполнив этот скрипт из текстового редактора Blender, мы сможем вызывать наш оператор, например, из Python-консоли:
1 |
bpy.ops.scene.select_camera() |
После выполнения этой команды текущая активная камера сцены будет выделена.
Для того, чтобы привязать вызов нашего оператора к нажатию какой-нибудь клавиши, откроем окно Preferences и переключимся в раздел KeyMap.
Развернем раздел 3D View – 3D View (Global) и добавим новый кеймап нажатием на кнопку “New”.
В поле оператора пропишем bl_idname нашего оператора и назначим удобную для вызова клавишу, например “Y”.
Теперь при нажатии кнопки “Y” на клавиатуре, текущая камера сцены всегда будет выделяться.
Для того, чтобы оставить выделенной только одну камеры и снять выделения с других объектов сцены, дополним наш оператор следующим образом – перед выделением камеры пропишем снятие выделения со всех выделенных объектов:
1 2 |
for obj in context.selected_objects: obj.select_set(False) |
Можно еще сильнее улучшить наш оператор, добавив в него перемещение окна вьюпорта к выделенной камере.
Нацелить окно вьюпорта на выделенный объект можно при помощи оператора:
1 |
bpy.ops.view3d.view_selected() |
Добавим вызов этого оператора после выбора камеры.
Код функции execute нашего оператора после всех изменений:
1 2 3 4 5 6 |
def execute(self, context): for obj in context.selected_objects: obj.select_set(False) context.scene.camera.select_set(True) bpy.ops.view3d.view_selected() return {'FINISHED'} |
Теперь при нажатии хоткея “Y” только текущая камеры сцены будет выделена, и вьюпорт переместится к ней.
*.blend и *.py файлы с примером кода для моих подписчиков на Patreon