FineKernelToolKit 4.2.13
|
FLTK 用シーン描画ウィジェットクラス [詳解]
#include <FK/Window.h>
公開メンバ関数 | |
fk_Window (int x=0, int y=0, int w=300, int h=300, std::string name="FK Window") | |
コンストラクタ | |
virtual | ~fk_Window () |
デストラクタ | |
シーン制御関数 | |
void | setScene (fk_Scene *scene) |
シーン登録関数 | |
イベント・デバイス制御関数 | |
int | drawWindow (bool drawFlag=true) |
描画更新関数 | |
bool | winOpenStatus (void) |
描画状態取得関数 | |
void | resizeWindow (int x, int y, int w, int h) |
描画領域寸法変更関数 | |
bool | getKeyStatus (char key, fk_Switch status, bool insideFlag=true) |
標準キー状態取得関数1 | |
bool | getKeyStatus (char key, bool insideFlag=true) |
標準キー状態取得関数2 | |
bool | getSpecialKeyStatus (fk_Key key, fk_Switch status, bool insideFlag=true) |
特殊キー状態取得関数1 | |
bool | getSpecialKeyStatus (fk_Key key, bool insideFlag=true) |
特殊キー状態取得関数2 | |
bool | getKeyStatus (fk_Key key, fk_Switch status, bool insideFlag=true) |
特殊キー状態取得関数3 | |
bool | getKeyStatus (fk_Key key, bool insideFlag=true) |
特殊キー状態取得関数4 | |
char | getLastKey (void) |
最終押下キー取得関数 | |
std::tuple< int, int > | getMousePosition (bool insideFlag=true) |
マウスポインタ位置取得関数 | |
bool | getMouseStatus (fk_MouseButton button, fk_Switch status, bool insideFlag=true) |
マウスボタン状態取得関数 | |
int | getMouseWheelStatus (void) |
マウスホイール回転量取得関数 | |
フレームレート制御関数 | |
void | setFPS (int fps) |
投影座標・空間座標変換関数 | |
std::tuple< bool, fk_Vector > | getProjectPosition (double x, double y, fk_Plane &plane) |
投影平面から任意平面への射影点算出関数 | |
std::tuple< bool, fk_Vector > | getProjectPosition (double x, double y, double dist) |
投影平面から任意距離での射影点算出関数 | |
std::tuple< bool, fk_Vector > | getWindowPosition (fk_Vector &pos_3D) |
空間座標から投影座標への射影点算出関数 | |
シェーダー対応設定用関数 | |
virtual void | preInit (void) |
初期化前処理関数 | |
virtual void | postInit (void) |
初期化後処理関数 | |
virtual void | preDraw (void) |
描画前処理関数 | |
virtual void | postDraw (void) |
描画後処理関数 | |
描画画像取り込み関数 | |
bool | snapImage (std::string fileName, fk_ImageType format=fk_ImageType::BMP, fk_SnapProcMode mode=fk_SnapProcMode::FRONT) |
描画画像ファイル出力関数 | |
bool | snapImage (fk_Image *image, fk_SnapProcMode mode=fk_SnapProcMode::FRONT) |
描画画像データ出力関数 | |
静的公開メンバ関数 | |
メッセージ出力制御関数 | |
static void | setPutStrMode (const fk_PutStrMode mode) |
メッセージ出力モード設定関数 | |
static fk_PutStrMode | getPutStrMode (void) |
メッセージ出力モード参照関数 | |
static bool | setPutFile (const std::string &fileName) |
メッセージ出力用ファイル設定関数 | |
static void | putString (const std::string &str) |
メッセージ出力文字列設定関数 | |
static void | printf (const char *format,...) |
メッセージ出力書式付き設定関数 | |
static void | clearBrowser (void) |
メッセージ出力用ブラウザ初期化関数 | |
static void | fontInit (void) |
フォント初期化関数 | |
FLTK 用シーン描画ウィジェットクラス
このクラスは、FK によるシーンを FLTK 用ウィジェットとして作成、制御するための機能を提供します。
fk_Window クラスは、FLTK の Fl_Gl_Window の派生クラスとなっています。 実際にアプリケーションとして表示を行うには、 Fl_Window によってウィンドウを生成し、 この fk_Window インスタンスを子ウィジェットとして登録する必要があります。 具体的な利用方法はユーザーズマニュアルのウィンドウに関する章や、 サンプルプログラムを参照して下さい。
fk_Window クラスが持つ機能は、以下のように多岐に渡ります。
しかし、シーンを表示するのに最低限必要な関数は setScene(), drawWindow(), winOpenStatus() の 3 つ (と、 Fl::wait() もしくは Fl::check()) のみです。 その他の関数は、必要に応じて参照して下さい。
本クラスの解説では、「投影座標」というものが多く登場します。 投影座標とは描画領域の左上を原点とし、 x 軸の正方向を右向き、y 軸の正方向を下向きとする平面座標系のことです。 数値はピクセル幅となります。 例えば、描画領域の大きさが (400, 500) であった場合、 その中心の投影座標は (200, 250)、右上端の投影座標は (400, 0) となります。
FK::fk_Window::fk_Window | ( | int | x = 0 , |
int | y = 0 , |
||
int | w = 300 , |
||
int | h = 300 , |
||
std::string | name = "FK Window" |
||
) |
コンストラクタ
[in] | x | 描画領域左上位置 x 座標 |
[in] | y | 描画領域左上位置 y 座標 |
[in] | w | 描画領域横幅 |
[in] | h | 描画領域縦幅 |
[in] | name | ウィジェット名称 |
|
virtual |
デストラクタ
void FK::fk_Window::setScene | ( | fk_Scene * | scene | ) |
シーン登録関数
シーンを本ウィジェットの描画対象として登録します。
[in] | scene | シーンインスタンス |
int FK::fk_Window::drawWindow | ( | bool | drawFlag = true | ) |
描画更新関数
画面の描画を行います。 この関数を呼ばない限りは、シーン内のモデル状態に変更があっても、 画面には反映されません。
[in] | drawFlag | true の場合、正常に画面を更新します。 false の場合は、正常に画面更新が行えるかどうかだけの判定を行い、 実際の画面更新は行いません。 |
bool FK::fk_Window::winOpenStatus | ( | void | ) |
描画状態取得関数
drawWindow() を呼んだ後、実際に描画が適切に行われているかどうかを参照します。
void FK::fk_Window::resizeWindow | ( | int | x, |
int | y, | ||
int | w, | ||
int | h | ||
) |
描画領域寸法変更関数
描画領域の位置と大きさを変更します。
[in] | x | 描画領域左上位置 x 座標 |
[in] | y | 描画領域左上位置 y 座標 |
[in] | w | 描画領域横幅 |
[in] | h | 描画領域縦幅 |
bool FK::fk_Window::getKeyStatus | ( | char | key, |
fk_Switch | status, | ||
bool | insideFlag = true |
||
) |
標準キー状態取得関数1
指定したキーの現在の押下状態を参照します。 例えば、「a」キーが押されているかどうかを調べる場合は、 以下のようなコードを記述します。
fk_Window win; if(win.getKeyStatus('a', fk_Switch::PRESS, true) == true) { // 押されている場合の処理 }
特殊キーの状態については、 getSpecialKeyStatus(fk_Key, fk_Switch, bool) を用いてください。
[in] | key | キーを表す文字。ここには、スペース(' ') や数字 ('1') なども含みます。 |
[in] | status | 取得したい状態を指定します。種類については fk_Switch を参照してください。 |
[in] | insideFlag | true だった場合、 マウスポインタが描画領域の外にあった場合は無条件に false を返します。 false だった場合は、マウスポインタの位置に関わらず押下状態を返します。 |
bool FK::fk_Window::getKeyStatus | ( | char | key, |
bool | insideFlag = true |
||
) |
標準キー状態取得関数2
指定したキーの現在の押下状態を参照します。 本関数は、 getKeyStatus(char, fk_Switch, bool) に対し、 第2引数に fk_Switch::PRESS が入っているものとして省略した関数となります。
特殊キーの状態については、 getSpecialKeyStatus(fk_Key, bool) を用いてください。
[in] | key | キーを表す文字。ここには、スペース(' ') や数字 ('1') なども含みます。 |
[in] | insideFlag | true だった場合、 マウスポインタが描画領域の外にあった場合は無条件に false を返します。 false だった場合は、マウスポインタの位置に関わらず押下状態を返します。 |
特殊キー状態取得関数1
指定した特殊キーの現在の押下状態を参照します。 例えば、右矢印キーが押されているかどうかを調べる場合は、 以下のようなコードを記述します。
fk_Window win; if(win.getSpecialKeyStatus(fk_Key::RIGHT, true) == true) { // 押されている場合の処理 }
特殊キーの種類については、 fk_Key の項目を参照して下さい。
標準キーの状態については、 getKeyStatus() を用いてください。
[in] | key | キーを表す文字。 |
[in] | status | 取得したい状態を指定します。種類については fk_Switch を参照してください。 |
[in] | insideFlag | true だった場合、 マウスポインタが描画領域の外にあった場合は無条件に false を返します。 false だった場合は、マウスポインタの位置に関わらず押下状態を返します。 |
bool FK::fk_Window::getSpecialKeyStatus | ( | fk_Key | key, |
bool | insideFlag = true |
||
) |
特殊キー状態取得関数2
指定した特殊キーの現在の押下状態を参照します。 本関数は、 getSpecialKeyStatus(fk_Key, fk_Switch, bool) に対し、 第2引数に fk_Switch::PRESS が入っているものとして省略した関数となります。
特殊キーの種類については、 fk_Key の項目を参照して下さい。 標準キーの状態については、 getKeyStatus(char, bool) を用いてください。
[in] | key | キーを表す文字。 |
[in] | insideFlag | true だった場合、 マウスポインタが描画領域の外にあった場合は無条件に false を返します。 false だった場合は、マウスポインタの位置に関わらず押下状態を返します。 |
特殊キー状態取得関数3
getSpecialKeyStatus(fk_Key, fk_Switch, bool) の別名です。 詳細はそちらのマニュアルを参照して下さい。
[in] | key | キーを表す文字。 |
[in] | status | 取得したい状態を指定します。種類については fk_Switch を参照してください。 |
[in] | insideFlag | true だった場合、 マウスポインタが描画領域の外にあった場合は無条件に false を返します。 false だった場合は、マウスポインタの位置に関わらず押下状態を返します。 |
bool FK::fk_Window::getKeyStatus | ( | fk_Key | key, |
bool | insideFlag = true |
||
) |
特殊キー状態取得関数4
getSpecialKeyStatus(fk_Key, bool) の別名です。 詳細はそちらのマニュアルを参照して下さい。
[in] | key | キーを表す文字。 |
[in] | insideFlag | true だった場合、 マウスポインタが描画領域の外にあった場合は無条件に false を返します。 false だった場合は、マウスポインタの位置に関わらず押下状態を返します。 |
char FK::fk_Window::getLastKey | ( | void | ) |
最終押下キー取得関数
最後に押された標準キーを取得します。 ここで「押された」というのは、いわゆる「押し始めた瞬間」のことを指します。 例えば、以下のような順番でキー操作を行ったとします。
この場合、最後まで押さえられていたのは「a」キーとなりますが、 「押し始めた瞬間」は「b」キーの方が後であるため、 getLastKey() は「b」を返すことになります。
std::tuple< int, int > FK::fk_Window::getMousePosition | ( | bool | insideFlag = true | ) |
マウスポインタ位置取得関数
現在のマウスポインタの位置を与えられた引数ポインタに格納します。 コード例は以下の通りです。
fk_Window win; auto [x, y] = win.getMousePosition(true);
格納される値は投影座標となります。 投影座標の詳細は本クラスの概要を参照して下さい。
[in] | insideFlag | true の場合は、もしマウスポインタが描画領域の外側にあった場合は x, y の両方に -1 を格納します。 false の場合は、描画領域の内外に関係なく、 投影座標に従って値を格納します。 この場合、マウスポインタが描画領域の左側や上側にあった場合は、 負の値が x や y に格納されることがありえることを意味しますので、 注意が必要です。 |
bool FK::fk_Window::getMouseStatus | ( | fk_MouseButton | button, |
fk_Switch | status, | ||
bool | insideFlag = true |
||
) |
マウスボタン状態取得関数
指定したマウスボタンの現在の押下状態を参照します。 例えば、左マウスボタンが押されているかどうかを調べる場合は、 以下のようなコードを記述します。
fk_Window win; if(win.getMouseStatus(fk_MouseButton::M1, fk_Switch::PRESS) == true) { // 押されている場合の処理 }
マウスボタンの種類については、 fk_MouseButton の項目を参照して下さい。
[in] | button | マウスボタンの種類 |
[in] | status | 取得したい状態を指定します。種類については fk_Switch を参照してください。 |
[in] | insideFlag | true だった場合、 マウスポインタが描画領域の外にあった場合は無条件に false を返します。 false だった場合は、マウスポインタの位置に関わらず押下状態を返します。 |
int FK::fk_Window::getMouseWheelStatus | ( | void | ) |
マウスホイール回転量取得関数
この関数は、ウスホイールの回転量を取得するときに使用します。 返り値は整数で、正の場合は手前側、負の場合は奥側に回転していることを意味します。 数値の単位は、テキストをスクロールさせた場合の「行数」に相当するものです。
この関数の回転量とは、この関数が以前に呼び出してからのホイール回転量を意味します。 従って、最初に呼び出したときは必ず 0 を返すことになります。 また、一度この関数で回転量を取得した後、 drawWindow() 関数を実行しない限りは常に 0 を返す仕様となっています。
void FK::fk_Window::setFPS | ( | int | fps | ) |
drawWindow() をコールした際に調整する FPS を指定します。 FPS(Frame Per Second)とは、1秒間中で画面更新が行われる回数の単位です。 この値を 0 に設定した場合は、FPS制御を行いません。 デフォルトは 0 です。
[in] | fps | FPS値 |
std::tuple< bool, fk_Vector > FK::fk_Window::getProjectPosition | ( | double | x, |
double | y, | ||
fk_Plane & | plane | ||
) |
投影平面から任意平面への射影点算出関数
この関数は、描画領域上の投影座標から、 任意の平面への射影変換を行い、射影点を求めます。 これは、投影面上の投影座標とカメラを結ぶ直線と、 引数として入力された平面の交点を求めるということと同義です。 投影座標の詳細は本クラスの概要を参照して下さい。
[in] | x | 投影座標の x 成分 |
[in] | y | 投影座標の y 成分 |
[in] | plane | 射影先の平面。 |
std::tuple< bool, fk_Vector > FK::fk_Window::getProjectPosition | ( | double | x, |
double | y, | ||
double | dist | ||
) |
投影平面から任意距離での射影点算出関数
この関数は、描画領域上の投影座標に対し、 カメラから指定した距離となっている3D空間中の点を算出します。 これは、投影面上の投影座標とカメラを結ぶ直線と、 カメラを中心とし指定距離を半径とする球面の交点を求めることと同義です。 投影座標の詳細は本クラスの概要を参照して下さい。
[in] | x | 投影座標の x 成分 |
[in] | y | 投影座標の y 成分 |
[in] | dist | カメラからの空間中の距離 |
空間座標から投影座標への射影点算出関数
この関数は、空間座標から投影座標への射影点を算出します。 これは、ある空間中の位置が画面上でどこに表示されるかを知ることと同義です。 投影座標の詳細は本クラスの概要を参照して下さい。
なお、射影点の z 成分は投影における Near 面上の場合 0、 Far 面上の場合 1 となり、その間は線形補間した値となります。 つまり、カメラに近いほど値が小さくなるということです。
[in] | pos_3D | 空間座標位置ベクトル |
|
inlinevirtual |
初期化前処理関数
この関数は、グラフィックスシステムの初期化処理において、 処理前に自動的にシステム内部から呼び出される関数です。 fk_Window クラスの派生クラスを作成し、 そのクラスにおいて本関数を再定義することによって、 グラフィックスシステム初期化時の処理を追加することが可能です。 代表的な用途として、特殊デバイスの初期化処理などがあります。
|
inlinevirtual |
初期化後処理関数
この関数は、グラフィックスシステムの初期化処理において、 処理後に自動的にシステム内部から呼び出される関数です。 fk_Window クラスの派生クラスを作成し、 そのクラスにおいて本関数を再定義することによって、 グラフィックスシステム初期化時の処理を追加することが可能です。 代表的な用途として、特殊デバイスの初期化処理などがあります。
|
inlinevirtual |
描画前処理関数
この関数は、グラフィックスシステムの描画処理において、 描画前に自動的にシステム内部から呼び出される関数です。 fk_Window クラスの派生クラスを作成し、 そのクラスにおいて本関数を再定義することによって、 グラフィックスシステム毎描画時の処理を追加することが可能です。 代表的な用途として、特殊デバイスの情報取得などがあります。
|
inlinevirtual |
描画後処理関数
この関数は、グラフィックスシステムの描画処理において、 描画後に自動的にシステム内部から呼び出される関数です。 fk_Window クラスの派生クラスを作成し、 そのクラスにおいて本関数を再定義することによって、 グラフィックスシステム毎描画時の処理を追加することが可能です。 代表的な用途として、特殊デバイスの情報取得などがあります。
bool FK::fk_Window::snapImage | ( | std::string | fileName, |
fk_ImageType | format = fk_ImageType::BMP , |
||
fk_SnapProcMode | mode = fk_SnapProcMode::FRONT |
||
) |
描画画像ファイル出力関数
この関数は、描画領域に表示されている画像を、画像ファイルとして出力します。
[in] | fileName | 画像ファイル名 |
[in] | format | 画像ファイルのフォーマット。 現在利用可能なフォーマットは、 fk_ImageType の解説を参照して下さい。 |
[in] | mode | 画像の取込先となるグラフィックスデバイス名。 取り込みがうまく動作しない場合は、 この引数の値を変更してください。 |
bool FK::fk_Window::snapImage | ( | fk_Image * | image, |
fk_SnapProcMode | mode = fk_SnapProcMode::FRONT |
||
) |
描画画像データ出力関数
この関数は、描画領域に表示されている画像を、 fk_Image 型のインスタンスに出力します。
[in] | image | 画像データ出力先インスタンス |
[in] | mode | 画像の取込先となるグラフィックスデバイス名。 取り込みがうまく動作しない場合は、 この引数の値を変更してください。 |
|
static |
メッセージ出力モード設定関数
この関数は、メッセージ出力のモードを設定します。 モードには、以下のようなものがあります。
fk_Window::setPutStrMode(fk_PutStrMode::CONSOLE);
[in] | mode | 出力モード |
|
static |
|
static |
メッセージ出力用ファイル設定関数
この関数は、メッセージ出力のモードにおいてファイル出力 (fk_PutStrMode::FILE) を指定したときの、出力ファイル名を設定するものです。
fk_Window::setPutFile("sample.txt");
[in] | fileName | 出力ファイル名 |
|
static |
メッセージ出力文字列設定関数
この関数は、与えられた文字列をメッセージとして出力を行います。 出力先は、 setPutStrMode() によって設定したものとなります。
fk_Window::putString("sample");
[in] | str | 出力文字列 |
|
static |
メッセージ出力書式付き設定関数
この関数は、与えられたフォーマットに従ってメッセージとして出力します。 この関数の引数は、C や C++ における標準関数である printf に準じます。
int i = 10; fk_Window::printf("i = %d", i);
|
static |
メッセージ出力用ブラウザ初期化関数
この関数は、メッセージ出力における出力用ブラウザに対し、 表示の初期化を行います。 この関数を呼ぶ前に表示されていた文字列は全て削除されます。
fk_Window::clearBrowser()
|
static |
フォント初期化関数
この関数は、表示が適切となるようフォントの初期化を行います。 なお、現バージョンではこの関数によって影響があるのは Linux 環境のみであり、 Windows や Mac においては何も影響はありません。
fk_Window::fontInit();