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