Некоторые операторы в Blender можно вызывать только в той рабочей области, для которой они предназначены.
Если вызывать, например, оператор, предназначенный только для работы в области 3D вьюпорта в Python-консоли, оператор или просто не выполнится:
Python
1
2
3
bpy.ops.wm.toolbar()
# {'CANCELLED'}
или вернет сообщение о неверном контексте:
Python
1
2
3
bpy.ops.view3d.background_image_add()
# RuntimeError: Operator bpy.ops.view3d.background_image_add.poll() failed, context is incorrect
Однако выполнить операторы в “не родной” рабочей области все же можно. Для этого в любой оператор можно передать первым неявным параметром указание на контекст рабочей области, в которой должен быть выполнен этот оператор. Этот параметр обычно называют “переопределенный контекст”.
Для того, чтобы переключить активный инструмент из Т-панели в окне 3D вьюпорта нужно вызвать соответствующий оператор в параметре “name” которого нужно передать идентификатор idname требуемого инструмента.
Например для того, чтобы включить выделение окружностью Select Circle нужно вызвать оператор:
Модули, используемые в скриптах и аддонах Blender, располагаются или в той же директории, что и сам скрипт или аддон, или в директории установки Blender по пути “версия_blender\python\lib\”. Однако возможно подключить для работы и модуль, расположенный в другом месте на жестком диске.
Для этого нужно подключить модуль по его абсолютному пути.
Если требуется привязать меш к кости арматуры так, чтобы меш сохранил свое текущее положение, при помощи Blender Python API, нужно выполнить следующие действия:
Для того, чтобы точно выровнять кость одной арматуры по кости другой арматуры нужно соотнести глобальные матрицы арматур и локальные матрицы костей в режиме позы.
Чаще всего для быстрых упрощенных расчетов с геометрией объектов используются их Bounding Box – минимальный параллелепипед, в который вписан данный объект. Однако. иногда большую точность и простоту в расчетах может дать Bounding Sphere – минимальная сфера, в которую можно вписать объект. И если размеры и расположение Bounding Box доступно в Blender для любого объекта сразу, Bounding Sphere необходимо рассчитывать самостоятельно.
Напишем функцию, которая на основании переданного объекта вернет нам координаты центра и радиус описывающей его Bounding Sphere.
Попытка инвертировать матрицу преобразования при помощи метода inverted() может привести к ошибке, если, например, на объект, для которого вычисляется исходная матрица оказывает влияние какой-нибудь ограничитель.
В этом случае Blender сгенерирует ошибку вида:
ValueError: Matrix.invert(ed): matrix does not have an inverse