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

Last change on this file since 1018 was 955, checked in by gah, 16 years ago

fix axis initialization flags

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