Зачем менять адрес BMFace при смене режима объекта MESH?

Я работаю моделингом от Blender 3D. И я использую BMesh.

И я сохраняю адрес BMFace в переменной (sel_f) в режиме редактирования.

И я выхожу из режима редактирования. и войдите в режим ОБЪЕКТ.

И я снова вхожу в режим редактирования с BMesh.

И я называю переменную sel_f с "sel_f.select = True"

Но я получаю сообщение об ошибке "Данные BMesh типа BMFace были удалены".

Так что я пересмотрел БМ.

Но старый 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 ответ

object.data сохраняет данные сетки объектов, когда вы переключаетесь в режим редактирования, данные сетки копируются в другую структуру для редактирования, когда вы переключаетесь обратно в режим объекта, сетка редактирования копируется обратно в object.data и сетка редактирования уничтожена. Возвращение в режим редактирования создает новую копию меша для редактирования, поэтому любые предыдущие местоположения данных больше не будут указывать на текущие данные меша.

Тот же процесс выполняется независимо от того, переключаете ли вы режимы вручную или используете скрипт.

Другие вопросы по тегам