Перекинув геометрию меша в объект bmesh, можно легко находить смежные ребра между двумя вертексами, благодаря списку связанных с конкретным вертексом ребер.
Создадим объект bmesh и перекинем в него геометрию текущего активного меша.
1 2 3 4 5 6 |
import bmesh bm = bmesh.new() bm.from_mesh(bpy.context.object.data) bm.verts.ensure_lookup_table() bm.edges.ensure_lookup_table() |
Пусть у нас имеются два выделенных вертекса, запишем их в список:
1 2 3 |
vertices = [vertex for vertex in bm.verts if vertex.select] # [<BMVert(0x000002451BB9D008), index=17>, <BMVert(0x000002451BB9D158), index=23>] |
У каждого вертекса есть указатель на список прилинкованных к нему ребер: link_edges.
Для того чтобы найти ребро, лежащее между этими двумя вертексами и являющееся для них общим, нам нужно в двух списках ребер для обоих вертексов найти общий элемент.
Сделать это можно превратив каждый список в сет и выполнив операцию пересечения.
1 |
set(vertices[0].link_edges) & set(vertices[1].link_edges) |
Чтобы из пересечения получить указатель на само ребро, выполним функцию next(iter).
1 2 3 |
edge = next(iter(set(vertices[0].link_edges) & set(vertices[1].link_edges)), None) # <BMEdge(0x000002452970D600), index=35, verts=(0x000002451BBF6E88/17, 0x000002451BBF6FD8/23)> |
Таким образом общее ребро между двумя вертексами можно найти, используя всего одну строчку кода.