ユーザーブロマガは2021年10月7日(予定)をもちましてサービスを終了します

blender+pythonスプリクト用メモ 8/24 選択中のloopのindex番号を取得したい 
閉じる
閉じる

新しい記事を投稿しました。シェアして読者に伝えましょう

×

blender+pythonスプリクト用メモ 8/24 選択中のloopのindex番号を取得したい 

2015-08-24 22:54
    昨日悩んでて出来なかったのが上手く行ったので貼り貼り
    例によって半角スペースはブログに貼り付けると消えるので全部全角スペースに置き換え

    import bpy
    import bmesh

    #アクティブオブジェクト取得するのにオブジェクトモードに行かないと駄目っぽい
    bpy.ops.object.mode_set(mode='OBJECT')
    obj = bpy.context.active_object
    mesh = obj.data

    #頂点情報を得るためにエディットモードに移行
    bpy.ops.object.mode_set(mode='EDIT')
    bm = bmesh.from_edit_mesh(obj.data)

    #まずfaceを取得して
    for face in bm.faces:
        #face経由じゃないとloopsでforが効かないっぽい
        for loop in face.loops:
            #loopsに対応したvertが取得できるのでvertの方で選択状態か判別
            #loops自体がselect持ってくれてないので
            vert_now = loop.vert
            if vert_now.select:
                #やっといま選択中のloopのindex番号を取得できた
                print(loop.index)


    選択中の頂点番号(vertsのindex番号)はネット徘徊して取得方法わかったんだけど
    loopとかいう扱いの方の番号の取得方法がわかんなかったので
    1頂点に付き接している面(エッジ?)分の番号を何か持ってるらしいのよね
    で法線とか頂点カラーはとはこっちのloop方の情報として持ってる臭くて
    (頂点カラーがエッジで別れてパキッと色ついたりとか法線がわかれてエッジが立ったりするのはそのせいっぽい?)
    頂点番号とかいらないんですけど!こっちがないといろいろできないんですけど!!
    みたいな感じだったので困ってたのが解決 嬉しい という話


    一昨日ブログにペタリした法線と頂点色行き来するスプリクトはオブジェクトの頂点一括処理とかな感じの命令ばっかだったから
    選択してるところだけ取り出したいとかいらなかったけど次のは普通に使うので


    もうちょい書きたいことあるんだけど
    新規記事を作るほどでもなくてでも前後の記事は長くなりすぎちゃってるのでここに追記

    blenderのpythonを触ってみて思ったのはなんかEDIT、OBJECTその他のモードの行き来に
    すげー気を使った方がいいっぽいなーって
    なんかこれいききするだけで取得してたはずのデータのつながりがダメに成ったりとか
    これ普通このモードで使う命令文じゃねーの?っていうのが他のモードじゃないと動かなかったりとか
    数回モード移動するだけならいいけど反復処理のなかでモード移行する必要性が生じた時は
    モード移行の回数と処理中のオブジェクトの重さでかなり処理が遅延したりする

    どうにかならんのかなーこれ
    (日曜スプリッターの愚痴なので間違ってる可能性は大いにあるけど)
    愚痴も兼ねつつ、個人的に思った注意点
    ネットの情報って誰かの役に立つこともあるかもしれんから一応ねほんと
    広告
    コメントを書く
    コメントをするには、
    ログインして下さい。