Houdini 20.0 Pythonスクリプト

Pythonステート ドラッグアンドドロップ

drag dropアクションに反応するステートをセットアップする方法。

On this page

概要

Houdiniは、ステートをdrag dropレシーバーに変換することができます。 これによって、ユーザーが何かをシーンビューア上にドラッグアンドドロップした時にステートを反応させることができます。

ドラッグアンドドロップのイベントを制御する

ユーザーによって開始されたdragイベントの結果として、Houdiniは、3つのコールバックを順次コールしてそのイベントを制御します。 これらのコールバックはどれも必須であり、イベントを適切に制御できるように必ず実装してください。

drag dropイベント関連の情報にアクセスするには、以下のAPIを使用する必要があります:

drag dropイベントコールバックを以下に実行順で載せています。

名前

説明

onDragTest

エレメントがビューア内にドラッグされた時にHoudiniからコールされます。 このコールバックの目的は、イベントの制御に興味があるかどうかを決めることです。 Trueを返すとイベントを受け入れ、Falseを返すとイベントを拒否します。 拒否した場合、イベントは次のHoudinidrag dropレシーバーに送信されます。

onDropGetOptions

このコールバックは、ドラッグしたエレメントをビュー上にドロップした時にコールされます。 これによって、この特定のイベントに対して実行する色々なdropアクションを表現したオプションリストを構築することができます。 このコールバックは、onDragTestがイベントを受け入れた場合にのみコールされます。

Houdiniは、このオプションリストを使用して、ドロップオプションを選択するためのメニューを収集して表示します。 ただし、オプションが1個しか追加されていない場合には、このメニューは表示されません。 その場合、デフォルトでは単独オプションが選択されます。

このコールバックに渡される辞書には、以下の項目が含まれています:

drop_options

dropオプションリストを表現した辞書。

ids

オプション識別子のリストを格納するためのdrop_options辞書内のエントリー。

labels

オプションラベルのリストを格納するためのdrop_options辞書内のエントリー。

onDropAccept

Houdiniは、選択されたdropオプションを使ってこのメソッドをコールします。 このメソッドは、その選択を受け入れる場合はTrue、拒否する場合はFalseを返さなければなりません。 そのオプションが拒否された場合、drag dropオペレーションは中断されます。

このコールバックに渡される辞書には、以下の項目が含まれています:

drop_selection

選択されたオプション。

以下にdrag dropサポートについて説明した簡単なコードスニペットを載せています。 もっと詳細なサンプルは、$HH/viewer_states/examples/state_dragdrop_demo.hipシーンを確認してください。

import hou
import viewerstate.utils as su

class State(object):
    def __init__(self, state_name, scene_viewer):
        self.state_name = state_name
        self.scene_viewer = scene_viewer

    def onEnter(self,kwargs):
        self.scene_viewer.setPromptMessage( 
            'Drop a source file in the viewer', hou.promptMessageType.Prompt )

    def onDragTest( self, kwargs ):
        """テキストファイルのみを受け入れます。"""

        if not hou.ui.hasDragSourceData('text/plain'):
            self.scene_viewer.setPromptMessage( 'Invalid drag drop source', 
                hou.promptMessageType.Error )
            return False

        # 注: su.dragSourceFilepathは、ドラッグしたサニタイズ(無害化)済みのファイルパスを返します。
        su.log(su.dragSourceFilepath())

        return True

    def onDropGetOptions( self, kwargs ):
        """3つの項目でドロップオプションリストを収集します。"""

        kwargs['drop_options']['ids'] = ('option1', 'option2', 'option3')
        kwargs['drop_options']['labels'] = ('Option 1', 'Option 2', 'Option 3')

    def onDropAccept( self, kwargs ):
        """選択されたオプションでイベントを処理します。"""

        su.log( kwargs['drop_selection'] )

        return True

Pythonスクリプト

はじめよう

次のステップ

リファレンス

  • hou

    Houdiniにアクセスできるサブモジュール、クラス、ファンクションを含んだモジュール。

導師レベル

Python Viewerステート

Pythonビューアハンドル

プラグインタイプ