なつねこメモ

主にプログラミング関連のメモ帳 ♪(✿╹ヮ╹)ノ 書いてあるコードは自己責任でご自由にどうぞ。記事本文の無断転載は禁止です。

Blender 4.1 以降で D&D に対応したい場合は、 FileHandler API を使おう

Blender 4.1 で念願のドラッグ&ドロップを検出する FileHandler API が追加されました。 これによって、例えば *.txt なファイルを 3D View にドロップしたら、なんらかのインポート処理をはしらせる、などと言った事が公式で可能になります。

使い方は公式サンプルにあるとおりですが、一応やってみましょう。 まずはドロップを検出したいファイルの拡張子を設定します。

import bpy

class VIEW3D_FH_Import_FBX(bpy.types.FileHandler):
    bl_idname = "VIEW3D_FH_Import_FBX"
    bl_label = "Import FBX File"
    bl_import_operator = "object.drop_event_listener"
    bl_file_extensions = ".fbx"

    @classmethod
    def poll_drop(cls, context: bpy.types.Context | None) -> bool:
        if context is None:
            return False
        return context and context.area and context.area.type == "VIEW_3D"

bl_file_extensions に拡張子を設定することで、対応するファイルがドロップされたら bl_import_operator に設定したオペレーターが呼ばれるようになります。 制約としては .fbx のように . から始める必要があります。 複数種類設定したい場合は .fbx;.blend などのように ; で区切ると良いです。 また、 idname の制約としても、 _FH_ がどこかに含まれていることが推奨されているので、それっぽい名前にしておきましょう。

オペレーターには、 filepath プロパティにドロップされたファイルのパスが設定されます。それ以外は、 invokepoll を他のオペレーター同様定義すれば良いという感じです。 若干複雑ですが、実際の動作例としてはわたしが作成しているアドオンのこちらを参照してください。

github.com

ということで、メモでした。