Для того чтобы выбрать все объекты в Blender, на которые наложен нужный модификатор при помощи Blender Python API, нужно пробежать в цикле по всем объектам сцены, проверить наличие нужного модификатора и установить флаг выборки объекта равным True.
Выбрать объекты с модификатором по его имени
Пройдем в цикле по всем объектам сцены:
1 |
for obj in bpy.data.objects: |
Если объект соответствует условию – является мешем, на него наложены модификаторы и имя модификатора присутствует в списке модификаторов (например для модификатора Subdivision Surface):
1 |
if obj.type == 'MESH' and obj.modifiers and 'Subdivision' in obj.modifiers: |
Выделим его:
1 |
obj.select_set(True) |
Код целиком:
1 2 3 4 5 |
for obj in bpy.data.objects: if obj.type == 'MESH' and \ obj.modifiers and \ 'Subdivision' in obj.modifiers: obj.select_set(True) |
То же самое в одну строку:
1 |
[obj.select_set(True) for obj in bpy.context.blend_data.objects if obj.type == 'MESH' and obj.modifiers and 'Subdivision' in obj.modifiers] |
Выбрать объекты с модификатором по его типу
Имя модификатора может быть изменено пользователем, поэтому ориентироваться не него не всегда удобно. Вместо имени модификатор лучше использовать его тип.
Тип модификатора можно узнать из его свойства type.
1 2 |
bpy.context.object.modifiers['Subdivision'].type # 'SUBSURF' |
Тогда тот же самый код для выделения всех объектов с модификатором Subdivision Surface по его типу будет выглядеть следующим образом:
1 2 3 4 5 |
for obj in bpy.data.objects: if obj.type == 'MESH' and \ obj.modifiers and \ 'SUBSURF' in [mod.type for mod in obj.modifiers]: obj.select_set(True) |
И то же самое в одну строку:
1 |
[obj.select_set(True) for obj in bpy.context.blend_data.objects if obj.type == 'MESH' and obj.modifiers and 'SUBSURF' in [mod.type for mod in obj.modifiers]] |