source: trunk/vizservers/nanovis/nanovis.h @ 973

Last change on this file since 973 was 973, checked in by gah, 13 years ago
File size: 4.8 KB
Line 
1/*
2 * ----------------------------------------------------------------------
3 *  nanovis.h: package header
4 *
5 * ======================================================================
6 *  AUTHOR:  Wei Qiao <qiaow@purdue.edu>
7 *           Purdue Rendering and Perceptualization Lab (PURPL)
8 *
9 *  Copyright (c) 2004-2006  Purdue Research Foundation
10 *
11 *  See the file "license.terms" for information on usage and
12 *  redistribution of this file, and for a DISCLAIMER OF ALL WARRANTIES.
13 * ======================================================================
14 */
15#ifndef __NANOVIS_H__
16#define __NANOVIS_H__
17
18#include <tcl.h>
19
20#include <GL/glew.h>
21#include <GL/glut.h>
22#include <Cg/cgGL.h>
23#include <stdlib.h>
24#include <math.h>
25#include <time.h>
26#include <iostream>
27#include <stdio.h>
28#include <assert.h>
29#include <float.h>
30#include <getopt.h>
31#include <stdio.h>
32#include <math.h>
33#include <fstream>
34#include <sstream>
35#include <string>
36#include <sys/time.h>
37#include <sys/types.h>
38#include <unistd.h>
39#include <fcntl.h>
40#include <signal.h>
41
42#include "define.h"
43#include "global.h"
44#include "socket/Socket.h"
45#include "NvCamera.h"
46#include "ConvexPolygon.h"
47#include "Texture3D.h"
48#include "Texture2D.h"
49#include "Texture1D.h"
50#include "TransferFunction.h"
51#include "Mat4x4.h"
52#include "Volume.h"
53#include "NvParticleRenderer.h"
54#include "PerfQuery.h"
55#include "Event.h"
56#include "VolumeRenderer.h"
57#include "PlaneRenderer.h"
58#include "NvColorTableRenderer.h"
59#include "PointSetRenderer.h"
60#include "PointSet.h"
61#include "HeightMap.h"
62#include "Grid.h"
63
64#include "config.h"
65
66
67//defines for the image based flow visualization
68#define NPN 256         //resolution of background pattern
69#define NMESH 256       //resolution of flow mesh
70#define DM  ((float) (1.0/(NMESH-1.0))) //distance in world coords between mesh lines
71#define NPIX  512       //display size
72#define SCALE 3.0       //scale for background pattern. small value -> fine texture
73
74typedef struct Vector2 {
75    float x, y;
76    float mag(void) {
77        return sqrt(x*x+y*y);
78    }
79};
80
81typedef struct RegGrid2{
82    int width, height;
83    Vector2* field;
84   
85    RegGrid2(int w, int h){
86        width = w;
87        height = h;
88        field = new Vector2[w*h];
89    }
90
91    void put(Vector2& v, int x ,int y) {
92        field[x+y*width] = v;
93    }
94   
95    Vector2& get(int x, int y) {
96        return field[x+y*width];
97    }
98};
99
100class NvLIC;
101
102class NanoVis {
103public:
104    static VolumeRenderer* vol_renderer;
105    static PointSetRenderer* pointset_renderer;
106    static NvParticleRenderer* particleRenderer;
107    static NvLIC* licRenderer;
108    static vector<PointSet*> pointSet;
109    static PlaneRenderer* plane_render;
110
111    /**
112     *  pointers to 2D planes, currently handle up 10
113     */
114    static Texture2D* plane[10];
115    static NvColorTableRenderer* color_table_renderer;
116    static graphics::RenderContext* renderContext;
117    static vector<HeightMap*> heightMap;
118    static unsigned char* screen_buffer;
119    static vector<Volume*> volume;
120    static Grid* grid;
121    static R2Fonts* fonts;
122    static int n_volumes;
123    static int updir;
124    static NvCamera *cam;
125
126    static float lic_slice_x;
127    static float lic_slice_y;
128    static float lic_slice_z;
129    static int lic_axis;        /* 0:x, 1:y, 2:z */
130
131    static bool axis_on;
132    static bool config_pending; // Indicates if the limits need to be recomputed.
133    static int win_width;       //size of the render window
134    static int win_height;      //size of the render window
135 
136
137    static bool lic_on;
138    static bool particle_on;
139    static bool vector_on;
140
141    static TransferFunction* get_transfunc(const char *name);
142    static TransferFunction* DefineTransferFunction(const char *name,
143        size_t n, float *data);
144    static void SetVolumeRanges(void);
145    static void SetHeightmapRanges(void);
146    static void init(const char* path);
147    static void initGL(void);
148    static void init_lic(void);
149    static void init_offscreen_buffer(void);
150    static void initParticle();
151    static void resize_offscreen_buffer(int w, int h);
152    static void offscreen_buffer_capture(void);
153    static void bmp_write(const char* cmd);
154    static void bmp_write_to_file(int frame_number, char* directory_name);
155    static void display(void);
156    static void update(void);
157    static void display_offscreen_buffer();
158    static void read_screen();
159    static void zoom(double zoom);
160    static int render_legend(TransferFunction *tf, double min, double max,
161        int width, int height, const char* volArg);
162    static Volume *load_volume(int index, int width, int height, int depth,
163        int n, float* data, double vmin, double vmax, double nzero_min);
164#ifndef XINETD
165    static void keyboard(unsigned char key, int x, int y);
166    static void mouse(int button, int state, int x, int y);
167    static void motion(int x, int y);
168    static void update_rot(int delta_x, int delta_y);
169    static void update_trans(int delta_x, int delta_y, int delta_z);
170#endif
171};
172
173#endif  /* __NANOVIS_H__ */
Note: See TracBrowser for help on using the repository browser.