Так называемая «не-манифолд» геометрия в 3D-объектах, это отдельные, висящие в пространстве, точки, ребра или полигоны, а так же отверстия в сплошном меше, выделяется в Blender через пункт меню 3D-вьюпорта: Select — Select All By Trait — Non Manifold. Также эту команду можно выполнить при помощи Blender Python API через оператор bpy.ops.mesh.select_non_manifold(). Если же мы работаем с геометрией через объект BMesh, в нем такого специального оператора не предусмотрено. Однако мы можем выделить такую не-манифолд геометрию самостоятельно.
Для начала возьмем текущий активный объект, создадим для него объект BMesh и сбросим в него копию всей геометрии объекта. Теперь нам нужно выделить всю не-манифолд геометрию в нем. Переключимся в режим редактирования, чтобы наглядно видеть выделение точек, ребер и полигонов.
|
1 2 |
bpy.ops.object.mode_set(mode = 'EDIT') bm = bmesh.from_edit_mesh(bpy.context.object.data) |
Снимем текущее выделение.
|
1 2 3 4 5 6 |
for vertex in bm.verts: vertex.select = False for edge in bm.edges: edge.select = False for face in bm.faces: face.select = False |
Начнем выделять не-манифолд ребра.
Будем считать не-манифолдными:
- висящие ребра — к которым не примыкает ни одного полигона
- к которым примыкает один полигон — это даст нам возможность выделить отверстия в сплошном меше
- к которым примыкает больше двух полигонов
Выделим такие ребра. Для корректного выделения выделяем не только сами ребра, но еще и точки, им принадлежащие.
|
1 2 3 4 5 |
for edge in bm.edges: if len(edge.link_faces) != 2: edge.select = True for vert in edge.verts: vert.select = True |
Выделим не-манифолд точки. Это просто точки, висящие в пространстве, т.е. к которым не принадлежат ни одного ребра.
|
1 2 3 |
for vert in bm.verts: if len(vert.link_edges) == 0: vert.select = True |
На этом все. Сбросим результат выделения обратно в меш и очистим объект BMesh.
|
1 2 |
bmesh.update_edit_mesh(bpy.context.object.data) bm.free() |
Как мы теперь наглядно видим, вся не-манифолд геометрия меша у нас теперь выделена и мы можем провести с ней нужные операции. Чаще всего — просто удалить.

.blend file on Patreon