2016-07-13 3 views
0

В Blender 2.77 я многоугольник, обозначенный как:Как я могу в Blender получить многоугольник, который задается индексами, для оператора?

bpy.data.objects['Cube.001'].data.polygons[0] 

и оператор:

bpy.ops.transform.resize(value=(0, 0, 1), constraint_axis=(False, False, False), constraint_orientation='GLOBAL', mirror=False, proportional='DISABLED', proportional_edit_falloff='SMOOTH', proportional_size=1) 

Как я могу сделать оператор будет выполняться на полигоне? Я пробовал:

bpy.data.objects['Cube.001'].data.polygons[0].select = True 

для выбора, но это не казалось работать.

ответ

0

В то время как блендер хранит данные сетки в пределах 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() 
0

Похоже, что вам нужно, чтобы переключиться обратно в режим OBJECT, чтобы сделать ... многоугольники [0] .select

# assume in EDIT... mode now 
bpy.data.objects['Cube.001'].data.polygons[0] 
bpy.ops.object.editmode_toggle() 
bpy.data.objects['Cube.001'].data.polygons[0].select = True 
bpy.ops.object.editmode_toggle() 
bpy.ops.transform.resize(value=(0, 0, 1), 
        constraint_axis=(False, False, False), 
        constraint_orientation='GLOBAL', 
        mirror=False, 
        proportional='DISABLED', 
        proportional_edit_falloff='SMOOTH', 
        proportional_size=1) 

 Смежные вопросы

  • Нет связанных вопросов^_^