bmesh使って頂点の座標を取得しようとした
############################
a = bpy.context.object
bpy.ops.object.mode_set(mode='EDIT')
bm = bmesh.from_edit_mesh(a.data)
v=bm.edges[0]
hxyz=(v.verts[0].co+v].verts[1].co)/2
##################################
そしたら
v=bm.edges[0]
のところで
IndexError: BMElemSeq[index]: outdated internal index table, run ensure_lookup_table() first
というエラーが出た
pythonコンソールに手動で入力すると出なくてスクリプトをコピペするとエラーが出るという謎仕様でなかなか原因が分かんなかったけどちゃんとエラーメッセージ読んでみれば「最初にensure_lookup_table()を実行せよ」ってあるよね。
そいう言うわけでbm.edges.ensure_lookup_table()をv=bm.edges[0]の前に追加したら普通に動いた。
.ensure_lookup_table()についてはどうもbmeshに新しく頂点を追加したりしてデータが壊れたときに使うってあったけど、特にそういうことはしてない、一体何が原因なのか分からない。
面なのか辺なのか頂点なのかで使い分けるっぽい。
bm.faces.ensure_lookup_table()
bm.edges.ensure_lookup_table()
bm.verts.ensure_lookup_table()
解決後
############################
a = bpy.context.object
bpy.ops.object.mode_set(mode='EDIT')
bm = bmesh.from_edit_mesh(a.data)
bm.edges.ensure_lookup_table()
v=bm.edges[0]
hxyz=(v.verts[0].co+v].verts[1].co)/2
##################################