glcanvas.hpp
上传用户:yhdzpy8989
上传日期:2007-06-13
资源大小:13604k
文件大小:7k
源码类别:

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: glcanvas.hpp,v $
  4.  * PRODUCTION Revision 1000.1  2004/06/01 19:49:29  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.18
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef GUI_OPENGL___GL_CANVAS__HPP
  10. #define GUI_OPENGL___GL_CANVAS__HPP
  11. /*  $Id: glcanvas.hpp,v 1000.1 2004/06/01 19:49:29 gouriano Exp $
  12.  * ===========================================================================
  13.  *
  14.  *                            PUBLIC DOMAIN NOTICE
  15.  *               National Center for Biotechnology Information
  16.  *
  17.  *  This software/database is a "United States Government Work" under the
  18.  *  terms of the United States Copyright Act.  It was written as part of
  19.  *  the author's official duties as a United States Government employee and
  20.  *  thus cannot be copyrighted.  This software/database is freely available
  21.  *  to the public for use. The National Library of Medicine and the U.S.
  22.  *  Government have not placed any restriction on its use or reproduction.
  23.  *
  24.  *  Although all reasonable efforts have been taken to ensure the accuracy
  25.  *  and reliability of the software and data, the NLM and the U.S.
  26.  *  Government do not and cannot warrant the performance or results that
  27.  *  may be obtained by using this software or data. The NLM and the U.S.
  28.  *  Government disclaim all warranties, express or implied, including
  29.  *  warranties of performance, merchantability or fitness for any particular
  30.  *  purpose.
  31.  *
  32.  *  Please cite the author in any work or product based on this material.
  33.  *
  34.  * ===========================================================================
  35.  *
  36.  * Authors:  Mike DiCuccio
  37.  *
  38.  * File Description:
  39.  *    CGlCanvas -- provide standardized OpenGL view setup for FLTK
  40.  *
  41.  */
  42. #include <corelib/ncbistd.hpp>
  43. #include <gui/opengl.h>
  44. #include <gui/opengl/glcamera.hpp>
  45. #include <FL/Fl_Gl_Window.H>
  46. /** @addtogroup GUI_OPENGL
  47.  *
  48.  * @{
  49.  */
  50. BEGIN_NCBI_SCOPE
  51. class CPrintOptions;
  52. //
  53. // class CGlCanvas provides an abstraction for manipulating an OpenGL context,
  54. // and provides hooks to FLTK's interaction model.
  55. //
  56. // This class provides standard rendering support and interaction through FLTK.
  57. // It is an abstract base class; its two subclasses provide an easy means of
  58. // configuring 2D and 3D views.  In addition, this class provides standard
  59. // hooks for print capture and output.
  60. //
  61. class NCBI_GUIOPENGL_EXPORT CGlCanvas : public Fl_Gl_Window
  62. {
  63. public:
  64.     // rendering modes - includes various basic OpenGL enables
  65.     enum ERenderMode {
  66.         fLighting   = 0x01,
  67.         fCullFace   = 0x02,
  68.         fDepthTest  = 0x04,
  69.         fTexture2D  = 0x08
  70.     };
  71.     typedef unsigned int TRenderMode;  // bitwise OR of "ERenderMode"
  72.     CGlCanvas(int x, int y, int wid, int ht, const char* label = 0);
  73.     virtual ~CGlCanvas(void);
  74.     // overloaded FLTK drawing hook. Calls x_Draw(). If not in
  75. // print capture mode, also calls x_OverlayDraw()
  76.     virtual void draw(void);
  77.     virtual void draw_print(void);
  78.     // print the resulting OpenGL window, according to the options
  79.     // defined in CPrintOptions
  80.     void Print(const CPrintOptions& options);
  81. protected:
  82.     // an object to control our camera set-up
  83.     CGlCamera   m_Camera;
  84.     // bitmask of our rendering modes
  85.     TRenderMode     m_RenderModes;
  86.     
  87.     bool m_Capture;
  88.     // set the standard rendering modes (OpenGL enables, etc)
  89.     virtual void x_SetupRenderModes(void);
  90.     // draw the background color.
  91.     virtual void x_DrawBackground(float red, float green, float blue);
  92.     // set the viewing matrices.  derived classes must provide this.
  93.     virtual void x_SetupView(void) = 0;
  94.     // draw our scene
  95.     virtual void x_Draw(void) { };
  96.     virtual void x_OverlayDraw(void) { }
  97. };
  98. END_NCBI_SCOPE
  99. /* @} */
  100. /*
  101.  * ===========================================================================
  102.  * $Log: glcanvas.hpp,v $
  103.  * Revision 1000.1  2004/06/01 19:49:29  gouriano
  104.  * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.18
  105.  *
  106.  * Revision 1.18  2004/05/11 18:54:22  dicuccio
  107.  * Added doxygne modules info
  108.  *
  109.  * Revision 1.17  2003/09/29 15:20:07  dicuccio
  110.  * Deprecated gui/scope.hpp.  Merged gui/core/types.hpp into gui/types.hpp
  111.  *
  112.  * Revision 1.16  2003/07/21 19:21:47  dicuccio
  113.  * Removed unused additional constructor
  114.  *
  115.  * Revision 1.15  2003/06/25 16:22:49  meric
  116.  * Moved printing functionality to gui/opengl/gl_print and gui/utils/print
  117.  *
  118.  * Revision 1.14  2003/06/18 17:27:19  meric
  119.  * Final phase of print reorg: print classes now in gui/utils
  120.  *
  121.  * Revision 1.13  2003/06/16 15:55:57  dicuccio
  122.  * Work-in-progress: everything compiles, still much reorganization to be done.
  123.  * Moved generic functionality out of opengl/print/ and into gui/utils (print
  124.  * options, print dialogs, etc.).  Removed interactive state from CGlCanvas.
  125.  * Added hook in CView for opening standard print dialog, and for generic print
  126.  * handling.
  127.  *
  128.  * Revision 1.12  2003/06/13 18:59:12  meric
  129.  * Initialization in x_Init(), which is called by all c'tors
  130.  * Remove print-related functinality from draw(), which can now be
  131.  * overridden freely without affecting the Print() function.
  132.  * Add print functions [ Print(), x_Print() etc ]
  133.  *
  134.  * Revision 1.11  2003/06/03 17:42:54  dicuccio
  135.  * Added texture support.  Added classes to handle OpenGL camera setup, viewport
  136.  * specification
  137.  *
  138.  * Revision 1.10  2003/05/13 19:22:34  dicuccio
  139.  * Prepared CGlCanvas for printing - from Peter Meric
  140.  *
  141.  * Revision 1.9  2003/05/06 15:51:56  dicuccio
  142.  * Reorganized CGlCanvas and CGlUtils: moved hardware check into CGlUtils; split
  143.  * CGlCanvas into 2D and 3D variants
  144.  *
  145.  * Revision 1.8  2003/03/28 17:15:06  dicuccio
  146.  * Added first support for determining hardware acceleration
  147.  *
  148.  * Revision 1.7  2003/03/25 13:07:58  dicuccio
  149.  * Use the proper FLTK header (ends in '.H')
  150.  *
  151.  * Revision 1.6  2003/01/13 13:11:42  dicuccio
  152.  * Namespace clean-up.  Retired namespace gui -> converted to namespace ncbi.
  153.  * Moved all FLUID-generated code into namespace ncbi.
  154.  *
  155.  * Revision 1.5  2002/12/19 18:13:03  dicuccio
  156.  * Added export specifiers for Win32.
  157.  *
  158.  * Revision 1.4  2002/11/14 16:13:36  dicuccio
  159.  * Changed to include standard OpenGL headers in 'gui/opengl.h'
  160.  *
  161.  * Revision 1.3  2002/11/07 18:24:46  dicuccio
  162.  * Minor #ifdef changes.  Created macro to wrap dumping of OpenGL state.
  163.  *
  164.  * Revision 1.2  2002/11/05 19:49:47  dicuccio
  165.  * Renamed ERenderMode members as flags (eBar to fBar)
  166.  *
  167.  * Revision 1.1  2002/11/04 20:05:37  dicuccio
  168.  * Initial revision
  169.  *
  170.  * ===========================================================================
  171.  */
  172. #endif  //  GUI_OPENGL___GL_CANVAS__HPP