2016-08-26 3 views
0

Я работаю над моделью Blender 3D. И я использую BMesh.Зачем менять адрес BMFace с изменением режима объекта MESH?

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

И я выхожу из режима EDIT. и войдите в режим OBJECT.

И снова войдите в режим EDIT с BMesh.

И я называю переменной sel_f с «sel_f.select = True»

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

Так что я reDefined 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? 

ответ

0

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^