В Blender 2.8 кнопка блокировки трансформаций мешей (Manipulate center points) перемещена в N-панель во вкладку “Tool” (Options – Transform – Affect only – Locations) и ее вид изменен с кнопки на чекбокс.
Метка: from 2.7 to 2.8
Добавление объекта в сцену в Blender 2.80 Python API
В API Blender 2.79 созданный объект добавляется в сцену через:
1 |
bpy.context.scene.objects.link(new_object) |
Попытка добавить объект в сцену таким образом в Blender 2.80, приводит к ошибке:
‘bpy_prop_collection’ object has no attribute ‘link’
В Blender 2.80 API добавлять объект нужно не в саму сцену, а в ее коллекции.
Добавить объект в активную коллекцию:
1 |
bpy.context.scene.collection.objects.link(new_object) |
Добавить объект в коллекцию по ее имени:
1 |
bpy.data.collections['collection_name'].objects.link(new_object) |
15 изменений, с которыми вы наверняка столкнетесь при переходе с Blender 2.79 на Blender 2.80
- Выбор объектов
2.79: выбор производится правой кнопкой мышки
2.80: выбор производится левой кнопкой мышки
- T-панель
2.79: вызывалась нажатием клавиши t
2.80: теперь ее нет, функции переместились в основное меню или в контекстное меню по нажатию на правую кнопку мышки
- Снятие выделения
2.79: a – выделить всё и снять всё выделение
2.80: a – выделить всё, a – a или alt+a – снять всё выделение
Правила наименования классов в Blender 2.8 API
В API Blender 2.8 ужесточаются требования к наименованию классов и их идентификаторов. Имя класса должно соответствовать следующему шаблону:
1 |
UPPER_CASE_{SEPARATOR}_mixed_case |
Где {SEPARATOR} – две буквы, обозначающие принадлежность класса к определенному типу (от какого типа наследуется класс):
- HT – Заголовок
- MT – Меню
- OT – Оператор
- PT – Панель
- UL – Список UI
Идентификатор класса “bl_idname” должен соответствовать имени класса.
Читать далее «Правила наименования классов в Blender 2.8 API»
Изменения в регистрации аддонов через API в Blender 2.8
В Blender 2.7 регистрация и разрегистрация аддонов через Python API производилась через Window manager – wm:
1 2 3 4 5 |
bpy.ops.wm.addon_install(filepath='_path_to_addon', overwrite=True) bpy.ops.wm.addon_enable(module='addon_name') bpy.ops.wm.addon_remove(module='addon_name') |
В Blender 2.8 API операторы работы с аддонами перенесены в preferences:
1 2 3 4 5 |
bpy.ops.preferences.addon_install(filepath='_path_to_addon', overwrite=True) bpy.ops.preferences.addon_enable(module='addon_name') bpy.ops.preferences.addon_remove(module='addon_name') |
Положение 3D курсора в Blender 2.8 Python API
Свойство, указывающее на местоположение 3D-курсора
1 |
context.scene.cursor_location |
в Blender 2.8 перенесено в объект курсора
1 |
context.scene.cursor.location |
При попытке обращения к позиции курсора через “context.scene.cursor_location” Blender выдаст ошибку:
‘Scene’ object has no attribute ‘cursor_location’
Умножение матриц, векторов, кватернионов в Blender 2.8 Python API
В Blender 2.7 для умножения матриц, кватернионов и векторов использовался оператор “*” (звездочка). В Blender 2.8 API он заменен на оператор “@” (ат).
При попытке использования оператора “*” для умножения матриц, векторов или кватернионов, Blender 2.8 сигнализирует ошибкой:
Element-wise multiplication: not supported between ‘Matrix’ and ‘Matrix’ types
Пример использования оператора “@”:
1 |
bpy.context.region_data.view_rotation @ Vector((0.0, 0.0, 1.0)) |
Доступ к элементам привязки в Blender 2.8 Python API
Свойство, указывающее на выбранный тип привязки в Blender 2.7
1 |
bpy.context.scene.tool_settings.snap_element |
в Blender 2.8 изменилось на
1 2 |
bpy.context.scene.tool_settings.snap_elements # {'EDGE'} |
Указание центральной точки в Blender 2.8 Python API
Указание опорной точки в Blender 2.7
1 2 |
bpy.context.area.spaces[0].pivot_point # 'BOUNDING_BOX_CENTER': |
в Blender 2.8 API перемещено в:
1 2 |
bpy.context.scene.tool_settings.transform_pivot_point # 'MEDIAN_POINT' |
Свойство use_drag_immediately в Blender 2.8 Python API
Свойство use_drag_immediately в Blender 2.7
1 |
bpy.context.preferences.edit.use_drag_immediately |
в Blender 2.8 API перемещено в
1 2 |
bpy.context.preferences.inputs.use_drag_immediately # True |
Переключение системы координат в Blender 2.8 Python API
Обращение к текущей используемой системе координат, которое в Blender 2.7 осуществлялось через
1 |
bpy.context.space_data.transform_orientation |
в Blender 2.8 перенесено в коллекцию объектов TransformOrientatiosSlots. Для получения и изменения текущей системы координат нужно обращаться к объектам коллекции сцены transform_orientation_slots.
1 2 3 4 5 6 7 8 |
bpy.context.window.scene.transform_orientation_slots[0].type # 'GLOBAL' bpy.context.window.scene.transform_orientation_slots[0].type = 'LOCAL' bpy.context.window.scene.transform_orientation_slots[0].type # 'LOCAL' |
Как сделать объект (меш) активным в Blender 2.8 Python API
Для того, чтобы сделать меш (объект) активным в Blender 2.8 Python API вместо своства context.scene используется context.view_layer.
При попытке сделать меш активным через “bpy.context.scene.objects.active” Blender сигнализирует ошибкой:
AttributeError: bpy_prop_collection: attribute “active” not found
Чтобы сделать объект активным, нужно использовать следующую команду:
1 2 |
obj = bpy.context.window.scene.objects[0] bpy.context.view_layer.objects.active = obj # obj is the active object now |
Выбор объекта (меша) в Blender 2.8 Python API
В связи с изменениями Blender API в версии 2.8 выбор меша (объекта) теперь осуществляется с помощью геттера/сеттера.
При попытке проверить выбран ли объект через “bpy.context.active_object.select” Blender сигнализирует ошибкой:
AttributeError: ‘Object’ object has no attribute ‘select’
Для проверки, является ли объект выбранным в Blender 2.8 нужно использовать геттер:
1 2 |
bpy.context.active_object.select_get() # True |
Для того, чтобы выделить объект в Blender 2.8 нужно использовать сеттер:
1 |
bpy.context.active_object.select_set(state=True) |
Для снятия выбора нужно использовать тот же сеттер:
1 |
bpy.context.active_object.select_set(state=False) |
Портирование аддона для Blender 2.7 в Blender 2.8
В API последней версии Blender 2.8 разработчики внесли множество изменений, поэтому практически все скрипты и аддоны, написанные для более ранних версий Blender (2.7 и ниже), перестали работать. Для того, чтобы пользоваться полюбившимися аддонами в новой версии Blender, их нужно портировать – исправить их код для корректной работы с новым API Blender.
Изменения, которые необходимо внести в код аддона, чтобы он заработал в Blender 2.80:
Читать далее «Портирование аддона для Blender 2.7 в Blender 2.8»