2013-03-15 134 views
8

問:在攪拌機2.64,我在與選定的一些頂點編輯模式的網格。如何在Python腳本中獲取或生成選定頂點的索引列表?攪拌機腳本:選中的頂點的指數

我找到了攪拌機的Python API參考完全混亂的導航,而谷歌大多指向過時的API。對於Blender腳本專業人員來說,這很有希望。

該指數應與網格的OBJ導出頂點索引一致。我想編寫一個腳本在文本文件中導出頂點索引,以便在C++程序中訪問這些頂點。

回答

8

您的代碼只有當你切換你執行它之前反對模式可靠地工作。原因是,在編輯模式下,網格數據不與來自對象模式的網格同步。這是在切換回對象模式時完成的。您可以通過切換到編輯模式驗證這一點,請從你的對象一些頂點,執行你的代碼,然後選擇不同的頂點(仍然在編輯模式下),然後再次運行你的腳本。您會注意到您的Python控制檯中的所選頂點列表不會更改。此行爲isdocumented。爲了獲得在編輯模式下選擇的頂點下面的代碼可以作爲第一指針(與2.66.5 r56033測試):

import bpy 
import bmesh 

obj=bpy.context.object 
if obj.mode == 'EDIT': 
    bm=bmesh.from_edit_mesh(obj.data) 
    for v in bm.verts: 
     if v.select: 
      print(v.co) 
else: 
    print("Object is not in edit mode.") 

選擇/取消節點和執行腳本看到頂點改變。

+0

輸出類似於<矢量(1.0000,1.0000,-1.0000)> – Nianliang

+0

我需要用「v.index」而不是「v.co」來獲得指標。 – Nianliang

6

終於找到了在Blog,美觀大方,結構緊湊:

Verts = [i.index for i in bpy.context.active_object.data.vertices if i.select] 

它是在OBJ出口的頂點順序(Blender.2.64)確實是一致的。

+0

輸出類似於[0,5] Blender 2.70,是我想要的! – Nianliang

2

基於@hochl和@DCS,在編輯模式下,在Python控制檯運行下面的行:

import bmesh; [i.index for i in bmesh.from_edit_mesh(bpy.context.active_object.data).verts if i.select] 

*攪拌機版2.70(2.70,2014-APR-10)