Использовать или нет гизмо при работе в Blender – вопрос, вызывающий огромное число споров среди 3D артистов. Однако, даже не используя гизмо на постоянной основе, бывают случаи, когда “эти стрелочки” оказываются очень полезными. И если гизмо в вашей настройке Blender по дефолту отключены, можно написать простой скрипт, который будет временно включать и выключать гизмо в вашем 3D вьюпорте.
За отображение гизмо в рабочей области 3D вьюпорта отвечают пространства его экрана (space), имена которых начинаются с “show_gizmo_object_”, а в конце имени указывается тип нужного гизмо: “rotate”, “scale” или “translate”, для, соответственно, гизмо поворота, масштаба и перемещения. Так, например, для отображения гизмо перемещения используется свойство “show_gizmo_object_translate”.
Давайте напишем скрипт, который при выполнении будет управлять отображением гизмо перемещения. Сделаем его сразу в режиме “тогглинга”, т.е. если гизмо не отображается – оно будет включено, а если уже включено – гизмо будет скрыто.
Чтобы из рабочей области текстового редактора управлять состоянием рабочей области 3D вьюпорта, используем временное переопределение контекста.
Определим область 3D вьюпорта.
|
1 2 |
area = next((_area for _area in bpy.context.screen.areas \ if _area.type == 'VIEW_3D'), None) |
И вызовем temp_override() с указанием области в параметрах.
|
1 |
with bpy.context.temp_override(area=area): |
Теперь среди пространств (spaces) 3D вьюпорта определим то, в котором собственно происходит отображение.
|
1 2 |
for space in area.spaces: if space.type == 'VIEW_3D': |
Получив указатель на пространство отображения, мы можем менять значение свойства отображения гизмо в нем на противоположное, при каждом выполнении кода.
|
1 |
space.show_gizmo_object_translate = not space.show_gizmo_object_translate |
В результате при каждом выполнении скрипта, гизмо в 3D вьюпорте будет включаться или выключаться, если было включено.
Код целиком:
|
1 2 3 4 5 6 7 |
area = next((_area for _area in bpy.context.screen.areas \ if _area.type == 'VIEW_3D'), None) with bpy.context.temp_override(area=area): for space in area.spaces: if space.type == 'VIEW_3D': space.show_gizmo_object_translate = not space.show_gizmo_object_translate |
Точно так же можно настроить включение и выключение гизмо для поворота и масштабирования, используя соответствующие свойства.
Для масштабирования:
|
1 |
space.show_gizmo_object_scale = not space.show_gizmo_object_scale |
и поворота:
|
1 |
space.show_gizmo_object_scale = not space.show_gizmo_object_scale |
Так же можно использовать любые комбинации этих трех видов гизмо.
Для удобства можно забиндить такой скрипт на нажатие клавиш и включать-выключать нужные гизмо одной кнопкой.

.blend file on Patreon