8

Q: Blender 2.64で、いくつかの頂点が選択された編集モードのメッシュがあります。Pythonスクリプトで選択した頂点のインデックスのリストを取得または生成するにはどうすればよいですか?

Blender Python APIリファレンスはナビゲートするのが非常に混乱していると思います。そして、Googleは主に古いAPIを指しています。これは、Blenderスクリプトのプロにとっては些細なことです。

インデックスは、メッシュのOBJエクスポートの頂点インデックスと一致している必要があります。C ++プログラムでこれらの頂点にアクセスするために、テキストファイルの頂点インデックスをエクスポートするスクリプトを作成したいと思います。

4

3 に答える 3

12

コードを実行する前にオブジェクトモードに切り替えた場合にのみ、コードは確実に機能します。その理由は、編集モードでは、メッシュデータがオブジェクトモードのメッシュと同期されないためです。これは、オブジェクトモードに戻るときに行われます。これを確認するには、編集モードに切り替えて、オブジェクトからいくつかの頂点を選択し、コードを実行してから、別の頂点を選択して(編集モードのまま)、スクリプトを再実行します。Pythonコンソールで選択した頂点のリストは変更されないことに気付くでしょう。この動作 文書化されています。選択した頂点を編集モードで取得するには、次のコードを最初のポインターとして使用できます(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.")

ノードを選択/選択解除し、スクリプトを実行して頂点の変化を確認します。

于 2013-04-21T00:07:53.607 に答える
7

ついにブログでそれを見つけました、素晴らしくてコンパクトです:

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

それは確かにOBJエクスポート(Blender.2.64)の頂点の順序と一致しています。

于 2013-03-15T12:59:18.580 に答える
5

@hochlと@DCSに基づいて、編集モードで、Pythonコンソールで次の行を実行します。

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

* Blenderバージョン2.70(2.70、2014年4月10日)

于 2014-08-11T16:44:49.480 に答える