Модуль BMesh предоставляет пользователям Blender Python API гораздо более широкие возможности по редактированию мешей, чем обычная структура данных объекта.
Объект BMesh создается из текущего активного меша следующим образом:
1 2 3 |
import bmesh bm = bmesh.from_edit_mesh(bpy.context.object.data) |
При этом меш должен находиться в режиме редактирования Edit mode.
Для создания новой точки используется метод new() коллекции verts объекта BMesh. В параметре метода передаются координаты, в каком месте должна быть создана эта точка. Координаты считаются в локальной системе координат объекта.
Для примера создадим копии всех выделенных точек меша, подняв их на 3 единицы по оси Z.
Пройдем в цикле по всем выделенным точкам, получим их координаты, прибавим 3 к Z-компоненте координат и создадим новые точки в нужном месте.
1 2 3 4 5 |
for vert in bm.verts: if vert.select: co = vert.co.copy() co.z += 3 new_vert = bm.verts.new(co) |
Для удаления точек в BMesh используется метод remove коллекции verts объекта BMesh.
Теперь давайте удалим изначально выделенные точки, с которых мы делали копии.
1 2 3 |
for vert in bm.verts: if vert.select: bm.verts.remove(vert) |
В параметре метода remove() передается указатель на точку, которую нужно удалить.
Сбросим все проделанные изменения в исходный меш, чтобы они отобразились во вьюпорте, и очистим объект BMesh.
1 2 3 |
bmesh.update_edit_mesh(bpy.context.object.data) bm.free() |