0

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

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

我退出编辑模式。并进入对象模式。

我再次使用 BMesh 进入 EDIT 模式。

我用“sel_f.select = True”调用 sel_f 变量

但我收到错误消息“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?
4

1 回答 1

1

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

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

于 2016-08-26T10:30:48.977 回答