source: trunk/vizservers/nanovis/Grid.cpp @ 862

Last change on this file since 862 was 862, checked in by gah, 16 years ago
File size: 4.4 KB
Line 
1#include <GL/glew.h>
2#include <GL/gl.h>
3#include "Grid.h"
4
5Grid::Grid()
6: _axisColor(1.0f, 1.0f, 1.0f, 1.0f), _font(0), _axisGridLineCount(5.0f, 5.0f, 5.0f),
7_axisMin(0.0f, 0.0f, 0.0f), _axisMax(1.0f, 1.0f, 1.0f), _gridLineColor(1.0f, 1.0f, 1.0f, 1.0f), _visible(false)
8{
9    __axisScale = _axisMax - _axisMin;
10    _axisName[0] = "X";
11    _axisName[1] = "Y";
12    _axisName[2] = "Z";
13}
14
15void Grid::render()
16{
17    glPushMatrix();
18    glEnable(GL_DEPTH_TEST);
19
20    glScalef(1.0 / __axisScale.x, __axisScale.y / __axisScale.x, __axisScale.z / __axisScale.x);
21
22    glTranslatef(-0.5f, -0.5f, -0.5f);
23    glLineWidth(2.0f);
24    glColor3f(_axisColor.x, _axisColor.y, _axisColor.z);
25
26    glBegin(GL_LINES);
27    {
28        glVertex3f(0.0f,0.0f,0.0f);
29        glVertex3f(1.2f,0.0f,0.0f);
30        glVertex3f(0.0f,0.0f,0.0f);
31        glVertex3f(0.0f,1.2f,0.0f);
32        glVertex3f(0.0f, 0.0f, 0.0f);
33        glVertex3f(0.0f, 0.0f, 1.2f);
34    }
35    glEnd();
36
37    glDisable(GL_TEXTURE_2D);
38    glLineWidth(1.0f);
39    glEnable(GL_BLEND);
40    glColor3f(_gridLineColor.x, _gridLineColor.y, _gridLineColor.z);
41    glBegin(GL_LINES);
42
43    float linecount = 2.0f;
44    float linecountY = 4.0f;
45    // +y
46    for (int i = 1; i <= (int) _axisGridLineCount.y; ++i) {
47        glVertex3f(0.0f, i / _axisGridLineCount.y, 0.0f);
48        glVertex3f(1.1f, i / _axisGridLineCount.y, 0.0f);
49    }
50   
51    for (int i = 1; i <= (int) _axisGridLineCount.x; ++i) {
52        glVertex3f(i / _axisGridLineCount.x, 0.0f, 0.0f);
53        glVertex3f(i / _axisGridLineCount.x, 1.0f, 0.0f);
54    }
55   
56    for (int i = 1; i <= (int) _axisGridLineCount.z; ++i) {
57        glVertex3f(0.0f, 0.0f, i / _axisGridLineCount.z);
58        glVertex3f(0.0f, 1.0f, i / _axisGridLineCount.z);
59    }
60   
61    for (int i = 1; i <= (int) _axisGridLineCount.y; ++i) {
62        glVertex3f(0.0f, i / _axisGridLineCount.y, 0.0f);
63        glVertex3f(0.0f, i / _axisGridLineCount.y, 1.0f);
64    }
65   
66    for (int i = 1; i <= (int) _axisGridLineCount.x; ++i) {
67        glVertex3f(i / _axisGridLineCount.x,0.0f, 0.0f);
68        glVertex3f(i / _axisGridLineCount.x,0.0f, 1.1f);
69    }
70   
71    for (int i = 1; i <= (int) _axisGridLineCount.z; ++i) {
72        glVertex3f(0.0f, 0.0f, i / _axisGridLineCount.z);
73        glVertex3f(1.1f, 0.0f, i / _axisGridLineCount.z);
74    }
75    glEnd();
76
77    if (_font) {
78        double x = 1.0f, y = 0.0f, z = 0.0f;
79        double mv[16], prjm[16];
80        int viewport[4];
81        double winx, winy, winz;
82        glGetDoublev(GL_MODELVIEW_MATRIX, mv);
83        glGetDoublev(GL_PROJECTION_MATRIX, prjm);
84        glGetIntegerv(GL_VIEWPORT, viewport);
85       
86       
87        _font->begin();
88        if (gluProject(1.2, 0.0, 0.0, mv, prjm, viewport, &winx, &winy,
89                       &winz)) {
90            glLoadIdentity();
91            glTranslatef((int) winx, viewport[3] - (int) winy, 0);
92            _font->draw((const char*) _axisName[0]);
93        }
94       
95        if (gluProject(0.0, 1.2, 0.0, mv, prjm, viewport, &winx, &winy,
96                       &winz)) {
97            glLoadIdentity();
98            glTranslatef((int) winx, viewport[3] - (int)winy, 0);
99            _font->draw((const char*) _axisName[1]);
100        }
101       
102        if (gluProject(0.0, 0.0, 1.2, mv, prjm, viewport, &winx, &winy,
103                       &winz)) {
104            glLoadIdentity();
105            glTranslatef((int) winx, (int) viewport[3] - (int)winy, 0.0f);
106            _font->draw((const char*) _axisName[2]);
107        }
108       
109        glColor4f(1.0f, 1.0f, 0.0f, 0.5f);
110        char buff[20];
111        // Y
112        for (int i = 1; i <= (int) _axisGridLineCount.y; ++i) {
113            if (gluProject(1.2, i / _axisGridLineCount.y, 0.0f, mv, prjm, viewport, &winx, &winy, &winz)) {
114                glLoadIdentity();
115                glTranslatef((int) winx, (int) viewport[3] - (int)winy, 0.0f);
116                sprintf(buff, "%0.2f", __axisScale.y / _axisGridLineCount.y * i + _axisMin.y);
117                _font->draw(buff);
118            }
119        }
120       
121        for (int i = 1; i <= (int) _axisGridLineCount.z; ++i) {
122            if (gluProject(1.2, 0.0, i / _axisGridLineCount.z , mv, prjm, viewport, &winx, &winy, &winz)) {
123                glLoadIdentity();
124                glTranslatef((int) winx, (int) viewport[3] - (int)winy, 0.0f);
125                sprintf(buff, "%0.2f", __axisScale.z / _axisGridLineCount.z * i + _axisMin.z);
126                _font->draw(buff);
127            }
128        }
129       
130        for (int i = 1; i <= (int) _axisGridLineCount.x; ++i) {
131            if (gluProject( i / _axisGridLineCount.x, 0.0f, 1.2, mv, prjm, viewport, &winx, &winy, &winz)) {
132                glLoadIdentity();
133                glTranslatef((int) winx, (int) viewport[3] - (int)winy, 0.0f);
134                sprintf(buff, "%0.2f", __axisScale.x / _axisGridLineCount.x * i + _axisMin.x);
135                _font->draw(buff);
136            }
137        }
138       
139        _font->end();
140    };
141   
142    glPopMatrix();
143    glDisable(GL_DEPTH_TEST);
144    glDisable(GL_BLEND);
145}
146 
147void Grid::setFont(R2Fonts* font)
148{
149//      if (font == _font) return;
150//      if (font) font->addRef();
151//      if (_font) _font->unrefDelete();
152       
153    _font = font;
154}
Note: See TracBrowser for help on using the repository browser.