为什么用它的对象MESH模式改变更改BMFace地址?

时间:2016-08-26 04:20:30

标签: blender bpy

我正在使用Blender 3D进行建模。 我使用BMesh。

我在编辑模式下将BMFace的地址保存到变量(sel_f)。

我退出编辑模式。并进入OBJECT模式。

我再次使用BMesh进入编辑模式。

我用&#34来调用sel_f变量; sel_f.select = True"

但我收到错误消息" BMFace类型的BMesh数据已被删除。"

所以我重新定义了bm。

但旧的sel_f与新的sel_f变量的地址不同。

为什么不一样?

查看以下示例脚本。

>>> import bmesh
>>> 
>>> obj = bpy.context.active_object
>>> me = obj.data

>>> bm = bmesh.from_edit_mesh(me)
>>> 
>>> sel_f = bm.select_history[-1]
>>> 
>>> sel_f
〈BMFace(0x1E2918B0), index=2, totverts=4〉


Change MESH mode to "OBJECT mode" by manually. not by bpy script as below.
#  bpy.ops.object.mode_set(mode="OBJECT")



again Change MESH mode to "EDIT mode" by manually. not by bpy script as below.
#  bpy.ops.object.mode_set(mode="EDIT")


>>> sel_f    #  i know that this is normalcy.
〈BMFace dead at 0x0DBE2F68〉



>>> bm = bmesh.from_edit_mesh(me)
>>> sel_f = bm.select_history[-1]
>>> sel_f
〈BMFace(0x10FD3698), index=2, totverts=4〉     # Why not Same with above a address of BMFace?

1 个答案:

答案 0 :(得分:0)

object.data存储对象网格数据,当您切换到编辑模式时,网格数据被复制到不同的结构进行编辑,当您切换回对象模式时,编辑网格被复制回{{1}并且编辑网格被破坏。返回编辑模式会创建网格的新副本以进行编辑,因此任何先前的数据位置将不再指向当前网格数据。

无论您手动切换模式还是使用脚本,都会执行相同的过程。