Для смены активного инструмента через Blender Python API необходимо использовать оператор wm.tool_set_by_id, передавая в его параметре идентификатор требуемого инструмента. В ранних версиях Blender, для того чтобы вызвать этот оператор из окна с другим контекстом, например, из текстового редактора Text Edit, необходимо было переопределять контекст.
Теперь этот оператор можно вызвать как при помощи временного переопределения контекста temp_override, так и передавая тип рабочей области, для которой вызывается оператор, в его параметре.
Вызов оператора выбора инструмента при помощи временного переопределения контекста
Как обычно, мы сначала получаем указатель на рабочую область, в контексте которой нам нужно вызвать оператор.
Далее при помощи temp_override вызываем оператор для выбранной рабочей области:
1 2 3 4 |
area = [area for area in bpy.context.screen.areas if area.type == "VIEW_3D"][0] with bpy.context.temp_override(area=area): bpy.ops.wm.tool_set_by_id(name='builtin.select_circle') |
Вызов оператора выбора инструмента с указанием рабочей области в параметре оператора
Гораздо проще этот же оператор вызывается для нужной рабочей области, если ее тип передавать в параметре space_type самого оператора.
1 2 3 4 |
bpy.ops.wm.tool_set_by_id( name='builtin.select_circle', space_type='VIEW_3D' ) |
Результат выполнения обоих фрагментов кода одинаковый.