FineKernelToolKit  2.9.0
 全て クラス ネームスペース ファイル 関数 変数 型定義 列挙型 列挙型の値 フレンド マクロ定義 ページ
Window.h
説明を見る。
1 /****************************************************************************
2  *
3  * Copyright (c) 1999-2014, Fine Kernel Project, All rights reserved.
4  *
5  * Redistribution and use in source and binary forms,
6  * with or without modification, are permitted provided that the
7  * following conditions are met:
8  *
9  * - Redistributions of source code must retain the above
10  * copyright notice, this list of conditions and the
11  * following disclaimer.
12  *
13  * - Redistributions in binary form must reproduce the above
14  * copyright notice, this list of conditions and the
15  * following disclaimer in the documentation and/or
16  * other materials provided with the distribution.
17  *
18  * - Neither the name of the copyright holders nor the names
19  * of its contributors may be used to endorse or promote
20  * products derived from this software without specific
21  * prior written permission.
22  *
23  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
24  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
25  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
26  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
27  * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
28  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
29  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
30  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
31  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
32  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
33  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
34  * POSSIBILITY OF SUCH DAMAGE.
35  *
36  ****************************************************************************/
37 /****************************************************************************
38  *
39  * Copyright (c) 1999-2014, Fine Kernel Project, All rights reserved.
40  *
41  * 本ソフトウェアおよびソースコードのライセンスは、基本的に
42  * 「修正 BSD ライセンス」に従います。以下にその詳細を記します。
43  *
44  * ソースコード形式かバイナリ形式か、変更するかしないかを問わず、
45  * 以下の条件を満たす場合に限り、再頒布および使用が許可されます。
46  *
47  * - ソースコードを再頒布する場合、上記の著作権表示、本条件一覧、
48  * および下記免責条項を含めること。
49  *
50  * - バイナリ形式で再頒布する場合、頒布物に付属のドキュメント等の
51  * 資料に、上記の著作権表示、本条件一覧、および下記免責条項を
52  * 含めること。
53  *
54  * - 書面による特別の許可なしに、本ソフトウェアから派生した製品の
55  * 宣伝または販売促進に、本ソフトウェアの著作権者の名前または
56  * コントリビューターの名前を使用してはならない。
57  *
58  * 本ソフトウェアは、著作権者およびコントリビューターによって「現
59  * 状のまま」提供されており、明示黙示を問わず、商業的な使用可能性、
60  * および特定の目的に対する適合性に関す暗黙の保証も含め、またそれ
61  * に限定されない、いかなる保証もないものとします。著作権者もコン
62  * トリビューターも、事由のいかんを問わず、損害発生の原因いかんを
63  * 問わず、かつ責任の根拠が契約であるか厳格責任であるか(過失その
64  * 他の)不法行為であるかを問わず、仮にそのような損害が発生する可
65  * 能性を知らされていたとしても、本ソフトウェアの使用によって発生
66  * した(代替品または代用サービスの調達、使用の喪失、データの喪失、
67  * 利益の喪失、業務の中断も含め、またそれに限定されない)直接損害、
68  * 間接損害、偶発的な損害、特別損害、懲罰的損害、または結果損害に
69  * ついて、一切責任を負わないものとします。
70  *
71  ****************************************************************************/
72 
73 #ifdef FK_D3D
74 #include <FK/D3D/Window.h>
75 #else
76 
77 // fk_Window for OpenGL
78 
79 #ifndef __FK_WINDOW_HEADER__
80 #define __FK_WINDOW_HEADER__
81 
82 #include <stdarg.h>
83 
84 // for Graphics Header.
85 #include <FL/Fl_Gl_Window.H>
86 #include <FL/Fl_Multi_Browser.H>
87 
88 // for FK Header.
89 #include <FK/Engine.H>
90 #include <FK/FrameController.H>
91 
92 // for Graphics Routine
94 typedef unsigned int fk_FrameMode;
95 
97 const fk_FrameMode FK_WAIT_FRAME = 0x0001;
98 const fk_FrameMode FK_SKIP_FRAME = 0x0002;
99 
134 };
135 
141 };
142 
150 };
151 
152 
154 
189 class fk_Window : public Fl_Gl_Window, public fk_BaseObject {
190 
191  private:
192 
193  fk_GraphicsEngine engine;
194 
195  fk_Image snapBuffer;
196 
197  bool winOpenFlag;
198  int GLWinWSize;
199  int GLWinHSize;
200  int GLWinXPosition;
201  int GLWinYPosition;
202  char lastKey;
203 
204  fk_FrameMode frameMode;
205  unsigned long frameTime, prevTime;
206  unsigned long frameInterval;
207  int skipCount;
208 
209  fk_FrameController fps_admin;
210  int fps;
211 
212  bool stereoMode;
213 
214 
215  static Fl_Window *putWin;
216  static Fl_Multi_Browser *browser;
217  static fk_PutStrMode putStrMode;
218  static FILE *putStrFP;
219  static int winNum;
220 
221  void SetPickViewPort(int &, int &);
222  bool IsInsideWindow(void);
223  Fl_Group * GetInhParentWindow(void);
224  void GetPickData(bool, fk_PickData *, int, int, int);
225 
226  void draw(); // virtual Function from Fl_Gl_Window class
227 
228  static void PutBrowser(const std::string &);
229 
230 #ifdef WIN32
231  bool SnapImageGDI(fk_Image *);
232 #endif
233 
234  protected:
235 
236  void drawScene(void);
237  void drawSceneLeft(void);
238  void drawSceneRight(void);
239 
240  public:
241 
243 
250  fk_Window(int x = 0, int y = 0,
251  int w = 300, int h = 300, std::string name = "FK Window");
252 
254  virtual ~fk_Window();
255 
256 
258 
259 
261 
266  void setScene(fk_Scene *scene);
268 
270 
271 
287  int drawWindow(bool drawFlag = true);
288 
290 
299  bool winOpenStatus(void);
300 
302 
310  void resizeWindow(int x, int y, int w, int h);
311 
313 
344  bool getKeyStatus(char key, bool insideFlag = true);
345 
347 
380  bool getSpecialKeyStatus(fk_SpecialKey key, bool insideFlag = true);
381 
383 
401  char getLastKey(void);
402 
404 
431  void getMousePosition(int *x, int *y, bool insideFlag = true);
432 
434 
456  bool getMouseStatus(fk_MouseButton button, bool insideFlag = true);
457 
459 
473  int getMouseWheelStatus(void);
474 
476 
497  void getPickModel(fk_PickData *data, int pixel);
498 
500 
521  void getPickModel(fk_PickData *data, int pixel, int x, int y);
523 
525 
526 
534  void setFPS(int fps);
535 
536 #ifndef FK_DOXYGEN_USER_PROCESS
537 
539 
564  void setFrameMode(fk_FrameMode mode);
565 
567 
574  fk_FrameMode getFrameMode(void);
575 
577 
593  void setFrameInterval(int ms);
594 
596 
603  int getFrameInterval(void);
604 
606 
615  int getSkipFrame(void);
616 
617 #endif
618 
620 
622 
623 
625 
643  bool getProjectPosition(double x, double y,
644  fk_Plane *plane, fk_Vector *pos);
645 
647 
661  bool getProjectPosition(double x, double y,
662  double dist, fk_Vector *pos);
663 
665 
681  bool getWindowPosition(fk_Vector pos_3D, fk_Vector *pos_2D);
683 
685 
686 
705  void setOGLPointerMode(bool mode);
706 
708 
722  bool getOGLPointerMode(void);
723 
725 
743  void setOGLTextureBindMode(bool mode);
744 
746 
760  bool getOGLTextureBindMode(void);
761 
763 
775  void clearTextureMemory(void);
776 
778 
794  unsigned long getUsingTextureMemory(void);
795 
797 
807  virtual void preInit(void) {}
808 
810 
820  virtual void postInit(void) {}
821 
823 
831  virtual void preDraw(void) {}
832 
834 
842  virtual void postDraw(void) {}
844 
845 #ifndef FK_DOXYGEN_USER_PROCESS
846  virtual void preDrawLeft(void) {}
847  virtual void postDrawLeft(void) {}
848  virtual void preDrawRight(void) {}
849  virtual void postDrawRight(void) {}
850 #endif
851 
853 
854 
856 
872  bool snapImage(std::string fileName,
873  fk_ImageType format = FK_IMAGE_BMP,
875 
877 
890  bool snapImage(fk_Image *image,
893 
895 
896 
898 
911  static unsigned long getNow(void);
913 
915 
916 
918 
941  static void setPutStrMode(const fk_PutStrMode mode);
942 
944 
951  static fk_PutStrMode getPutStrMode(void);
952 
954 
971  static bool setPutFile(const std::string &fileName);
972 
974 
988  static void putString(const std::string &str);
989 
991 
1005  static void printf(const char *format, ...);
1006 
1008 
1021  static void clearBrowser(void);
1023 
1025 
1026 
1047  void setOGLStereoMode(bool mode);
1048 
1050 
1063  bool getOGLStereoMode(void);
1065 
1066 };
1067 
1068 
1069 #endif /* !__FK_WINDOW_HEADER__ */
1070 
1071 #endif /* !D3D_BRANCH */
void getPickModel(fk_PickData *data, int pixel)
ピックによるモデル選択関数
F3 ファンクションキー
Definition: Window.h:124
マウス左クリック(第1ボタン)
Definition: Window.h:138
unsigned long getUsingTextureMemory(void)
テクスチャメモリ使用量取得関数
上矢印キー
Definition: Window.h:120
void setFPS(int fps)
幾何平面を管理するクラス
Definition: Plane.h:96
const fk_FrameMode FK_WAIT_FRAME
フレーム待機制御
Definition: Window.h:97
static void printf(const char *format,...)
メッセージ出力書式付き設定関数
int drawWindow(bool drawFlag=true)
描画更新関数
void getMousePosition(int *x, int *y, bool insideFlag=true)
マウスポインタ位置取得関数
int getMouseWheelStatus(void)
マウスホイール回転量取得関数
タブキー
Definition: Window.h:112
fk_MouseButton
マウスボタンを表す列挙型
Definition: Window.h:137
キャップスロックキー
Definition: Window.h:111
左コントロールキー
Definition: Window.h:105
右コントロールキー
Definition: Window.h:104
ファイル出力
Definition: Window.h:149
bool getProjectPosition(double x, double y, fk_Plane *plane, fk_Vector *pos)
投影平面から任意平面への射影点算出関数
virtual ~fk_Window()
デストラクタ
static void putString(const std::string &str)
メッセージ出力文字列設定関数
F10 ファンクションキー
Definition: Window.h:131
fk_SnapProcMode
画像取り込み方法を表す列挙型
Definition: Image.h:128
void resizeWindow(int x, int y, int w, int h)
描画領域寸法変更関数
3次元ベクトルを管理するクラス
Definition: Vector.h:110
デリート(削除)キー
Definition: Window.h:110
void drawSceneLeft(void)
インサートキー
Definition: Window.h:117
static bool setPutFile(const std::string &fileName)
メッセージ出力用ファイル設定関数
bool getKeyStatus(char key, bool insideFlag=true)
標準キー状態取得関数
void setScene(fk_Scene *scene)
シーン登録関数
static void clearBrowser(void)
メッセージ出力用ブラウザ初期化関数
const fk_FrameMode FK_SKIP_FRAME
フレーム間引き制御
Definition: Window.h:98
virtual void preInit(void)
初期化前処理関数
Definition: Window.h:807
Windows Bitmap (BMP) 形式
Definition: Image.h:122
fk_SpecialKey
特殊キーを表す列挙型
Definition: Window.h:101
シーンを制御するクラス
Definition: Scene.h:109
右オルトキー
Definition: Window.h:106
void setOGLTextureBindMode(bool mode)
OpenGL テクスチャ切り替え低減処理制御関数
F1 ファンクションキー
Definition: Window.h:122
bool winOpenStatus(void)
描画状態取得関数
ホームキー
Definition: Window.h:115
下矢印キー
Definition: Window.h:121
void drawScene(void)
static void setPutStrMode(const fk_PutStrMode mode)
メッセージ出力モード設定関数
エンドキー
Definition: Window.h:116
void clearTextureMemory(void)
テクスチャメモリ解放関数
F2 ファンクションキー
Definition: Window.h:123
マウス中クリック、あるいはホイールクリック(第2ボタン)
Definition: Window.h:139
左矢印キー
Definition: Window.h:118
void drawSceneRight(void)
bool getSpecialKeyStatus(fk_SpecialKey key, bool insideFlag=true)
特殊キー状態取得関数
F4 ファンクションキー
Definition: Window.h:125
virtual void postInit(void)
初期化後処理関数
Definition: Window.h:820
bool snapImage(std::string fileName, fk_ImageType format=FK_IMAGE_BMP, fk_SnapProcMode mode=FK_SNAP_GL_FRONT)
描画画像ファイル出力関数
バックスペース(後退)キー
Definition: Window.h:109
bool getMouseStatus(fk_MouseButton button, bool insideFlag=true)
マウスボタン状態取得関数
static fk_PutStrMode getPutStrMode(void)
メッセージ出力モード参照関数
専用ブラウザ出力
Definition: Window.h:148
bool getOGLTextureBindMode(void)
OpenGL テクスチャ切り替え低減処理参照関数
FK の各クラスの基盤となる基本クラス
Definition: Base.h:212
fk_Window(int x=0, int y=0, int w=300, int h=300, std::string name="FK Window")
コンストラクタ
コンソール標準出力
Definition: Window.h:146
ピックによる取得データを管理するクラス
Definition: PickData.h:103
ページダウンキー
Definition: Window.h:114
F11 ファンクションキー
Definition: Window.h:132
F6 ファンクションキー
Definition: Window.h:127
fk_ImageType
画像フォーマットを表す列挙型
Definition: Image.h:121
画像を生成、管理するクラス
Definition: Image.h:235
コンソールエラー出力
Definition: Window.h:147
fk_PutStrMode
メッセージ出力タイプを表す列挙型
Definition: Window.h:144
F5 ファンクションキー
Definition: Window.h:126
bool getWindowPosition(fk_Vector pos_3D, fk_Vector *pos_2D)
空間座標から投影座標への射影点算出関数
F8 ファンクションキー
Definition: Window.h:129
virtual void postDraw(void)
描画後処理関数
Definition: Window.h:842
左オルトキー
Definition: Window.h:107
char getLastKey(void)
最終押下キー取得関数
マウス右クリック(第3ボタン)
Definition: Window.h:140
unsigned int fk_FrameMode
フレーム制御タイプを表す型
Definition: Window.h:94
FLTK 用シーン描画ウィジェットクラス
Definition: Window.h:189
void setOGLStereoMode(bool mode)
立体視モード設定関数
OpenGL フロントバッファ
Definition: Image.h:129
ページアップキー
Definition: Window.h:113
右矢印キー
Definition: Window.h:119
F9 ファンクションキー
Definition: Window.h:130
左シフトキー
Definition: Window.h:103
bool getOGLPointerMode(void)
OpenGL 頂点配列処理参照関数
エンター(改行、リターン)キー
Definition: Window.h:108
virtual void preDraw(void)
描画前処理関数
Definition: Window.h:831
const fk_FrameMode FK_DEFAULT_FRAME
フレーム制御無効
Definition: Window.h:96
F12 ファンクションキー
Definition: Window.h:133
出力なし
Definition: Window.h:145
右シフトキー
Definition: Window.h:102
static unsigned long getNow(void)
現時点システム時間参照関数
void setOGLPointerMode(bool mode)
OpenGL 頂点配列処理制御関数
F7 ファンクションキー
Definition: Window.h:128
bool getOGLStereoMode(void)
立体視モード取得関数