В то время как блендер хранит данные сетки в пределах object.data
, эти данные действительны только в объектном режиме , когда вы переключаетесь в режим редактирования, создается bmesh-копия данных сетки, которая заменяет содержимое object.data
, когда вы покидаете режим редактирования. Поскольку вы используете дублируемую сетку при редактировании любых изменений выбора, которые вы делаете в object.data
, python не будет влиять на сетку редактирования и будет перезаписана при выходе из режима редактирования.
Когда вы используете bpy.ops.transform.resize()
, он работает с активным элементом, это означает, что для изменения размера многоугольника вам необходимо находиться в режиме редактирования. В режиме объекта один и тот же оператор изменит размер объекта.
Таким образом, вы можете использовать
bpy.data.objects['Cube.001'].data.polygons[0].select = True
bpy.ops.object.mode_set(mode='EDIT')
bpy.ops.transform.resize(value=(0, 0, 1))
bpy.ops.object.mode_set(mode='OBJECT')
, но с использованием bmesh является предпочтительным способом для редактирования сетки данных с питоном. Вы можете найти примеры использования bmesh here и более подробный пример редактирования bmesh data here.
Так быстрый пример, который масштабирует face[0]
на оси г будет -
import bpy
import bmesh
bm = bmesh.new()
bm.from_mesh(obj.data)
bm.faces.ensure_lookup_table()
bmesh.ops.scale(bm, verts=bm.faces[0].verts, vec=(0.0, 0.0, 1.0))
bm.to_mesh(obj.data)
bm.free()