2013-12-03 2 views
3

Я сделал куб в Blender. Использование Python я войти в режим редактирования и выбран одну вершину:Выбранная вершина не выделялась в Blender 3D

import bpy 

bpy.ops.mesh.primitive_cube_add() 
bpy.ops.object.mode_set(mode="EDIT") 
bpy.ops.mesh.select_all(action="DESELECT") 
bpy.context.tool_settings.mesh_select_mode = (True , False , False) 
bpy.context.object.data.vertices[0].select = True 

bpy.context.object.data.vertices[0].co = (-3,-2,-3) 

Однако вершина не выделяется оранжевым цветом, и хотя я сказал вершину идти до -3, -2 -, - 3 его позиция не обновлялась.

Почему он не выделяет и не перемещает?

+0

Может быть, вам нужно перерисовать 3d-view через код? –

ответ

5

В режиме редактирования редактор обрабатывает зеркало сетки, которое затем сохраняется как данные объекта после выхода из режима редактирования. В то же время ваш сценарий изменяет исходную сетку, которая не отображается. Оставляя editmode сохраняет сетку редактирования, поэтому сценарии изменений вообще не отображаются.

Один из способов обойти это делать скриптовые изменения вне режима редактирования:

import bpy 

bpy.ops.mesh.primitive_cube_add() 
bpy.ops.object.mode_set(mode="EDIT") 
bpy.ops.mesh.select_all(action="DESELECT") 
bpy.context.tool_settings.mesh_select_mode = (True , False , False) 
bpy.ops.object.mode_set(mode="OBJECT") 
bpy.context.object.data.vertices[0].select = True 
bpy.context.object.data.vertices[0].co = (-3,-2,-3) 
bpy.ops.object.mode_set(mode="EDIT") 

Другой просить редактирования BMesh:

import bpy, bmesh 

bpy.ops.mesh.primitive_cube_add() 
bpy.ops.object.mode_set(mode="EDIT") 
bpy.ops.mesh.select_all(action="DESELECT") 
bpy.context.tool_settings.mesh_select_mode = (True , False , False) 
mesh=bmesh.from_edit_mesh(bpy.context.object.data) 
mesh.verts[0].select = True 
mesh.verts[0].co = (-3,-2,-3) 

Это documented gotcha из сценариев в Blender интерфейс.

+0

Начиная с версии 2.73 вам может потребоваться добавить 'if hasattr (mesh.verts," обеспечить_lookup_table "): mesh.verts.ensure_lookup_table()' перед доступом к вершинам BMesh, чтобы избежать получения «IndexError». – Banana