FineKernelToolKit  2.8.10
FK/Window.h
説明を見る。
00001 /****************************************************************************
00002  *
00003  *  Copyright (c) 1999-2011, Fine Kernel Project, All rights reserved.
00004  *
00005  *  Redistribution and use in source and binary forms,
00006  *  with or without modification, are permitted provided that the
00007  *  following conditions are met:
00008  *
00009  *      - Redistributions of source code must retain the above
00010  *          copyright notice, this list of conditions and the
00011  *          following disclaimer.
00012  *
00013  *      - Redistributions in binary form must reproduce the above
00014  *          copyright notice, this list of conditions and the
00015  *          following disclaimer in the documentation and/or
00016  *          other materials provided with the distribution.
00017  *
00018  *      - Neither the name of the copyright holders nor the names
00019  *          of its contributors may be used to endorse or promote
00020  *          products derived from this software without specific
00021  *          prior written permission.
00022  *
00023  *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
00024  *  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
00025  *  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
00026  *  FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
00027  *  COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
00028  *  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
00029  *  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
00030  *  SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
00031  *  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
00032  *  STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
00033  *  IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
00034  *  POSSIBILITY OF SUCH DAMAGE.
00035  *
00036  ****************************************************************************/
00037 /****************************************************************************
00038  *
00039  *  Copyright (c) 1999-2011, Fine Kernel Project, All rights reserved.
00040  *
00041  *  本ソフトウェアおよびソースコードのライセンスは、基本的に
00042  *  「修正 BSD ライセンス」に従います。以下にその詳細を記します。
00043  *
00044  *  ソースコード形式かバイナリ形式か、変更するかしないかを問わず、
00045  *  以下の条件を満たす場合に限り、再頒布および使用が許可されます。
00046  *
00047  *  - ソースコードを再頒布する場合、上記の著作権表示、本条件一覧、
00048  *      および下記免責条項を含めること。
00049  *
00050  *  - バイナリ形式で再頒布する場合、頒布物に付属のドキュメント等の
00051  *      資料に、上記の著作権表示、本条件一覧、および下記免責条項を
00052  *      含めること。
00053  *
00054  *  - 書面による特別の許可なしに、本ソフトウェアから派生した製品の
00055  *      宣伝または販売促進に、本ソフトウェアの著作権者の名前または
00056  *      コントリビューターの名前を使用してはならない。
00057  *
00058  *  本ソフトウェアは、著作権者およびコントリビューターによって「現
00059  *  状のまま」提供されており、明示黙示を問わず、商業的な使用可能性、
00060  *  および特定の目的に対する適合性に関す暗黙の保証も含め、またそれ
00061  *  に限定されない、いかなる保証もないものとします。著作権者もコン
00062  *  トリビューターも、事由のいかんを問わず、損害発生の原因いかんを
00063  *  問わず、かつ責任の根拠が契約であるか厳格責任であるか(過失その
00064  *  他の)不法行為であるかを問わず、仮にそのような損害が発生する可
00065  *  能性を知らされていたとしても、本ソフトウェアの使用によって発生
00066  *  した(代替品または代用サービスの調達、使用の喪失、データの喪失、
00067  *  利益の喪失、業務の中断も含め、またそれに限定されない)直接損害、
00068  *  間接損害、偶発的な損害、特別損害、懲罰的損害、または結果損害に
00069  *  ついて、一切責任を負わないものとします。
00070  *
00071  ****************************************************************************/
00072 #ifdef FK_D3D
00073 #include "./D3D/Window.h"
00074 #else
00075 
00076 // fk_Window for OpenGL
00077 
00078 #ifndef __FK_WINDOW_HEADER__
00079 #define __FK_WINDOW_HEADER__
00080 
00081 #include <stdarg.h>
00082 
00083 // for Graphics Header.
00084 #include <FL/Fl_Gl_Window.H>
00085 #include <FL/Fl_Multi_Browser.H>
00086 
00087 // for FK Header.
00088 #include <FK/Engine.H>
00089 
00090 // for Graphics Routine
00092 typedef unsigned int fk_FrameMode;
00093 
00094 const fk_FrameMode FK_DEFAULT_FRAME = 0x0000;   
00095 const fk_FrameMode FK_WAIT_FRAME    = 0x0001;   
00096 const fk_FrameMode FK_SKIP_FRAME    = 0x0002;   
00097 
00099 enum fk_SpecialKey {
00100     FK_SHIFT_R,     
00101     FK_SHIFT_L,     
00102     FK_CTRL_R,      
00103     FK_CTRL_L,      
00104     FK_ALT_R,       
00105     FK_ALT_L,       
00106     FK_ENTER,       
00107     FK_BACKSPACE,   
00108     FK_DELETE,      
00109     FK_CAPS_LOCK,   
00110     FK_TAB,         
00111     FK_PAGE_UP,     
00112     FK_PAGE_DOWN,   
00113     FK_HOME,        
00114     FK_END,         
00115     FK_INSERT,      
00116     FK_LEFT,        
00117     FK_RIGHT,       
00118     FK_UP,          
00119     FK_DOWN,        
00120     FK_F1,          
00121     FK_F2,          
00122     FK_F3,          
00123     FK_F4,          
00124     FK_F5,          
00125     FK_F6,          
00126     FK_F7,          
00127     FK_F8,          
00128     FK_F9,          
00129     FK_F10,         
00130     FK_F11,         
00131     FK_F12          
00132 };
00133 
00135 enum fk_MouseButton {
00136     FK_MOUSE1,      
00137     FK_MOUSE2,      
00138     FK_MOUSE3       
00139 };
00140 
00142 enum fk_PutStrMode {
00143     FK_PUTSTR_NONE,         
00144     FK_PUTSTR_CONSOLE,      
00145     FK_PUTSTR_ERR_CONSOLE,  
00146     FK_PUTSTR_BROWSER,      
00147     FK_PUTSTR_FILE          
00148 };
00149 
00150 
00152 
00187 class fk_Window : public Fl_Gl_Window, public fk_BaseObject {
00188 
00189  private:
00190 
00191     fk_GraphicsEngine       engine;
00192 
00193     fk_Image                snapBuffer;
00194 
00195     bool                    winOpenFlag;
00196     int                     GLWinWSize;
00197     int                     GLWinHSize;
00198     int                     GLWinXPosition;
00199     int                     GLWinYPosition;
00200     char                    lastKey;
00201 
00202     fk_FrameMode            frameMode;
00203     unsigned long           frameTime, prevTime;
00204     unsigned long           frameInterval;
00205     int                     skipCount;
00206 
00207     bool                    stereoMode;
00208 
00209     static Fl_Window        *putWin;
00210     static Fl_Multi_Browser *browser;
00211     static fk_PutStrMode    putStrMode;
00212     static FILE             *putStrFP;
00213     static int              winNum;
00214 
00215     void                    SetPickViewPort(int &, int &);
00216     bool                    IsInsideWindow(void);
00217     Fl_Group *              GetInhParentWindow(void);
00218     void                    GetPickData(bool, fk_PickData *, int, int, int);
00219 
00220     void                    draw(); // virtual Function from Fl_Gl_Window class
00221 
00222     static void             PutBrowser(const std::string &);
00223 
00224 #ifdef WIN32
00225     bool                    SnapImageGDI(fk_Image *);
00226 #endif
00227 
00228  public:
00229 
00231 
00238     fk_Window(int x = 0, int y = 0,
00239               int w = 300, int h = 300, std::string name = "FK Window");
00240 
00242     virtual ~fk_Window();
00243 
00244 
00246     //@(
00247 
00249 
00254     void    setScene(fk_Scene *scene);
00255     //@)
00256 
00258     //@(
00260 
00275     int                 drawWindow(bool drawFlag = true);
00276 
00278 
00287     bool    winOpenStatus(void);
00288 
00290 
00298     void    resizeWindow(int x, int y, int w, int h);
00299 
00301 
00334     bool    getKeyStatus(char key, bool insideFlag = true);
00335 
00337 
00372     bool    getSpecialKeyStatus(fk_SpecialKey key, bool insideFlag = true);
00373 
00375 
00393     char    getLastKey(void);
00394 
00396 
00425     void    getMousePosition(int *x, int *y, bool insideFlag = true);
00426 
00428 
00452     bool    getMouseStatus(fk_MouseButton button, bool insideFlag = true);
00453 
00455 
00469     int     getMouseWheelStatus(void);
00470 
00472 
00493     void    getPickModel(fk_PickData *data, int pixel);
00494 
00496 
00517     void    getPickModel(fk_PickData *data, int pixel, int x, int y);
00518     //@)
00519 
00521     //@(
00522 
00524 
00550     void    setFrameMode(fk_FrameMode mode);
00551 
00553 
00560     fk_FrameMode    getFrameMode(void);
00561 
00563 
00579     void    setFrameInterval(int ms);
00580 
00582 
00589     int     getFrameInterval(void);
00590 
00592 
00601     int     getSkipFrame(void);
00602     //@)
00603 
00605     //@(
00606 
00608 
00626     bool    getProjectPosition(double x, double y,
00627                                fk_Plane *plane, fk_Vector *pos);
00628 
00630 
00644     bool    getProjectPosition(double x, double y,
00645                                double dist, fk_Vector *pos);
00646 
00648 
00664     bool    getWindowPosition(fk_Vector pos_3D, fk_Vector *pos_2D);
00665     //@)
00666 
00668     //@(
00670 
00688     void    setOGLPointerMode(bool mode);
00689 
00691 
00705     bool    getOGLPointerMode(void);
00706 
00708 
00726     void    setOGLTextureBindMode(bool mode);
00727 
00729 
00743     bool    getOGLTextureBindMode(void);
00744 
00746 
00758     void    clearTextureMemory(void);
00759 
00761 
00777     unsigned long getUsingTextureMemory(void);
00778 
00780 
00790     virtual void    preInit(void) {}
00791 
00793 
00803     virtual void    postInit(void) {}
00804 
00806 
00814     virtual void    preDraw(void) {}
00815 
00817 
00825     virtual void    postDraw(void) {}
00826     //@)
00827 
00829     //@(
00830 
00832 
00848     bool    snapImage(std::string fileName,
00849                       fk_ImageType format = FK_IMAGE_BMP,
00850                       fk_SnapProcMode mode = FK_SNAP_GL_FRONT);
00851 
00853 
00866     bool    snapImage(fk_Image *image,
00867                       fk_SnapProcMode mode = FK_SNAP_GL_FRONT);
00868     //@)
00869 
00871     //@(
00872 
00874 
00888     static unsigned long    getNow(void);
00889     //@)
00890 
00892     //@(
00893 
00895 
00919     static void             setPutStrMode(const fk_PutStrMode mode);
00920 
00922 
00929     static fk_PutStrMode    getPutStrMode(void);
00930 
00932 
00950     static bool             setPutFile(const std::string &fileName);
00951 
00953 
00968     static void             putString(const std::string &str);
00969 
00971 
00986     static void             printf(const char *format, ...);
00987 
00989 
01003     static void             clearBrowser(void);
01004     //@)
01005 
01007     //@(
01009 
01029     void    setOGLStereoMode(bool mode);
01030 
01032 
01045     bool    getOGLStereoMode(void);
01046     //@)
01047 
01048 };
01049 
01050 
01051 #endif /* !__FK_WINDOW_HEADER__ */
01052 
01053 #endif /* !D3D_BRANCH */
 全て クラス ネームスペース ファイル 関数 変数 型定義 列挙型 列挙型の値 フレンド マクロ定義