編集モードの間、エディタはメッシュのミラーを処理し、編集モードを終了するとオブジェクトのデータとして保存されます。一方、スクリプトは、表示されていない基になる元のメッシュを変更します。編集モードを終了すると、編集メッシュが保存されるため、スクリプト化された変更はまったく表示されません。
これを回避する 1 つの方法は、編集モードの外でスクリプト化された変更を行うことです。
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")
もう 1 つは、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)
これは、Blender のスクリプト インターフェイスの文書化された落とし穴です。