Springhead
An open source physics engine for virtual reality, haptics and motion generation.

アプリケーションクラス Springheadのクラスは基本的に継承せずに使用するように設計されているが, FWAppおよびその派生クラスは例外であり,ユーザはFWAppあるいはその派生クラスを継承し, 仮想関数をオーバライドすることによって独自機能を実装する.

#include <SprFWApp.h>

FWAppに対する継承グラフ

Public 型

enum  { TypeNone, TypeGLUT, TypeGLUI }
 

Public メソッド

virtual void Init ()
 初期化 FWAppオブジェクトの初期化を行う.最初に必ず呼ぶ.
 
virtual void Init (int argc, char *argv[]=NULL)
 
void InitInNewThread ()
 Create new thead and start.
 
void EndThread ()
 
virtual void Display ()
 シーンの描画 シーンが表示されるときに呼ばれる. 描画処理をカスタマイズしたい場合にオーバライドする. デフォルトではFWSdk::Drawが呼ばれる.
 
void DisableIdleFunc ()
 IdleFuncの呼び出しを有効化/無効化する glutの場合,glutIdleFuncに対応する. [詳細]
 
void EnableIdleFunc (bool on=true)
 
void StartMainLoop ()
 メインループの実行 glutの場合,glutMainLoopの実行
 
void EndMainLoop ()
 メインループの終了 freeglutの場合,glutLeaveMainLoopを実行、それ以外の場合は exit(0)
 
virtual void IdleFunc ()
 アイドル処理 イベントが何もない場合にバックグラウンド処理を行う.
 
virtual void TimerFunc (int id)
 タイマー処理 繰り返し実行を行う. デフォルトではid = 0でコールバック
 
virtual void Reshape (int w, int h)
 描画領域のサイズ変更 [詳細]
 
virtual void Keyboard (int key, int x, int y)
 キーボードイベントのハンドラ [詳細]
 
virtual void MouseButton (int button, int state, int x, int y)
 マウスイベントのハンドラ
 
virtual void MouseMove (int x, int y)
 マウスイベントのハンドラ デフォルトでは左ドラッグで視点変更,右ドラッグでズームイン/アウト
 
virtual void Joystick (unsigned int buttonMask, int x, int y, int z)
 ジョイスティックのハンドラ
 
virtual void AtExit ()
 終了処理ハンドラ
 
virtual bool OnMouse (int button, int state, int x, int y)
 DVKeyMouseHandlerの仮想関数 デフォルトではFWAppの従来のイベントハンドラを呼びだすのみ. こちらを直接オーバライドしてもよい.
 
virtual bool OnMouseMove (int button, int x, int y, int zdelta)
 マウスが動いたときの処理 [詳細]
 
virtual bool OnDoubleClick (int button, int x, int y)
 ダブルクリック時の処理 [詳細]
 
virtual bool OnKey (int state, int key, int x, int y)
 キー入力処理 [詳細]
 
virtual void OnControlUpdate (FWControlIf *ctrl)
 GUI系イベントハンドラ [詳細]
 
FWWinIfCreateWin (const FWWinDesc &desc=FWWinDesc(), FWWinIf *parent=0)
 ウィンドウに対応するコンテキストを作る [詳細]
 
int NWin ()
 ウィンドウの数
 
FWWinIfGetWinFromId (int wid)
 ウィンドウをIDから探す [詳細]
 
FWWinIfGetWin (int index)
 ウィンドウを取得する [詳細]
 
FWWinIfGetCurrentWin ()
 現在のウィンドウを取得する
 
void DestroyWin (FWWinIf *win)
 ウィンドウを削除する
 
void SetCurrentWin (FWWinIf *win)
 現在のウィンドウを設定する
 
void PostRedisplay ()
 カレントウィンドウのノーマルプレーンを,再描画の必要に応じてマークする
 
int GetModifier ()
 Ctrl, Shift, Altの状態を返す 個々の派生クラスで実装される
 
void SetGRHandler (int type)
 描画の設定 FWGraphicsHandlerを設定する.最初に必ず呼ぶ.
 
GRDeviceIfGRInit ()
 FWGraphicsHandlerの初期化 FWGraphicsHandlerの初期化を行う.最初に必ず呼ぶ.
 
GRDeviceIfGRInit (int argc, char *argv[]=NULL, int type=TypeGLUT)
 
void GetDisplayLock ()
 Display関数呼び出しの排他ロックを取得する
 
void ReleaseDisplayLock ()
 Display関数呼び出しの排他ロックを解放する
 
void InitWindow ()
 削除候補API [詳細]
 
void Clear ()
 初期状態にする
 
void Reset ()
 リセットする
 
- Public メソッド inherited from FWAppBase
virtual void UserFunc ()
 ユーザ関数 メインループ実行中にユーザが処理を加えたい場合,ここに記述する. 物理シミュレーションのステップの前に呼ばれる.
 
FWSdkIfGetSdk ()
 SDKを取得する
 
void CreateSdk ()
 SDKを作成する
 
UTTimerIfCreateTimer (UTTimerIf::Mode mode=UTTimerIf::FRAMEWORK)
 タイマーを作成する [詳細]
 
UTTimerIfGetTimer (int i)
 タイマーを取得する [詳細]
 
int NTimers ()
 
- Public メソッド inherited from UTRefCount
 UTRefCount (const UTRefCount &r)
 
UTRefCountoperator= (const UTRefCount &r)
 
int AddRef () const
 
int DelRef () const
 
int RefCount () const
 

Static Public メソッド

static FWAppGetApp ()
 FWAppインスタンスを取得する
 

Protected 型

typedef std::vector< UTRef
< FWWinIf > > 
Wins
 
- Protected 型 inherited from FWAppBase
typedef std::vector< UTRef
< UTTimerIf > > 
Timers
 

Protected メソッド

void AssignScene (FWWinIf *win)
 ウィンドウにシーンを与える [詳細]
 
void StartInThread ()
 Initialize in new thead.
 
void CheckAndPostRedisplay ()
 

Protected 変数

bool bThread
 GLUTを別スレッドで動かす場合 true.
 
volatile bool bPostRedisplay
 別スレッドに再描画の要求をするためのフラグ true で再描画
 
volatile bool bEndThread
 別スレッドの場合にスレッドを終了させる。
 
UTCriticalSection displayLock
 
Wins wins
 
- Protected 変数 inherited from FWAppBase
UTRef< FWSdkIffwSdk
 Framework SDK.
 
Timers timers
 Timers to call periodic processing.
 

Static Protected 変数

static FWAppinstance
 唯一のFWAppインスタンス
 

フレンド

class FWAppThreadCall
 

列挙型

anonymous enum
列挙型の値
TypeNone 

アダプタ無し

TypeGLUT 

GLUT.

TypeGLUI 

GLUI.

関数

void AssignScene ( FWWinIf win)
protected
引数
winシーンを割り当てるウィンドウ winに,既存のウィンドウが割り当てられていないシーンを割り当てる. 該当するシーンが見つからない場合,あるいはwinに既にシーンが割り当てられている場合は何もしない.
FWWinIf* CreateWin ( const FWWinDesc desc = FWWinDesc(),
FWWinIf parent = 0 
)
引数
descディスクリプタ
parent親ウィンドウ ウィンドウを作成する.対応するレンダラは新しく作成され, 既存のウィンドウが割り当てられていないシーンが関連づけられる. parentが指定された場合はparentを親ウィンドウとする子ウィンドウを作成する

参照元 FWApp::InitWindow().

void DisableIdleFunc ( )
inline

*一般性を持たせ、かつ他とあわせるためにEnableIdleFuncを追加しました。 DisableIdleFuncも残していますがobsoleteとしたいと思います。

FWWinIf* GetWin ( int  index)
引数
index何番目のウィンドウを取得するか indexで指定されたウィンドウを取得する. DestroyWinを呼ぶとインデックスは変化するので注意が必要.
FWWinIf* GetWinFromId ( int  wid)
引数
widウィンドウID glutの場合,widはglutGetWindowが返す識別子.
void InitWindow ( )
inline

ウィンドウを1つだけ作成

参照先 FWApp::CreateWin(), と FWApp::NWin().

virtual void Keyboard ( int  key,
int  x,
int  y 
)
inlinevirtual
引数
keyキーコード
xカーソルx座標
yカーソルy座標 特殊キーのキーコードは使用するグラフィクスライブラリに依存する.

*GLUTの場合,glutKeyboardFuncコールバックとglutSpecialFuncコールバックで キーコードが重複している.そこでglutSpecialFuncコールバックに渡されたキーコードには 256が加算されてKeyboardに渡される.

SampleApp, MyApp, PHOpDemo, VirtualHuman, MyApp, MyApp, VTraj, PHOpDemo, MyApp, IK, IK, FWHapticSample, App, FWMultiWinSample, FWFileLoaderSample, FWGLUISample, FWAppSample, と FWVrmlfileLoaderで再定義されています。

参照元 FWApp::OnKey().

virtual void OnControlUpdate ( FWControlIf ctrl)
inlinevirtual
引数
ctrl更新が生じたコントロール 更新イベントの発生条件は以下のとおり: FWButtonIf: ボタンが押された FWTextBoxIf: テキストが変更された FWRotationControlIf: 回転した FWTranslationControlIf: 平行移動した

MyAppで再定義されています。

virtual bool OnDoubleClick ( int  button,
int  x,
int  y 
)
inlinevirtual
引数
buttonButtonMask列挙子の組み合わせ
xカーソルのx座標
yカーソルのy座標

DVKeyMouseCallbackを再定義しています。

virtual bool OnKey ( int  state,
int  key,
int  x,
int  y 
)
inlinevirtual
引数
stateDVKeySt列挙子の値
keyasciiコードかDVKeyCode列挙子の値
xカーソルのx座標
yカーソルのy座標

DVKeyMouseCallbackを再定義しています。

参照先 FWApp::Keyboard().

virtual bool OnMouseMove ( int  button,
int  x,
int  y,
int  zdelta 
)
inlinevirtual
引数
buttonButtonMask列挙子の組み合わせ
xカーソルのx座標
yカーソルのy座標
zdeltaマウスホイールの変化量

zdeltaはマウスホイールに対応するデバイスを使用する場合のみ有効.

DVKeyMouseCallbackを再定義しています。

PHOpDemo, と PHOpDemoで再定義されています。

参照先 FWApp::MouseMove().

virtual void Reshape ( int  w,
int  h 
)
virtual
引数
w描画領域の横幅
h描画領域の縦幅 ユーザによってウィンドウサイズが変更されたときなどに呼ばれる.

このクラスの説明は次のファイルから生成されました: