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

Last change on this file since 2798 was 2798, checked in by ldelgass, 13 years ago

Add emacs mode magic line in preparation for indentation cleanup

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