<html> <head> <link rel="stylesheet" href="page.css" type="text/css"> <title>fox-toolkit.org - Documentation</title> </head> <body bgcolor=#ffffff link=#990033 vlink=#990033 alink=#990033 text=#000000> <font face='verdana,sans-serif' size=2 > <!---- TOPIC TITLE WITH LOGO---> <table border=0 cellpadding= cellspacing=2 width=100% ><tr><td><a href='http://www.fox-toolkit.org/doc.html'><img src='../art/foxlogo_small.jpg' border=0></a></td><td width=100% valign=bottom><font face='verdana,sans-serif' size=2 ><b> <a class="qindex" href="index.html">Main Page</a> <a class="qindex" href="hierarchy.html">Class Hierarchy</a> <a class="qindex" href="classes.html">Alphabetical List</a> <a class="qindex" href="annotated.html">Compound List</a> <a class="qindex" href="files.html">File List</a> <a class="qindex" href="functions.html">Compound Members</a> <br><img src='../art/line.gif' width=100% height=1></b></font></td></tr></table> <p> <!--- TOPIC TITLE WITH LOGO ---> <!-- Generated by Doxygen 1.3.3 --> <h1>FXGLViewer.h</h1><div class="fragment"><pre>00001 <span class="comment">/********************************************************************************</span> 00002 <span class="comment">* *</span> 00003 <span class="comment">* O p e n G L V i e w e r W i d g e t *</span> 00004 <span class="comment">* *</span> 00005 <span class="comment">*********************************************************************************</span> 00006 <span class="comment">* Copyright (C) 1997,2004 by Jeroen van der Zijp. All Rights Reserved. *</span> 00007 <span class="comment">*********************************************************************************</span> 00008 <span class="comment">* This library is free software; you can redistribute it and/or *</span> 00009 <span class="comment">* modify it under the terms of the GNU Lesser General Public *</span> 00010 <span class="comment">* License as published by the Free Software Foundation; either *</span> 00011 <span class="comment">* version 2.1 of the License, or (at your option) any later version. *</span> 00012 <span class="comment">* *</span> 00013 <span class="comment">* This library is distributed in the hope that it will be useful, *</span> 00014 <span class="comment">* but WITHOUT ANY WARRANTY; without even the implied warranty of *</span> 00015 <span class="comment">* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *</span> 00016 <span class="comment">* Lesser General Public License for more details. *</span> 00017 <span class="comment">* *</span> 00018 <span class="comment">* You should have received a copy of the GNU Lesser General Public *</span> 00019 <span class="comment">* License along with this library; if not, write to the Free Software *</span> 00020 <span class="comment">* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. *</span> 00021 <span class="comment">*********************************************************************************</span> 00022 <span class="comment">* $Id: FXGLViewer.h,v 1.68 2004/02/08 17:17:33 fox Exp $ *</span> 00023 <span class="comment">********************************************************************************/</span> 00024 <span class="preprocessor">#ifndef FXGLVIEWER_H</span> 00025 <span class="preprocessor"></span><span class="preprocessor">#define FXGLVIEWER_H</span> 00026 <span class="preprocessor"></span> 00027 <span class="preprocessor">#ifndef FXGLCANVAS_H</span> 00028 <span class="preprocessor"></span><span class="preprocessor">#include "FXGLCanvas.h"</span> 00029 <span class="preprocessor">#endif</span> 00030 <span class="preprocessor"></span> 00031 <span class="keyword">namespace </span>FX { 00032 00033 00034 <span class="keyword">class </span>FXDCPrint; 00035 <span class="keyword">class </span>FXGLObject; 00036 <span class="keyword">class </span>FXGLVisual; 00037 00038 00039 <span class="comment">// GL Viewer options</span> 00040 <span class="keyword">enum</span> { 00041 <a class="code" href="group__FXGLViewer__0.html#a0a486">VIEWER_LIGHTING</a> = 0x00008000, <span class="comment">/// Lighting is on</span> 00042 <span class="comment"></span> <a class="code" href="group__FXGLViewer__0.html#a0a487">VIEWER_FOG</a> = 0x00010000, <span class="comment">/// Fog mode on</span> 00043 <span class="comment"></span> <a class="code" href="group__FXGLViewer__0.html#a0a488">VIEWER_DITHER</a> = 0x00020000 <span class="comment">/// Dithering</span> 00044 <span class="comment"></span> }; 00045 00046 00047 <span class="comment">/******************************* Viewer Structs *****************************/</span> 00048 00049 <span class="comment"></span> 00050 <span class="comment">/// OpenGL Viewer Viewport</span> 00051 <span class="comment"></span><span class="keyword">struct </span>FXViewport { 00052 FXint w,h; <span class="comment">// Viewport dimensions</span> 00053 FXdouble left,right; <span class="comment">// World box</span> 00054 FXdouble bottom,top; <a name="l00055"></a><a class="code" href="structFX_1_1FXViewport.html">00055</a> FXdouble hither,yon; 00056 }; 00057 00058 00059 <span class="comment">// OpenGL Light Source</span> 00060 <span class="keyword">struct </span>FXAPI FXLight { 00061 FXVec4f ambient; <span class="comment">// Ambient light color</span> 00062 FXVec4f diffuse; <span class="comment">// Diffuse light color</span> 00063 FXVec4f specular; <span class="comment">// Specular light color</span> 00064 FXVec4f position; <span class="comment">// Light position</span> 00065 FXVec3f direction; <span class="comment">// Spot direction</span> 00066 FXfloat exponent; <span class="comment">// Spotlight exponent</span> 00067 FXfloat cutoff; <span class="comment">// Spotlight cutoff angle</span> 00068 FXfloat c_attn; <span class="comment">// Constant attenuation factor</span> 00069 FXfloat l_attn; <span class="comment">// Linear attenuation factor</span> 00070 FXfloat q_attn; <span class="comment">// Quadratic attenuation factor</span> 00071 }; 00072 00073 00074 <span class="comment">// OpenGL Material Description</span> 00075 <span class="keyword">struct </span>FXAPI FXMaterial { 00076 FXVec4f ambient; <span class="comment">// Ambient material color</span> 00077 FXVec4f diffuse; <span class="comment">// Diffuse material color</span> 00078 FXVec4f specular; <span class="comment">// Specular material color</span> 00079 FXVec4f emission; <span class="comment">// Emissive material color</span> 00080 FXfloat shininess; <span class="comment">// Specular shininess</span> 00081 }; 00082 00083 00084 <span class="comment">// Feedback buffer sort routine</span> 00085 <span class="keyword">typedef</span> FXbool (*FXZSortFunc)(FXfloat*& buffer,FXint& used,FXint& size); 00086 00087 00088 <span class="comment">/******************************** Viewer Class ******************************/</span> 00089 00090 <span class="comment"></span> 00091 <span class="comment">/// Canvas, an area drawn by another object</span> 00092 <span class="comment"></span><span class="keyword">class </span>FXAPI FXGLViewer : <span class="keyword">public</span> FXGLCanvas { 00093 FXDECLARE(FXGLViewer) 00094 <span class="keyword">friend</span> <span class="keyword">class </span>FXGLObject; 00095 <span class="keyword">protected</span>: 00096 FXViewport wvt; <span class="comment">// Window viewport transform</span> 00097 FXMat4f transform; <span class="comment">// Current transformation matrix</span> 00098 FXMat4f itransform; <span class="comment">// Inverse of current transformation matrix</span> 00099 FXuint projection; <span class="comment">// Projection mode</span> <a name="l00100"></a><a class="code" href="classFX_1_1FXGLViewer.html">00100</a> <a class="code" href="classFX_1_1FXQuatf.html">FXQuatf</a> rotation; <span class="comment">// Viewer orientation</span> 00101 FXdouble fov; <span class="comment">// Field of view</span> 00102 FXdouble zoom; <span class="comment">// Zoom factor</span> 00103 <a class="code" href="classFX_1_1FXVec3f.html">FXVec3f</a> center; <span class="comment">// Model center</span> 00104 <a class="code" href="classFX_1_1FXVec3f.html">FXVec3f</a> scale; <span class="comment">// Model scale</span> 00105 FXdouble worldpx; <span class="comment">// Pixel size in world</span> 00106 FXdouble modelpx; <span class="comment">// Pixel size in model</span> 00107 FXint maxhits; <span class="comment">// Maximum number of hits</span> 00108 FXdouble ax,ay; <span class="comment">// Quick view->world coordinate mapping</span> 00109 FXdouble diameter; <span class="comment">// Size of model diameter ( always > 0)</span> 00110 FXdouble distance; <span class="comment">// Distance of PRP to target</span> 00111 <a class="code" href="classFX_1_1FXVec4f.html">FXVec4f</a> background[2]; <span class="comment">// Background colors</span> 00112 <a class="code" href="classFX_1_1FXVec4f.html">FXVec4f</a> ambient; <span class="comment">// Global ambient light</span> 00113 FXLight light; <span class="comment">// Light source</span> 00114 FXMaterial material; <span class="comment">// Base material properties</span> 00115 FXint dial[3]; <span class="comment">// Dial positions</span> 00116 <a class="code" href="classFX_1_1FXString.html">FXString</a> help; <span class="comment">// Status help</span> 00117 <a class="code" href="classFX_1_1FXString.html">FXString</a> tip; <span class="comment">// Tooltip for background</span> 00118 <a class="code" href="classFX_1_1FXGLObject.html">FXGLObject</a> *dropped; <span class="comment">// Object being dropped on</span> 00119 <a class="code" href="classFX_1_1FXGLObject.html">FXGLObject</a> *selection; <span class="comment">// Current object</span> 00120 FXZSortFunc zsortfunc; <span class="comment">// Routine to sort feedback buffer</span> 00121 <a class="code" href="classFX_1_1FXGLObject.html">FXGLObject</a> *scene; <span class="comment">// What we're looking at</span> 00122 FXbool doesturbo; <span class="comment">// Doing turbo mode</span> 00123 FXbool turbomode; <span class="comment">// Turbo mode</span> 00124 FXuchar mode; <span class="comment">// Mode the widget is in</span> 00125 <span class="keyword">public</span>: 00126 00127 <span class="comment">// Common DND types</span> 00128 <span class="keyword">static</span> FXDragType objectType; <span class="comment">// GL Object type</span> 00129 00130 <span class="keyword">protected</span>: 00131 00132 <span class="comment">// Mouse actions when in viewing window</span> 00133 <span class="keyword">enum</span> { 00134 HOVERING, <span class="comment">// Hovering mouse w/o doing anything</span> 00135 PICKING, <span class="comment">// Pick mode</span> 00136 ROTATING, <span class="comment">// Rotating camera around target</span> 00137 POSTING, <span class="comment">// Posting right-mouse menu</span> 00138 TRANSLATING, <span class="comment">// Translating camera</span> 00139 ZOOMING, <span class="comment">// Zooming</span> 00140 FOVING, <span class="comment">// Change field-of-view</span> 00141 DRAGGING, <span class="comment">// Dragging objects</span> 00142 TRUCKING, <span class="comment">// Trucking camera</span> 00143 GYRATING, <span class="comment">// Rotation of camera around eye</span> 00144 DO_LASSOSELECT, <span class="comment">// Lasso select when mouse pressed</span> 00145 LASSOSELECT, <span class="comment">// Anchor of lasso rectangle</span> 00146 DO_LASSOZOOM, <span class="comment">// Zoom when mouse pressed</span> 00147 LASSOZOOM <span class="comment">// Zoom rectangle</span> 00148 }; 00149 00150 <span class="keyword">protected</span>: 00151 FXGLViewer(); 00152 <span class="keywordtype">void</span> glsetup(); 00153 <span class="keywordtype">void</span> updateProjection(); 00154 <span class="keywordtype">void</span> updateTransform(); 00155 FXVec3f spherePoint(FXint px,FXint py); 00156 FXQuatf turn(FXint fx,FXint fy,FXint tx,FXint ty); 00157 <span class="keywordtype">void</span> drawWorld(FXViewport& wv); 00158 <span class="keywordtype">void</span> drawAnti(FXViewport& wv); 00159 <span class="keywordtype">void</span> drawLasso(FXint x0,FXint y0,FXint x1,FXint y1); 00160 FXint selectHits(FXuint*& hits,FXint& nhits,FXint x,FXint y,FXint w,FXint h); 00161 FXint renderFeedback(FXfloat *buffer,FXint x,FXint y,FXint w,FXint h,FXint maxbuffer); 00162 <span class="keywordtype">void</span> drawFeedback(FXDCPrint& pdc,<span class="keyword">const</span> FXfloat* buffer,FXint used); 00163 <span class="keyword">virtual</span> FXGLObject* processHits(FXuint *pickbuffer,FXint nhits); 00164 <span class="keywordtype">void</span> setOp(FXuint o); 00165 <span class="keyword">private</span>: 00166 FXGLViewer(<span class="keyword">const</span> FXGLViewer&); 00167 FXGLViewer &operator=(<span class="keyword">const</span> FXGLViewer&); 00168 <span class="keywordtype">void</span> initialize(); 00169 <span class="keyword">public</span>: 00170 00171 <span class="comment">// Events</span> 00172 <span class="keywordtype">long</span> onPaint(FXObject*,FXSelector,<span class="keywordtype">void</span>*); 00173 <span class="keywordtype">long</span> onEnter(FXObject*,FXSelector,<span class="keywordtype">void</span>*); 00174 <span class="keywordtype">long</span> onLeave(FXObject*,FXSelector,<span class="keywordtype">void</span>*); 00175 <span class="keywordtype">long</span> onMotion(FXObject*,FXSelector,<span class="keywordtype">void</span>*); 00176 <span class="keywordtype">long</span> onMouseWheel(FXObject*,FXSelector,<span class="keywordtype">void</span>*); 00177 <span class="keywordtype">long</span> onChanged(FXObject*,FXSelector,<span class="keywordtype">void</span>*); 00178 <span class="keywordtype">long</span> onPick(FXObject*,FXSelector,<span class="keywordtype">void</span>*); 00179 <span class="keywordtype">long</span> onClicked(FXObject*,FXSelector,<span class="keywordtype">void</span>*); 00180 <span class="keywordtype">long</span> onDoubleClicked(FXObject*,FXSelector,<span class="keywordtype">void</span>*); 00181 <span class="keywordtype">long</span> onTripleClicked(FXObject*,FXSelector,<span class="keywordtype">void</span>*); 00182 <span class="keywordtype">long</span> onLassoed(FXObject*,FXSelector,<span class="keywordtype">void</span>*); 00183 <span class="keywordtype">long</span> onSelected(FXObject*,FXSelector,<span class="keywordtype">void</span>*); 00184 <span class="keywordtype">long</span> onDeselected(FXObject*,FXSelector,<span class="keywordtype">void</span>*); 00185 <span class="keywordtype">long</span> onInserted(FXObject*,FXSelector,<span class="keywordtype">void</span>*); 00186 <span class="keywordtype">long</span> onDeleted(FXObject*,FXSelector,<span class="keywordtype">void</span>*); 00187 <span class="keywordtype">long</span> onLeftBtnPress(FXObject*,FXSelector,<span class="keywordtype">void</span>*); 00188 <span class="keywordtype">long</span> onLeftBtnRelease(FXObject*,FXSelector,<span class="keywordtype">void</span>*); 00189 <span class="keywordtype">long</span> onMiddleBtnPress(FXObject*,FXSelector,<span class="keywordtype">void</span>*); 00190 <span class="keywordtype">long</span> onMiddleBtnRelease(FXObject*,FXSelector,<span class="keywordtype">void</span>*); 00191 <span class="keywordtype">long</span> onRightBtnPress(FXObject*,FXSelector,<span class="keywordtype">void</span>*); 00192 <span class="keywordtype">long</span> onRightBtnRelease(FXObject*,FXSelector,<span class="keywordtype">void</span>*); 00193 <span class="keywordtype">long</span> onUngrabbed(FXObject*,FXSelector,<span class="keywordtype">void</span>*); 00194 <span class="keywordtype">long</span> onKeyPress(FXObject*,FXSelector,<span class="keywordtype">void</span>*); 00195 <span class="keywordtype">long</span> onKeyRelease(FXObject*,FXSelector,<span class="keywordtype">void</span>*); 00196 <span class="keywordtype">long</span> onFocusIn(FXObject*,FXSelector,<span class="keywordtype">void</span>*); 00197 <span class="keywordtype">long</span> onFocusOut(FXObject*,FXSelector,<span class="keywordtype">void</span>*); 00198 <span class="keywordtype">long</span> onClipboardLost(FXObject*,FXSelector,<span class="keywordtype">void</span>*); 00199 <span class="keywordtype">long</span> onClipboardGained(FXObject*,FXSelector,<span class="keywordtype">void</span>*); 00200 <span class="keywordtype">long</span> onClipboardRequest(FXObject*,FXSelector,<span class="keywordtype">void</span>*); 00201 00202 <span class="comment">// Commands</span> 00203 <span class="keywordtype">long</span> onCmdPerspective(FXObject*,FXSelector,<span class="keywordtype">void</span>*); 00204 <span class="keywordtype">long</span> onUpdPerspective(FXObject*,FXSelector,<span class="keywordtype">void</span>*); 00205 <span class="keywordtype">long</span> onCmdParallel(FXObject*,FXSelector,<span class="keywordtype">void</span>*); 00206 <span class="keywordtype">long</span> onUpdParallel(FXObject*,FXSelector,<span class="keywordtype">void</span>*); 00207 <span class="keywordtype">long</span> onCmdFront(FXObject*,FXSelector,<span class="keywordtype">void</span>*); 00208 <span class="keywordtype">long</span> onUpdFront(FXObject*,FXSelector,<span class="keywordtype">void</span>*); 00209 <span class="keywordtype">long</span> onCmdBack(FXObject*,FXSelector,<span class="keywordtype">void</span>*); 00210 <span class="keywordtype">long</span> onUpdBack(FXObject*,FXSelector,<span class="keywordtype">void</span>*); 00211 <span class="keywordtype">long</span> onCmdLeft(FXObject*,FXSelector,<span class="keywordtype">void</span>*); 00212 <span class="keywordtype">long</span> onUpdLeft(FXObject*,FXSelector,<span class="keywordtype">void</span>*); 00213 <span class="keywordtype">long</span> onCmdRight(FXObject*,FXSelector,<span class="keywordtype">void</span>*); 00214 <span class="keywordtype">long</span> onUpdRight(FXObject*,FXSelector,<span class="keywordtype">void</span>*); 00215 <span class="keywordtype">long</span> onCmdTop(FXObject*,FXSelector,<span class="keywordtype">void</span>*); 00216 <span class="keywordtype">long</span> onUpdTop(FXObject*,FXSelector,<span class="keywordtype">void</span>*); 00217 <span class="keywordtype">long</span> onCmdBottom(FXObject*,FXSelector,<span class="keywordtype">void</span>*); 00218 <span class="keywordtype">long</span> onUpdBottom(FXObject*,FXSelector,<span class="keywordtype">void</span>*); 00219 <span class="keywordtype">long</span> onCmdResetView(FXObject*,FXSelector,<span class="keywordtype">void</span>*); 00220 <span class="keywordtype">long</span> onCmdFitView(FXObject*,FXSelector,<span class="keywordtype">void</span>*); 00221 <span class="keywordtype">long</span> onDNDEnter(FXObject*,FXSelector,<span class="keywordtype">void</span>*); 00222 <span class="keywordtype">long</span> onDNDLeave(FXObject*,FXSelector,<span class="keywordtype">void</span>*); 00223 <span class="keywordtype">long</span> onDNDMotion(FXObject*,FXSelector,<span class="keywordtype">void</span>*); 00224 <span class="keywordtype">long</span> onDNDDrop(FXObject*,FXSelector,<span class="keywordtype">void</span>*); 00225 <span class="keywordtype">long</span> onTipTimer(FXObject*,FXSelector,<span class="keywordtype">void</span>*); 00226 <span class="keywordtype">long</span> onCmdXYZDial(FXObject*,FXSelector,<span class="keywordtype">void</span>*); 00227 <span class="keywordtype">long</span> onUpdXYZDial(FXObject*,FXSelector,<span class="keywordtype">void</span>*); 00228 <span class="keywordtype">long</span> onCmdRollPitchYaw(FXObject*,FXSelector,<span class="keywordtype">void</span>*); 00229 <span class="keywordtype">long</span> onUpdRollPitchYaw(FXObject*,FXSelector,<span class="keywordtype">void</span>*); 00230 <span class="keywordtype">long</span> onCmdXYZScale(FXObject*,FXSelector,<span class="keywordtype">void</span>*); 00231 <span class="keywordtype">long</span> onUpdXYZScale(FXObject*,FXSelector,<span class="keywordtype">void</span>*); 00232 <span class="keywordtype">long</span> onUpdCurrent(FXObject*,FXSelector,<span class="keywordtype">void</span>*); 00233 <span class="keywordtype">long</span> onCmdCutSel(FXObject*,FXSelector,<span class="keywordtype">void</span>*); 00234 <span class="keywordtype">long</span> onCmdCopySel(FXObject*,FXSelector,<span class="keywordtype">void</span>*); 00235 <span class="keywordtype">long</span> onCmdPasteSel(FXObject*,FXSelector,<span class="keywordtype">void</span>*); 00236 <span class="keywordtype">long</span> onCmdDeleteSel(FXObject*,FXSelector,<span class="keywordtype">void</span>*); 00237 <span class="keywordtype">long</span> onUpdDeleteSel(FXObject*,FXSelector,<span class="keywordtype">void</span>*); 00238 <span class="keywordtype">long</span> onCmdBackColor(FXObject*,FXSelector,<span class="keywordtype">void</span>*); 00239 <span class="keywordtype">long</span> onUpdBackColor(FXObject*,FXSelector,<span class="keywordtype">void</span>*); 00240 <span class="keywordtype">long</span> onCmdGradientBackColor(FXObject*,FXSelector,<span class="keywordtype">void</span>*); 00241 <span class="keywordtype">long</span> onUpdGradientBackColor(FXObject*,FXSelector,<span class="keywordtype">void</span>*); <a name="l00242"></a><a class="code" href="classFX_1_1FXGLViewer.html#a6">00242</a> <span class="keywordtype">long</span> onCmdAmbientColor(<a class="code" href="classFX_1_1FXObject.html">FXObject</a>*,FXSelector,<span class="keywordtype">void</span>*); 00243 <span class="keywordtype">long</span> onUpdAmbientColor(<a class="code" href="classFX_1_1FXObject.html">FXObject</a>*,FXSelector,<span class="keywordtype">void</span>*); 00244 <span class="keywordtype">long</span> onCmdLighting(<a class="code" href="classFX_1_1FXObject.html">FXObject</a>*,FXSelector,<span class="keywordtype">void</span>*); <a name="l00245"></a><a class="code" href="classFX_1_1FXGLViewer.html#a7">00245</a> <span class="keywordtype">long</span> onUpdLighting(<a class="code" href="classFX_1_1FXObject.html">FXObject</a>*,FXSelector,<span class="keywordtype">void</span>*); 00246 <span class="keywordtype">long</span> onCmdFog(<a class="code" href="classFX_1_1FXObject.html">FXObject</a>*,FXSelector,<span class="keywordtype">void</span>*); 00247 <span class="keywordtype">long</span> onUpdFog(<a class="code" href="classFX_1_1FXObject.html">FXObject</a>*,FXSelector,<span class="keywordtype">void</span>*); 00248 <span class="keywordtype">long</span> onCmdDither(<a class="code" href="classFX_1_1FXObject.html">FXObject</a>*,FXSelector,<span class="keywordtype">void</span>*); 00249 <span class="keywordtype">long</span> onUpdDither(<a class="code" href="classFX_1_1FXObject.html">FXObject</a>*,FXSelector,<span class="keywordtype">void</span>*); 00250 <span class="keywordtype">long</span> onCmdFov(<a class="code" href="classFX_1_1FXObject.html">FXObject</a>*,FXSelector,<span class="keywordtype">void</span>*); 00251 <span class="keywordtype">long</span> onUpdFov(<a class="code" href="classFX_1_1FXObject.html">FXObject</a>*,FXSelector,<span class="keywordtype">void</span>*); 00252 <span class="keywordtype">long</span> onCmdZoom(<a class="code" href="classFX_1_1FXObject.html">FXObject</a>*,FXSelector,<span class="keywordtype">void</span>*); 00253 <span class="keywordtype">long</span> onUpdZoom(<a class="code" href="classFX_1_1FXObject.html">FXObject</a>*,FXSelector,<span class="keywordtype">void</span>*); 00254 <span class="keywordtype">long</span> onCmdLightAmbient(<a class="code" href="classFX_1_1FXObject.html">FXObject</a>*,FXSelector,<span class="keywordtype">void</span>*); 00255 <span class="keywordtype">long</span> onUpdLightAmbient(<a class="code" href="classFX_1_1FXObject.html">FXObject</a>*,FXSelector,<span class="keywordtype">void</span>*); 00256 <span class="keywordtype">long</span> onCmdLightDiffuse(<a class="code" href="classFX_1_1FXObject.html">FXObject</a>*,FXSelector,<span class="keywordtype">void</span>*); 00257 <span class="keywordtype">long</span> onUpdLightDiffuse(<a class="code" href="classFX_1_1FXObject.html">FXObject</a>*,FXSelector,<span class="keywordtype">void</span>*); 00258 <span class="keywordtype">long</span> onCmdLightSpecular(<a class="code" href="classFX_1_1FXObject.html">FXObject</a>*,FXSelector,<span class="keywordtype">void</span>*); 00259 <span class="keywordtype">long</span> onUpdLightSpecular(<a class="code" href="classFX_1_1FXObject.html">FXObject</a>*,FXSelector,<span class="keywordtype">void</span>*); 00260 <span class="keywordtype">long</span> onCmdTurbo(<a class="code" href="classFX_1_1FXObject.html">FXObject</a>*,FXSelector,<span class="keywordtype">void</span>*); 00261 <span class="keywordtype">long</span> onUpdTurbo(<a class="code" href="classFX_1_1FXObject.html">FXObject</a>*,FXSelector,<span class="keywordtype">void</span>*); 00262 <span class="keywordtype">long</span> onCmdPrintImage(<a class="code" href="classFX_1_1FXObject.html">FXObject</a>*,FXSelector,<span class="keywordtype">void</span>*); 00263 <span class="keywordtype">long</span> onCmdPrintVector(<a class="code" href="classFX_1_1FXObject.html">FXObject</a>*,FXSelector,<span class="keywordtype">void</span>*); 00264 <span class="keywordtype">long</span> onCmdLassoZoom(<a class="code" href="classFX_1_1FXObject.html">FXObject</a>*,FXSelector,<span class="keywordtype">void</span>*); 00265 <span class="keywordtype">long</span> onCmdLassoSelect(<a class="code" href="classFX_1_1FXObject.html">FXObject</a>*,FXSelector,<span class="keywordtype">void</span>*); 00266 <span class="keywordtype">long</span> onQueryHelp(<a class="code" href="classFX_1_1FXObject.html">FXObject</a>*,FXSelector,<span class="keywordtype">void</span>*); 00267 <span class="keywordtype">long</span> onQueryTip(<a class="code" href="classFX_1_1FXObject.html">FXObject</a>*,FXSelector,<span class="keywordtype">void</span>*); 00268 <span class="keyword">virtual</span> <span class="keywordtype">long</span> onDefault(<a class="code" href="classFX_1_1FXObject.html">FXObject</a>*,FXSelector,<span class="keywordtype">void</span>*); 00269 00270 <span class="keyword">public</span>: 00271 00272 <span class="comment">// Projection modes</span> 00273 <span class="keyword">enum</span> { 00274 PARALLEL, <span class="comment">// Parallel projection</span> 00275 PERSPECTIVE <span class="comment">// Perspective projection</span> 00276 }; 00277 00278 <span class="comment">// Messages</span> 00279 <span class="keyword">enum</span> { 00280 ID_PERSPECTIVE=FXGLCanvas::ID_LAST, 00281 ID_PARALLEL, 00282 ID_FRONT, 00283 ID_BACK, 00284 ID_LEFT, 00285 ID_RIGHT, 00286 ID_TOP, 00287 ID_BOTTOM, 00288 ID_RESETVIEW, 00289 ID_FITVIEW, 00290 ID_TOP_COLOR, 00291 ID_BOTTOM_COLOR, 00292 ID_BACK_COLOR, 00293 ID_AMBIENT_COLOR, 00294 ID_LIGHT_AMBIENT, 00295 ID_LIGHT_DIFFUSE, <a name="l00296"></a><a class="code" href="classFX_1_1FXGLViewer.html#a24">00296</a> ID_LIGHT_SPECULAR, 00297 ID_LIGHTING, 00298 ID_TURBO, 00299 ID_FOG, 00300 ID_DITHER, 00301 ID_SCALE_X, <a name="l00302"></a><a class="code" href="classFX_1_1FXGLViewer.html#a26">00302</a> ID_SCALE_Y, 00303 ID_SCALE_Z, 00304 ID_DIAL_X, 00305 ID_DIAL_Y, 00306 ID_DIAL_Z, 00307 ID_ROLL, <a name="l00308"></a><a class="code" href="classFX_1_1FXGLViewer.html#a28">00308</a> ID_PITCH, 00309 ID_YAW, 00310 ID_FOV, 00311 ID_ZOOM, 00312 ID_CUT_SEL, 00313 ID_COPY_SEL, <a name="l00314"></a><a class="code" href="classFX_1_1FXGLViewer.html#a30">00314</a> ID_PASTE_SEL, 00315 ID_DELETE_SEL, 00316 ID_PRINT_IMAGE, 00317 ID_PRINT_VECTOR, 00318 ID_LASSO_ZOOM, 00319 ID_LASSO_SELECT, <a name="l00320"></a><a class="code" href="classFX_1_1FXGLViewer.html#a32">00320</a> ID_LAST 00321 }; 00322 00323 <span class="keyword">public</span>: 00324 00325 <span class="comment">// Common DND type names</span> <a name="l00326"></a><a class="code" href="classFX_1_1FXGLViewer.html#a34">00326</a> <span class="keyword">static</span> <span class="keyword">const</span> FXchar objectTypeName[]; 00327 00328 <span class="keyword">public</span>: 00329 <span class="comment"></span> 00330 <span class="comment"> /// Construct GL viewer widget</span> 00331 <span class="comment"></span> FXGLViewer(<a class="code" href="classFX_1_1FXComposite.html">FXComposite</a>* p,<a class="code" href="classFX_1_1FXGLVisual.html">FXGLVisual</a> *vis,<a class="code" href="classFX_1_1FXObject.html">FXObject</a>* tgt=NULL,FXSelector sel=0,FXuint opts=0,FXint x=0,FXint y=0,FXint w=0,FXint h=0); 00332 <span class="comment"></span> 00333 <span class="comment"> /// Construct GL viewer widget sharing display list with another GL viewer</span> 00334 <span class="comment"></span> FXGLViewer(<a class="code" href="classFX_1_1FXComposite.html">FXComposite</a>* p,<a class="code" href="classFX_1_1FXGLVisual.html">FXGLVisual</a> *vis,FXGLViewer* sharegroup,<a class="code" href="classFX_1_1FXObject.html">FXObject</a>* tgt=NULL,FXSelector sel=0,FXuint opts=0,FXint x=0,FXint y=0,FXint w=0,FXint h=0); 00335 <span class="comment"></span> 00336 <span class="comment"> /// Create all of the server-side resources for this window</span> 00337 <span class="comment"></span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> create(); 00338 <span class="comment"></span> 00339 <span class="comment"> /// Detach server-side resources</span> 00340 <span class="comment"></span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> detach(); 00341 <span class="comment"></span> 00342 <span class="comment"> /// Perform layout</span> 00343 <span class="comment"></span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> layout(); <a name="l00344"></a><a class="code" href="classFX_1_1FXGLViewer.html#a40">00344</a> <span class="comment"></span> 00345 <span class="comment"> /// Return size of pixel in world coordinates</span> 00346 <span class="comment"></span> FXdouble worldPix()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> worldpx; } 00347 <span class="comment"></span> 00348 <span class="comment"> /// Return size of pixel in model coordinates</span> 00349 <span class="comment"></span> FXdouble modelPix()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> modelpx; } <a name="l00350"></a><a class="code" href="classFX_1_1FXGLViewer.html#a42">00350</a> <span class="comment"></span> 00351 <span class="comment"> /// Return a NULL-terminated list of all objects in the given rectangle, or NULL</span> 00352 <span class="comment"></span> <a class="code" href="classFX_1_1FXGLObject.html">FXGLObject</a>** lasso(FXint x1,FXint y1,FXint x2,FXint y2); <a name="l00353"></a><a class="code" href="classFX_1_1FXGLViewer.html#a43">00353</a> <span class="comment"></span> 00354 <span class="comment"> /// Return a NULL-terminated list of all objects in the given rectangle, or NULL</span> 00355 <span class="comment"></span> <span class="keyword">virtual</span> <a class="code" href="classFX_1_1FXGLObject.html">FXGLObject</a>** select(FXint x,FXint y,FXint w,FXint h); <a name="l00356"></a><a class="code" href="classFX_1_1FXGLViewer.html#a44">00356</a> <span class="comment"></span> 00357 <span class="comment"> /// Perform a pick operation, returning the object at the given x,y position, or NULL</span> 00358 <span class="comment"></span> <span class="keyword">virtual</span> <a class="code" href="classFX_1_1FXGLObject.html">FXGLObject</a>* pick(FXint x,FXint y); 00359 <span class="comment"></span> 00360 <span class="comment"> /// Change the model bounding box; this adjusts the viewer</span> 00361 <span class="comment"></span> FXbool setBounds(<span class="keyword">const</span> <a class="code" href="classFX_1_1FXRange.html">FXRange</a>& box); <a name="l00362"></a><a class="code" href="classFX_1_1FXGLViewer.html#a46">00362</a> <span class="comment"></span> 00363 <span class="comment"> /// Fit viewer to the given bounding box</span> 00364 <span class="comment"></span> FXbool fitToBounds(<span class="keyword">const</span> <a class="code" href="classFX_1_1FXRange.html">FXRange</a>& box); 00365 <span class="comment"></span> 00366 <span class="comment"> /// Return the viewer's viewport</span> 00367 <span class="comment"></span> <span class="keywordtype">void</span> getViewport(<a class="code" href="structFX_1_1FXViewport.html">FXViewport</a>& v) <span class="keyword">const</span>; <a name="l00368"></a><a class="code" href="classFX_1_1FXGLViewer.html#a48">00368</a> <span class="comment"></span> 00369 <span class="comment"> /// Translate eye-coordinate to screen coordinate</span> 00370 <span class="comment"></span> <span class="keywordtype">void</span> eyeToScreen(FXint& sx,FXint& sy,<a class="code" href="classFX_1_1FXVec3f.html">FXVec3f</a> e); 00371 <span class="comment"></span> 00372 <span class="comment"> /// Translate screen coordinate to eye coordinate at the given depth</span> 00373 <span class="comment"></span> <a class="code" href="classFX_1_1FXVec3f.html">FXVec3f</a> screenToEye(FXint sx,FXint sy,FXfloat eyez=0.0); <a name="l00374"></a><a class="code" href="classFX_1_1FXGLViewer.html#a50">00374</a> <span class="comment"></span> 00375 <span class="comment"> /// Translate screen coordinate to eye coordinate at the target point depth</span> 00376 <span class="comment"></span> <a class="code" href="classFX_1_1FXVec3f.html">FXVec3f</a> screenToTarget(FXint sx,FXint sy); 00377 <span class="comment"></span> 00378 <span class="comment"> /// Translate world coordinate to eye coordinate</span> 00379 <span class="comment"></span> <a class="code" href="classFX_1_1FXVec3f.html">FXVec3f</a> worldToEye(<a class="code" href="classFX_1_1FXVec3f.html">FXVec3f</a> w); <a name="l00380"></a><a class="code" href="classFX_1_1FXGLViewer.html#a52">00380</a> <span class="comment"></span> 00381 <span class="comment"> /// Translate world coordinate to eye coordinate depth</span> 00382 <span class="comment"></span> FXfloat worldToEyeZ(<a class="code" href="classFX_1_1FXVec3f.html">FXVec3f</a> w); 00383 <span class="comment"></span> 00384 <span class="comment"> /// Translate eye coordinate to eye coordinate</span> 00385 <span class="comment"></span> <a class="code" href="classFX_1_1FXVec3f.html">FXVec3f</a> eyeToWorld(<a class="code" href="classFX_1_1FXVec3f.html">FXVec3f</a> e); <a name="l00386"></a><a class="code" href="classFX_1_1FXGLViewer.html#a54">00386</a> <span class="comment"></span> 00387 <span class="comment"> /// Calculate world coordinate vector from screen movement</span> 00388 <span class="comment"></span> <a class="code" href="classFX_1_1FXVec3f.html">FXVec3f</a> worldVector(FXint fx,FXint fy,FXint tx,FXint ty); 00389 <span class="comment"></span> 00390 <span class="comment"> /// Change default object material setting</span> 00391 <span class="comment"></span> <span class="keywordtype">void</span> setMaterial(<span class="keyword">const</span> FXMaterial &mtl); 00392 <span class="comment"></span> 00393 <span class="comment"> /// Return default object material setting</span> 00394 <span class="comment"></span> <span class="keywordtype">void</span> getMaterial(FXMaterial &mtl) <span class="keyword">const</span>; 00395 <span class="comment"></span> 00396 <span class="comment"> /// Change camera field of view angle (in degrees)</span> 00397 <span class="comment"></span> <span class="keywordtype">void</span> setFieldOfView(FXdouble fv); 00398 <span class="comment"></span> 00399 <span class="comment"> /// Return camera field of view angle</span> 00400 <span class="comment"></span> FXdouble getFieldOfView()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> fov; } 00401 <span class="comment"></span> 00402 <span class="comment"> /// Change camera zoom factor</span> 00403 <span class="comment"></span> <span class="keywordtype">void</span> setZoom(FXdouble zm); 00404 <span class="comment"></span> <a name="l00405"></a><a class="code" href="classFX_1_1FXGLViewer.html#a57">00405</a> <span class="comment"> /// Return camera zoom factor</span> 00406 <span class="comment"></span> FXdouble getZoom()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> zoom; } 00407 <span class="comment"></span> <a name="l00408"></a><a class="code" href="classFX_1_1FXGLViewer.html#a58">00408</a> <span class="comment"> /// Change target point distance</span> 00409 <span class="comment"></span> <span class="keywordtype">void</span> setDistance(FXdouble ed); 00410 <span class="comment"></span> 00411 <span class="comment"> /// Return target point distance</span> 00412 <span class="comment"></span> FXdouble getDistance()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> distance; } 00413 <span class="comment"></span> <a name="l00414"></a><a class="code" href="classFX_1_1FXGLViewer.html#a59">00414</a> <span class="comment"> /// Change unequal model scaling factors</span> 00415 <span class="comment"></span> <span class="keywordtype">void</span> setScale(<a class="code" href="classFX_1_1FXVec3f.html">FXVec3f</a> s); 00416 <span class="comment"></span> <a name="l00417"></a><a class="code" href="classFX_1_1FXGLViewer.html#a60">00417</a> <span class="comment"> /// Return current scaling factors</span> 00418 <span class="comment"></span> <span class="keyword">const</span> <a class="code" href="classFX_1_1FXVec3f.html">FXVec3f</a>& getScale()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> scale; } 00419 <span class="comment"></span> 00420 <span class="comment"> /// Change camera orientation from quaternion</span> 00421 <span class="comment"></span> <span class="keywordtype">void</span> setOrientation(FXQuatf rot); 00422 <span class="comment"></span> 00423 <span class="comment"> /// Return current camera orientation quaternion</span> 00424 <span class="comment"></span> <span class="keyword">const</span> FXQuatf& getOrientation()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> rotation; } <a name="l00425"></a><a class="code" href="classFX_1_1FXGLViewer.html#a61">00425</a> <span class="comment"></span> 00426 <span class="comment"> /// Change object center (tranlation)</span> 00427 <span class="comment"></span> <span class="keywordtype">void</span> setCenter(<a class="code" href="classFX_1_1FXVec3f.html">FXVec3f</a> cntr); <a name="l00428"></a><a class="code" href="classFX_1_1FXGLViewer.html#a62">00428</a> <span class="comment"></span> 00429 <span class="comment"> /// Return object center</span> 00430 <span class="comment"></span> <span class="keyword">const</span> <a class="code" href="classFX_1_1FXVec3f.html">FXVec3f</a>& getCenter()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> center; } 00431 <span class="comment"></span> 00432 <span class="comment"> /// Translate object center</span> 00433 <span class="comment"></span> <span class="keywordtype">void</span> translate(FXVec3f vec); 00434 <span class="comment"></span> 00435 <span class="comment"> /// Return boresight vector</span> 00436 <span class="comment"></span> FXbool getBoreVector(FXint sx,FXint sy,FXVec3f& point,FXVec3f& dir); 00437 <span class="comment"></span> 00438 <span class="comment"> /// Return eyesight vector</span> 00439 <span class="comment"></span> FXVec3f getEyeVector() <span class="keyword">const</span>; 00440 <span class="comment"></span> 00441 <span class="comment"> /// Return eye position</span> 00442 <span class="comment"></span> FXVec3f getEyePosition() <span class="keyword">const</span>; 00443 <span class="comment"></span> 00444 <span class="comment"> /// Change help text</span> 00445 <span class="comment"></span> <span class="keywordtype">void</span> setHelpText(<span class="keyword">const</span> FXString& text); 00446 <span class="comment"></span> 00447 <span class="comment"> /// Return help text</span> 00448 <span class="comment"></span> FXString getHelpText()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> help; } 00449 <span class="comment"></span> 00450 <span class="comment"> /// Change tip text</span> 00451 <span class="comment"></span> <span class="keywordtype">void</span> setTipText(<span class="keyword">const</span> FXString& text); 00452 <span class="comment"></span> 00453 <span class="comment"> /// Return tip text</span> 00454 <span class="comment"></span> FXString getTipText()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> tip; } 00455 <span class="comment"></span> 00456 <span class="comment"> /// Return the current transformation matrix</span> 00457 <span class="comment"></span> <span class="keyword">const</span> FXMat4f& getTransform()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> transform; } 00458 <span class="comment"></span> 00459 <span class="comment"> /// Return the inverse of the current transformation matrix</span> 00460 <span class="comment"></span> <span class="keyword">const</span> FXMat4f& getInvTransform()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> itransform; } 00461 <span class="comment"></span> 00462 <span class="comment"> /// Change the scene, i.e. the object being displayed.</span> 00463 <span class="comment"></span> <span class="keywordtype">void</span> setScene(FXGLObject* sc); 00464 <span class="comment"></span> 00465 <span class="comment"> /// Return the current scene object</span> 00466 <span class="comment"></span> FXGLObject* getScene()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> scene; } 00467 <span class="comment"></span> 00468 <span class="comment"> /// Change selection</span> 00469 <span class="comment"></span> <span class="keywordtype">void</span> setSelection(FXGLObject* sel); 00470 <span class="comment"></span> 00471 <span class="comment"> /// Return selection</span> 00472 <span class="comment"></span> FXGLObject* getSelection()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> selection; } 00473 <span class="comment"></span> 00474 <span class="comment"> /// Change the projection mode, PERSPECTIVE or PARALLEL</span> 00475 <span class="comment"></span> <span class="keywordtype">void</span> setProjection(FXuint proj); 00476 <span class="comment"></span> 00477 <span class="comment"> /// Return the projection mode</span> 00478 <span class="comment"></span> FXuint getProjection()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> projection; } 00479 <span class="comment"></span> 00480 <span class="comment"> /// Change top or bottom or both background colors</span> 00481 <span class="comment"></span> <span class="keywordtype">void</span> setBackgroundColor(<span class="keyword">const</span> FXVec4f& clr,FXbool bottom=MAYBE); 00482 <span class="comment"></span> 00483 <span class="comment"> /// Return top or bottom window background color.</span> 00484 <span class="comment"></span> <span class="keyword">const</span> FXVec4f& getBackgroundColor(FXbool bottom=FALSE)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> background[bottom]; } 00485 <span class="comment"></span> 00486 <span class="comment"> /// Change global ambient light color</span> 00487 <span class="comment"></span> <span class="keywordtype">void</span> setAmbientColor(<span class="keyword">const</span> FXVec4f& clr); 00488 <span class="comment"></span> 00489 <span class="comment"> /// Return global ambient light color</span> 00490 <span class="comment"></span> <span class="keyword">const</span> FXVec4f& getAmbientColor()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> ambient; } 00491 <span class="comment"></span> 00492 <span class="comment"> /**</span> 00493 <span class="comment"> * Read the pixels off the screen as array of FXColor;</span> 00494 <span class="comment"> * this array can be directly passed to fxsaveBMP and other image</span> 00495 <span class="comment"> * output routines.</span> 00496 <span class="comment"> */</span> 00497 FXbool readPixels(FXColor*& buffer,FXint x,FXint y,FXint w,FXint h); 00498 <span class="comment"></span> 00499 <span class="comment"> /**</span> 00500 <span class="comment"> * Read the feedback buffer containing the current scene, returning used</span> 00501 <span class="comment"> * and allocated size.</span> 00502 <span class="comment"> */</span> 00503 FXbool readFeedback(FXfloat*& buffer,FXint& used,FXint& size,FXint x,FXint y,FXint w,FXint h); 00504 <span class="comment"></span> 00505 <span class="comment"> /**</span> 00506 <span class="comment"> * Change hidden-surface feedback buffer sorting algorithm.</span> 00507 <span class="comment"> * This can be used for move/draw printed output depth sorting.</span> 00508 <span class="comment"> */</span> 00509 <span class="keywordtype">void</span> setZSortFunc(FXZSortFunc func){ zsortfunc=func; } 00510 <span class="comment"></span> 00511 <span class="comment"> /// Return hidden surface sorting function.</span> 00512 <span class="comment"></span> FXZSortFunc getZSortFunc()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> zsortfunc; } 00513 <span class="comment"></span> 00514 <span class="comment"> /**</span> 00515 <span class="comment"> * Change the maximum hits, i.e. the maximum size of the pick buffer.</span> 00516 <span class="comment"> * When set to less than or equal to zero, picking is essentially turned off.</span> 00517 <span class="comment"> */</span> 00518 <span class="keywordtype">void</span> setMaxHits(FXint maxh) { maxhits=maxh; } 00519 <span class="comment"></span> 00520 <span class="comment"> /// Return maximum pickbuffer size</span> 00521 <span class="comment"></span> FXint getMaxHits()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> maxhits; } 00522 <span class="comment"></span> 00523 <span class="comment"> /**</span> 00524 <span class="comment"> * When drawing a GL object, if doesTurbo() is true, the object</span> 00525 <span class="comment"> * may choose to perform a reduced complexity drawing as the user is</span> 00526 <span class="comment"> * interactively manipulating; another update will be done later when</span> 00527 <span class="comment"> * the full complexity drawing can be performed again.</span> 00528 <span class="comment"> */</span> 00529 FXbool doesTurbo()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> doesturbo; } 00530 <span class="comment"></span> 00531 <span class="comment"> /// Return turbo mode setting</span> 00532 <span class="comment"></span> FXbool getTurboMode()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> turbomode; } 00533 <span class="comment"></span> 00534 <span class="comment"> /// Set turbo mode</span> 00535 <span class="comment"></span> <span class="keywordtype">void</span> setTurboMode(FXbool turbo=TRUE); 00536 <span class="comment"></span> 00537 <span class="comment"> /// Return light source settings</span> 00538 <span class="comment"></span> <span class="keywordtype">void</span> getLight(FXLight& lite) <span class="keyword">const</span>; 00539 <span class="comment"></span> 00540 <span class="comment"> /// Change light source settings</span> 00541 <span class="comment"></span> <span class="keywordtype">void</span> setLight(<span class="keyword">const</span> FXLight& lite); 00542 <span class="comment"></span> 00543 <span class="comment"> /// Save viewer to a stream</span> 00544 <span class="comment"></span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> save(FXStream& store) <span class="keyword">const</span>; 00545 <span class="comment"></span> 00546 <span class="comment"> /// Load viewer from a stream</span> 00547 <span class="comment"></span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> load(FXStream& store); 00548 <span class="comment"></span> 00549 <span class="comment"> /// Destructor</span> 00550 <span class="comment"></span> <span class="keyword">virtual</span> ~FXGLViewer(); 00551 }; 00552 00553 } 00554 00555 <span class="preprocessor">#endif</span> 00556 <span class="preprocessor"></span> </pre></div></font> <!--- COPYRIGHT --> <p> <table width=100% cellpadding=0 cellspacing=0><tr><td width=100% valign=top id=HEADLINE align=right> <img src='../art/line.gif' width=100% height=1><font size=-1> Copyright © 1997-2004 Jeroen van der Zijp</font> </td></tr></table> </p> <!--- COPYRIGHT --> </body> </html>