Перемещение центральной точки меша (ориджина) к текущему выделению – одна из наиболее рутинных операций при моделировании в Blender. Однако, отдельной такой операции в Blender нет и обычно приходится выполнять ее в несколько приемов – сначала перемещать в центр выделения 3D курсор, перемещать ориджин к 3D курсору, а затем, при необходимости, еще и возвращать 3D курсор на исходное место. Все эти операции можно объединить простым скриптом и выполнить в одно нажатие.
Напишем скрипт, который будет переносить ориджин текущего меша в центр выделения.
Для начала сохраним исходное положение 3D курсора. Оно понадобится нам позже, чтобы после всех операций вернуть курсор обратно.
|
1 2 3 |
cursor_src_location = bpy.context.scene.cursor.location.copy() # <Vector (-0.8083, -0.8921, -0.1995)> |
Обратите внимание, что мы сохраняем значение location в копию, используя вызов copy(). Иначе мы вместо координат курсора получим ссылку на текущие координаты курсора, и потом не сможем вернуться к исходным значениям координат.
Так как мы исполняем код из текстового редактора, нам нужно переопределить контекст на рабочую область 3D вьюпорта.
Получаем указатель на рабочую область вьюпорта:
|
1 |
area = next((area for area in bpy.context.screen.areas if area.type == 'VIEW_3D')) |
И используем его для временного переопределения контекста:
|
1 |
with bpy.context.temp_override(area=area): |
Теперь мы можем вызывать операторы, контекст которых привязан к 3D вьюпорту и не получать ошибок.
Переместим 3D курсор в центр выделения.
|
1 |
bpy.ops.view3d.snap_cursor_to_selected() |
Теперь мы можем переместить ориджин к 3D курсору.
Однако оператор перемещения ориджина работает только в объектном режиме. Поэтому нам нужно сначала переключиться в объектный режим, потом переместить ориджин, и потом вернуться обратно в режим редактирования.
|
1 2 3 |
bpy.ops.object.mode_set(mode = 'OBJECT') bpy.ops.object.origin_set(type='ORIGIN_CURSOR') bpy.ops.object.mode_set(mode = 'EDIT') |
Все, теперь ориджин у нас находится точно в центре выделения.
Осталось вернуть 3D курсор на исходные координаты.
|
1 |
bpy.context.scene.cursor.location = cursor_src_location |
Теперь нажимая всего одну кнопку для выполнения скрипта, мы сразу перемещаем ориджин меша в центр текущего выделения.

.blend file on Patreon