VAPoR  3.0.0
visualizer.h
Go to the documentation of this file.
1 //************************************************************************
2 // *
3 // Copyright (C) 2004 *
4 // University Corporation for Atmospheric Research *
5 // All Rights Reserved *
6 // *
7 //************************************************************************/
8 //
9 // File: Visualizer.h
10 //
11 // Author: Alan Norton
12 // National Center for Atmospheric Research
13 // PO 3000, Boulder, Colorado
14 //
15 // Date: September 2013
16 //
17 // Description: Definition of Visualizer class:
18 // A Visualizer object is associated with each visualization window. It contains
19 // information required for rendering, performs
20 // navigation and resize, and defers drawing to the viz window's list of
21 // registered renderers.
22 
23 #ifndef Visualizer_H
24 #define Visualizer_H
25 
26 #include <map>
27 #include <jpeglib.h>
28 #include "params.h"
29 #include "renderparams.h"
30 #include <vapor/MyBase.h>
31 #include <vapor/common.h>
32 #include "datastatus.h"
33 #include "mousemodeparams.h"
34 
35 
36 namespace VAPoR {
37 typedef bool (*renderCBFcn)(int winnum, bool newCoords);
38 
39 class ViewpointParams;
40 class RegionParams;
41 class AnimationParams;
42 class VizFeatureParams;
43 class VizFeatureRenderer;
44 class Renderer;
45 class Trackball;
46 class TranslateStretchManip;
47 class TextObject;
48 
60 
62 {
63 public:
64 
65  Visualizer( int winnum);
66  ~Visualizer();
67 
70  ViewpointParams* getActiveViewpointParams();
71 
74  RegionParams* getActiveRegionParams();
75 
78  AnimationParams* getActiveAnimationParams();
79 
82  VizFeatureParams* getActiveVizFeatureParams();
83 
84 
86  void initializeGL();
87 
90  Trackball* GetTrackball();
91 
95  void SetTrackballCoordsChanged(bool val){
96  _tBallChanged = val;
97  }
98 
102  int paintEvent();
103 
107  void resizeGL( int w, int h );
108 
111  int getWindowNum() {return _winNum;}
112 
114  void resetTrackball();
115 
120  void resetNearFar(ViewpointParams* vpParams);
121 
127  bool projectPointToWin(double userCoords[3], double winCoords[2]);
128 
136  int pointIsOnBox(double corners[8][3], double pickPt[2]);
137 
145  bool pixelToVector(double winCoords[2], const vector<double> cameraPos, double dirVec[3]);
146 
147  //void draw3DCursor(const double position[3]);
148 
152  Renderer* getRenderer(int i) {return _renderer[i];}
153 
156  int getNumRenderers(){return _renderer.size();}
157 
161  Renderer* getRenderer(RenderParams* p);
162 
165  VizFeatureRenderer* getVizFeatureRenderer() {return _vizFeatures;}
166 
172  int insertSortedRenderer(RenderParams* p, Renderer* ren){return insertRenderer(p, ren, 5);}
173 
177  bool removeRenderer(RenderParams* p);
178 
180  void removeAllRenderers();
181 
183  void removeDisabledRenderers();
184 
188  TranslateStretchManip* getManip(const std::string& paramTag){
189  int mode = MouseModeParams::getModeFromParams(paramTag);
190  return _manipHolder[mode];
191  }
194  double getPixelSize();
195 
198  static void setActiveWinNum(int winnum) {_activeWindowNum = winnum;}
199 
204  static void setRegionShareFlag(bool regionIsShared){_regionShareFlag = regionIsShared;}
205 
208  int getWidth() {return _width;}
209 
212  int getHeight() {return _height;}
213 
216  double* getModelViewMatrix();
217 
220  void setImageCaptureEnabled(bool onOff, string filename){
221  _imageCaptureEnabled = onOff;
222  if (onOff) _captureImageFile = filename;
223  else _captureImageFile = "";
224  }
225 
226 
227 
228 private:
234  int captureImage(string filename);
235 
237  void renderManip();
238 
241  void paintSetup(int timeStep);
242 
252  bool pointIsOnQuad(double cor1[3],double cor2[3],double cor3[3],double cor4[3], double pickPt[2]);
253 
262  int insertRenderer(RenderParams* p, Renderer* ren, int order);
263 
264  //The Visualizer keeps track of the renderers with an ordered list of them
265  //as well as with a map from renderparams to renderer
266  void mapRenderer(RenderParams* rp, Renderer* ren){_rendererMapping[rp] = ren;}
267 
270  bool windowIsActive(){return (_winNum == _activeWindowNum);}
271 
275  static bool activeWinSharesRegion() {return _regionShareFlag;}
276 
279  const double* getProjectionMatrix() { return _projectionMatrix;}
280 
283  const int* getViewport() {return _viewport;}
284 
286  enum OGLVendorType {
287  UNKNOWN = 0,
288  MESA,
289  NVIDIA,
290  ATI,
291  INTEL
292  };
293 
296  static OGLVendorType GetVendor();
297 
301  void setUpViewport(int width, int height);
302 
304  void renderText();
305 
307  void placeLights();
308 
312  void saveGLMatrix(int timestep, ViewpointParams*);
313 
317  bool getPixelData(unsigned char* data);
318 
320  class RenderListElt {
321  public:
322  Renderer* ren;
323  float camDist;
324  Params::ParamsBaseType renType;
325  };
326 
327 #ifndef DOXYGEN_SKIP_THIS
328  vector<TranslateStretchManip*> _manipHolder;
330  static Trackball* _globalTrackball;
331  Trackball* _localTrackball;
332  bool _tBallChanged;
333  bool _imageCaptureEnabled;
334  string _captureImageFile;
335  int _winNum;
336  int _width, _height;
337  int _previousTimeStep;
338  int _previousFrameNum;
339  VizFeatureRenderer* _vizFeatures;
340 
341  vector<Renderer*> _renderer;
342  vector<int>_renderOrder;
343 
344  //Map params to renderer
345  std::map<RenderParams*,Renderer*> _rendererMapping;
346 
347  float _farDist, _nearDist;
348 
349  int _viewport[4];
350  double _projectionMatrix[16];
351 
352  static int _activeWindowNum;
353  //This flag is true if the active window is sharing the region.
354  //If the current window is not active, it will still share the region, if
355  //the region is shared, and the active region is shared.
356  static bool _regionShareFlag;
357 
358 #endif //DOXYGEN_SKIP_THIS
359 };
360 
361 };
362 
363 #endif // Visualizer_H
TranslateStretchManip * getManip(const std::string &paramTag)
Definition: visualizer.h:188
A Params subclass for managing parameters used by Renderers.
Definition: renderparams.h:57
int insertSortedRenderer(RenderParams *p, Renderer *ren)
Definition: visualizer.h:172
Renderer * getRenderer(int i)
Definition: visualizer.h:152
A class for describing a 3D axis-aligned region in user space.
Definition: regionparams.h:53
static void setRegionShareFlag(bool regionIsShared)
Definition: visualizer.h:204
static void setActiveWinNum(int winnum)
Definition: visualizer.h:198
VizFeatureRenderer * getVizFeatureRenderer()
Definition: visualizer.h:165
A class for describing the viewpoint and lights in a 3D VAPOR scene.
bool(* renderCBFcn)(int winnum, bool newCoords)
Definition: visualizer.h:37
A class for performing OpenGL rendering in VAPOR GUI Window.
Definition: visualizer.h:61
VetsUtil base class.
Definition: MyBase.h:68
#define RENDER_API
Definition: DC.h:10
void setImageCaptureEnabled(bool onOff, string filename)
Definition: visualizer.h:220
static int getModeFromParams(string tag)
A class that specifies parameters used in animation.
void SetTrackballCoordsChanged(bool val)
Definition: visualizer.h:95
A class that performs rendering in a Visualizer.
Definition: renderer.h:95