| On this page | 
概要 ¶
Houdiniは、ステートをdrag dropレシーバーに変換することができます。
これによって、ユーザーが何かをシーンビューア上にドラッグアンドドロップした時にステートを反応させることができます。
ドラッグアンドドロップのイベントを制御する ¶
ユーザーによって開始されたdragイベントの結果として、Houdiniは、3つのコールバックを順次コールしてそのイベントを制御します。
これらのコールバックはどれも必須であり、イベントを適切に制御できるように必ず実装してください。
drag dropイベント関連の情報にアクセスするには、以下のAPIを使用する必要があります: 
- 
        
        hou.ui.hasDragSourceData: イベントソースが指定したタイプに対応しているか検証します。 
- 
        
        hou.ui.getDragSourceData: イベントソースのデータにアクセスします。 
drag dropイベントコールバックを以下に実行順で載せています。
| 名前 | 説明 | 
|---|---|
| 
                 | エレメントがビューア内にドラッグされた時にHoudiniからコールされます。
    このコールバックの目的は、イベントの制御に興味があるかどうかを決めることです。
     | 
| 
                 | このコールバックは、ドラッグしたエレメントをビュー上にドロップした時にコールされます。
    これによって、この特定のイベントに対して実行する色々な Houdiniは、このオプションリストを使用して、ドロップオプションを選択するためのメニューを収集して表示します。 ただし、オプションが1個しか追加されていない場合には、このメニューは表示されません。 その場合、デフォルトでは単独オプションが選択されます。 このコールバックに渡される辞書には、以下の項目が含まれています: 
 
 
 オプション識別子のリストを格納するための 
 オプションラベルのリストを格納するための | 
| 
                 | Houdiniは、選択された このコールバックに渡される辞書には、以下の項目が含まれています: 
 選択されたオプション。 | 
以下に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