В Blender при назначении вертексам дополнительных свойств через систему слоев bmesh, к этим данным потом можно получить доступ напрямую из объекта, через его атрибуты.
Для примера назначим точкам текущего активного объекта кастомное свойство целочисленного типа int.
Загрузим данные активного меша в bmesh. Создадим при помощи bmesh слой типа int для вертексов. Зададим каждой точке на этом слое случайное значение 0 или 1 и сбросим данные обратно в объект.
1 2 3 4 5 6 |
obj_data = bpy.context.object.data bm = bmesh.from_edit_mesh(obj_data) vert_layer = bm.verts.layers.int.new('vert_layer') for v in bm.verts: v[vert_layer] = randint(0, 1) bmesh.update_edit_mesh(obj_data) |
Если мы посмотрим на список атрибутов объекта, мы увидим новый атрибут с именем “vert_layer”. Это как раз то имя, которое мы использовали при создании слоя bmesh.
Установленные через слой bmesh кастомные значения для точек мы можем получить через него.
1 2 3 |
[attr.value for attr in bpy.context.object.data.attributes['vert_layer'].data] # [0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, ... 1, 0] |
Для наглядности выделим точки, у которых наше кастомное свойство установлено в 1.
1 2 |
values = [attr.value for attr in bpy.context.object.data.attributes['vert_layer'].data] bpy.context.object.data.vertices.foreach_set('select', values) |
Мы получим следующий результат: