source: trunk/packages/vizservers/nanovis/Grid.cpp @ 1522

Last change on this file since 1522 was 1161, checked in by gah, 16 years ago

added stats counters

File size: 5.5 KB
Line 
1#include <GL/glew.h>
2#include <GL/gl.h>
3#include <stdlib.h>
4#include <stdio.h>
5#include "Grid.h"
6
7#define NUMDIGITS       6
8#define GRID_TICK       0.05
9
10Grid::Grid() :
11    _axisColor(1.0f, 1.0f, 1.0f, 1.0f),
12    _majorColor(1.0f, 1.0f, 1.0f, 1.0f),
13    _minorColor(0.5f, 0.5f, 0.5f, 1.0f),
14    _font(0),
15    _visible(false),
16    xAxis("X"),
17    yAxis("Y"),
18    zAxis("Z")
19{
20    /*empty*/
21}
22
23void Grid::render()
24{
25    glPushMatrix();
26    glEnable(GL_DEPTH_TEST);
27    glDisable(GL_TEXTURE_2D);
28    glEnable(GL_BLEND);
29
30#ifdef notdef
31    glEnable(GL_LINE_SMOOTH);
32#endif
33#ifdef notdef
34    glScalef(xAxis.scale(),
35             yAxis.range() / xAxis.range(),
36             zAxis.range() / xAxis.range());
37#endif
38    glScalef(1.0, 1.0, 1.0);
39
40    glTranslatef(-0.5f, -0.5f, -0.5f);
41    glLineWidth(2.0f);
42    glColor4f(_axisColor.red, _axisColor.green, _axisColor.blue,
43              _axisColor.alpha);
44
45    glBegin(GL_LINES);
46    {
47        glVertex3f(0.0f, 0.0f, 0.0f);
48        glVertex3f(1.0f + GRID_TICK, 0.0f, 0.0f);
49        glVertex3f(0.0f, 0.0f, 0.0f);
50        glVertex3f(0.0f, 1.0f + GRID_TICK, 0.0f);
51        glVertex3f(0.0f, 0.0f, 0.0f);
52        glVertex3f(0.0f, 0.0f, 1.0f + GRID_TICK);
53    }
54    glEnd();
55
56    glLineWidth(1.0f);
57    glColor4f(_majorColor.red, _majorColor.green, _majorColor.blue,
58              _majorColor.alpha);
59
60    glBegin(GL_LINES);
61    {
62        bool result;
63        TickIter iter;
64
65        for (result = xAxis.FirstMajor(iter); result; result = iter.Next()) {
66            float x;
67            x = xAxis.Map(iter.GetValue());
68            glVertex3f(x, 0.0f, 0.0f);
69            glVertex3f(x, 1.0f, 0.0f);
70            glVertex3f(x, 0.0f, 0.0f);
71            glVertex3f(x, 0.0f, 1.0f + GRID_TICK);
72        }
73        for (result = yAxis.FirstMajor(iter); result; result = iter.Next()) {
74            float y;
75            y = yAxis.Map(iter.GetValue());
76            glVertex3f(0.0f, y, 0.0f);
77            glVertex3f(1.0f + GRID_TICK, y, 0.0f);
78            glVertex3f(0.0f, y, 0.0f);
79            glVertex3f(0.0f, y, 1.0f);
80        }
81        for (result = zAxis.FirstMajor(iter); result; result = iter.Next()) {
82            float z;
83            z = zAxis.Map(iter.GetValue());
84            glVertex3f(0.0f, 0.0f, z);
85            glVertex3f(0.0f, 1.0f, z);
86            glVertex3f(0.0f, 0.0f, z);
87            glVertex3f(1.0f + GRID_TICK, 0.0f, z);
88        }
89    }
90    glEnd();
91
92    // Set minor line color
93    glColor4f(_minorColor.red, _minorColor.green, _minorColor.blue,
94              _minorColor.alpha);
95
96    glBegin(GL_LINES);
97    {
98        bool result;
99        TickIter iter;
100
101        for (result = xAxis.FirstMinor(iter); result; result = iter.Next()) {
102            float x;
103            x = xAxis.Map(iter.GetValue());
104            glVertex3f(x, 0.0f, 0.0f);
105            glVertex3f(x, 1.0f, 0.0f);
106            glVertex3f(x, 0.0f, 0.0f);
107            glVertex3f(x, 0.0f, 1.0f);
108        }
109        for (result = yAxis.FirstMinor(iter); result; result = iter.Next()) {
110            float y;
111            y = yAxis.Map(iter.GetValue());
112            glVertex3f(0.0f, y, 0.0f);
113            glVertex3f(1.0f, y, 0.0f);
114            glVertex3f(0.0f, y, 0.0f);
115            glVertex3f(0.0f, y, 1.0f);
116        }
117        for (result = zAxis.FirstMinor(iter); result; result = iter.Next()) {
118            float z;
119            z = zAxis.Map(iter.GetValue());
120            glVertex3f(0.0f, 0.0f, z);
121            glVertex3f(0.0f, 1.0f, z);
122            glVertex3f(0.0f, 0.0f, z);
123            glVertex3f(1.0f, 0.0f, z);
124        }
125    }
126    glEnd();
127
128    if (_font != NULL) {
129        double mv[16], prjm[16];
130        int viewport[4];
131        double wx, wy, wz;
132        bool result;
133        TickIter iter;
134
135        glGetDoublev(GL_MODELVIEW_MATRIX, mv);
136        glGetDoublev(GL_PROJECTION_MATRIX, prjm);
137        glGetIntegerv(GL_VIEWPORT, viewport);
138       
139        _font->begin();
140        if (gluProject(1.2, 0.0, 0.0, mv, prjm, viewport, &wx, &wy, &wz)) {
141            glLoadIdentity();
142            glTranslatef((int) wx, viewport[3] - (int) wy, 0);
143            const char *name = xAxis.name();
144            if (name == NULL) {
145                name = "???";
146            }
147            _font->draw(name);
148        }
149       
150        if (gluProject(0.0, 1.2, 0.0, mv, prjm, viewport, &wx, &wy, &wz)) {
151            glLoadIdentity();
152            glTranslatef((int) wx, viewport[3] - (int)wy, 0);
153            const char *name = yAxis.name();
154            if (name == NULL) {
155                name = "???";
156            }
157            _font->draw(name);
158        }
159       
160        if (gluProject(0.0, 0.0, 1.2, mv, prjm, viewport, &wx, &wy, &wz)) {
161            glLoadIdentity();
162            glTranslatef((int) wx, (int) viewport[3] - (int)wy, 0.0f);
163            const char *name = zAxis.name();
164            if (name == NULL) {
165                name = "???";
166            }
167            _font->draw(name);
168        }
169       
170        glColor4f(1.0f, 1.0f, 0.0f, 1.0f);
171
172        for (result = xAxis.FirstMajor(iter); result; result = iter.Next()) {
173            float x;
174            x = xAxis.Map(iter.GetValue());
175            if (gluProject(x, 0.0f, 1.06f, mv, prjm, viewport, &wx, &wy, &wz)) {
176                char buff[20];
177                glLoadIdentity();
178                glTranslatef((int) wx, (int) viewport[3] - (int)wy, 0.0f);
179                sprintf(buff, "%.*g", NUMDIGITS, iter.GetValue());
180                _font->draw(buff);
181            }
182        }
183        for (result = yAxis.FirstMajor(iter); result; result = iter.Next()) {
184            float y;
185            y = yAxis.Map(iter.GetValue());
186            if (gluProject(1.06f, y, 0.0f, mv, prjm, viewport, &wx, &wy, &wz)) {
187                char buff[20];
188                glLoadIdentity();
189                glTranslatef((int) wx, (int) viewport[3] - (int)wy, 0.0f);
190                sprintf(buff, "%.*g", NUMDIGITS, iter.GetValue());
191                _font->draw(buff);
192            }
193        }
194        for (result = zAxis.FirstMajor(iter); result; result = iter.Next()) {
195            float z;
196            z = zAxis.Map(iter.GetValue());
197            if (gluProject(1.06f, 0.0f, z, mv, prjm, viewport, &wx, &wy, &wz)) {
198                char buff[20];
199                glLoadIdentity();
200                glTranslatef((int) wx, (int) viewport[3] - (int)wy, 0.0f);
201                sprintf(buff, "%.*g", NUMDIGITS, iter.GetValue());
202                _font->draw(buff);
203            }
204        }
205        _font->end();
206    };
207    glPopMatrix();
208    glDisable(GL_DEPTH_TEST);
209    glDisable(GL_BLEND);
210#ifdef notdef
211    glDisable(GL_LINE_SMOOTH);
212#endif
213}
214 
215void Grid::setFont(R2Fonts* font)
216{
217//      if (font == _font) return;
218//      if (font) font->addRef();
219//      if (_font) _font->unrefDelete();
220       
221    _font = font;
222}
223
Note: See TracBrowser for help on using the repository browser.