2016-08-26 7 views
0

私はBlender 3Dでモデリングを行っています。 そして私はBMeshを使います。オブジェクトのMESHモードが変更されてBMFaceアドレスが変更されるのはなぜですか?

そして、BMIFaceのアドレスを変数(sel_f)にEDITモードで保存します。

EDITモードから抜け出す。 OBJECTモードに入ります。

さらに、BMeshでEDITモードに入ります。

と私は

「sel_f.select =真」で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? 

答えて

0

object.data店、あなたが編集モードに切り替えるとメッシュデータを編集するために異なる構造にコピーされ、あなたが戻ってオブジェクトモードに切り替えると、編集メッシュバックobject.dataとにコピーされます編集メッシュが破棄されます。編集モードに戻ると編集用のメッシュの新しいコピーが作成されるので、以前のデータ位置は現在のメッシュデータを指しません。

手動でモードを切り替えるかスクリプトを使用するかは、同じプロセスが実行されます。

関連する問題