Копируем геометрию из bmesh в отдельный объект при помощи Blender Python API

При работе с объектом bmesh в Blender иногда возникает необходимость взять часть геометрии и перенести ее в отдельный меш. Рассмотрим, как это можно сделать при помощи Blender Python API.

Возьмем для примера объект, в котором у нас есть несколько выделенных полигонов. Создадим объект bmesh и перенесем в него данные с нашего текущего объекта.

Приведем в соответствие индексы точек и полигонов bmesh к индексам исходного меша.

Работать нужно в объектном режиме.

Пусть теперь нам нужно отделить выделенные полигоны в другой объект.

Список выделенных полигонов:

Получим список вертексов для всех выделенных полигонов.

И далее, список их координат.

Теперь нам нужно получить список через который мы сможем сопоставить индексы вертексов для полигонов из списка selected_faces с порядковым расположением вертексов в списке vertices.

Создадим словарь, в котором ключами будут являться индексы точек, а значениями – из порядковое положение в списке vertices.

И с его помощью свяжем каждый полигон с порядковым расположением индексов его вертексов.

Получив все нужные данные для переноса выделенной геометрии в новый меш, мы можем удалить ее в текущем объекте.

Теперь создадим новый меш на основе данных, полученных из исходного меша.

И прилинкуем его в сцену в ту же коллекцию.

После этого новый объект появится в 3D вьюпорте.

Обратите внимание, что на самом деле мы не “копировали” геометрию, а взяли данные с исходного меша и создали совершенно новый меш по этим данным. Поэтому в этом случае у нового меша будут отсутствовать материалы, текстуры, развертки и т.п., которые могли быть на исходном меше. Так же мы работали в локальных координатах, и если у исходного меша были непримененные трансформации, то координаты точек нового меша дополнительно нужно умножить на матрицу мира исходного меша.

0 0 голоса
Article Rating
Подписаться
Уведомить о
guest

0 Комментарий
Новые
Старые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии