Translations:Code snippets/15/ja

Pythonから3Dビューアーのマウスイベントを監視
Inventorフレームワークでは　複数のコールバック用ノードをビューアーへのシーングラフへ追加することができます. デフォルトではFreeCADはビューアーごとに一つのコールバック用ノードがインストールされており、それを使うとグローバルまたはスタティックなC++関数を追加することができます. 適切なPythonバインディングではこのテクニックをPythonコードから利用するためのメソッドが提供されています.

App.newDocument v=Gui.activeDocument.activeView class ViewObserver: def logPosition(self, info): down = (info["State"] == "DOWN") pos = info["Position"] if (down): FreeCAD.Console.PrintMessage("Clicked on position: ("+str(pos[0])+", "+str(pos[1])+")\n") o = ViewObserver c = v.addEventCallback("SoMouseButtonEvent",o.logPosition)
 * 1) このクラスは全てのマウスボタンイベントを記録します. 登録されたコールバック関数は'down'イベントと'up'イベントで
 * 2) 二回、ファイヤーします. これをハンドリングするためのブール値フラグが必要です.

さあ、3Dビューアーの領域のどこかをピックして出力ウィンドウにメッセージが表示されるのを見てください. 監視を終了するには次のようにします.

v.removeEventCallback("SoMouseButtonEvent",c)

次のイベント型がサポートされています.
 * SoEvent -- 全ての種類のイベント
 * SoButtonEvent -- 全てのマウスボタンイベントとキーイベント
 * SoLocation2Event -- 2D動作イベント（通常はマウス動作）
 * SoMotion3Event -- 3D動作イベント（通常はスペースボール）
 * SoKeyboardEvent -- キーダウンイベントとキーアップイベント
 * SoMouseButtonEvent -- マウスのボタンダウンイベントとボタンアップイベント
 * SoSpaceballButtonEvent -- スペースボールのボタンダウンイベントとボタンアップイベント

addEventCallbackによって登録されるPython関数は辞書を要求します. 検知されたイベントに従って辞書には様々なキーが保持されます. 全てのイベントは次のキーを持ちます： 全てのボタンイベント、つまりキーボードイベント、マウスイベント、スペースボールイベントの場合： キーボードイベントの場合： マウスボタンイベントの場合： スペースボールイベントの場合： そして最後にモーションイベントの場合：
 * Type -- イベント型の名前、つまりSoMouseEvent、SoLocation2Event、・・・などです.
 * Time -- 文字列形式での現在時刻
 * Position -- マウス位置を表す二つの整数のタプル
 * ShiftDown -- ブール値. Shiftが押されている場合はtrue、それ以外の場合はfalse.
 * CtrlDown -- ブール値. Ctrlが押されている場合はtrue、それ以外の場合はfalse.
 * AltDown -- ブール値. Altが押されている場合はtrue、それ以外の場合はfalse.
 * State -- ボタンが離された場合は'UP'、押された場合は'DOWN'、それ以外の場合は'UNKNOWN'の文字列
 * Key -- 押されたキーの文字
 * Button -- 押されたボタン. BUTTON1、・・・、BUTTON5など.
 * Button -- 押されたボタン. BUTTON1、・・・、BUTTON7など.
 * Translation -- 三つの浮動小数点数のタプル
 * Rotation -- 回転のクォータニオン、つまり四つの浮動小数点数のタプル