1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
|
#include "qbitmap.h"
#include "qwt3d_color.h"
#include "qwt3d_plot.h"
#include "enrichments.h"
using namespace Qwt3D;
/////////////////////////////////////////////////////////////////
//
// Bar
//
/////////////////////////////////////////////////////////////////
Bar::Bar()
{
configure(0, 1);
}
Bar::Bar(double rad, double level)
{
configure(rad, level);
}
void Bar::configure(double rad, double level)
{
plot = 0;
radius_ = rad;
level_ = level;
}
void Bar::drawBegin()
{
diag_ = (plot->hull().maxVertex-plot->hull().minVertex).length() * radius_;
glLineWidth( 0 );
glEnable(GL_POLYGON_OFFSET_FILL);
glPolygonOffset(1,1);
}
void Bar::drawEnd()
{
}
void Bar::draw(Qwt3D::Triple const& pos)
{
// GLStateBewarer sb(GL_LINE_SMOOTH, true);
// sb.turnOn();
double interval = plot->hull().maxVertex.z-plot->hull().minVertex.z;
double numlevel = plot->hull().minVertex.z + level_ * interval;
interval /=100;
if (pos.z > numlevel - interval && pos.z < numlevel + interval )
{
Label3D lb;
lb.draw(pos, diag_, diag_ * 2);
}
GLdouble minz = plot->hull().minVertex.z;
RGBA rgbat = (*plot->dataColor())(pos);
RGBA rgbab = (*plot->dataColor())(pos.x, pos.y, minz);
glBegin(GL_QUADS);
glColor4d(rgbab.r,rgbab.g,rgbab.b,rgbab.a);
glVertex3d(pos.x-diag_,pos.y-diag_,minz);
glVertex3d(pos.x+diag_,pos.y-diag_,minz);
glVertex3d(pos.x+diag_,pos.y+diag_,minz);
glVertex3d(pos.x-diag_,pos.y+diag_,minz);
if (pos.z > numlevel - interval && pos.z < numlevel + interval )
glColor3d(0.7,0,0);
else
glColor4d(rgbat.r,rgbat.g,rgbat.b,rgbat.a);
glVertex3d(pos.x-diag_,pos.y-diag_,pos.z);
glVertex3d(pos.x+diag_,pos.y-diag_,pos.z);
glVertex3d(pos.x+diag_,pos.y+diag_,pos.z);
glVertex3d(pos.x-diag_,pos.y+diag_,pos.z);
glColor4d(rgbab.r,rgbab.g,rgbat.b,rgbab.a);
glVertex3d(pos.x-diag_,pos.y-diag_,minz);
glVertex3d(pos.x+diag_,pos.y-diag_,minz);
glColor4d(rgbat.r,rgbat.g,rgbat.b,rgbat.a);
glVertex3d(pos.x+diag_,pos.y-diag_,pos.z);
glVertex3d(pos.x-diag_,pos.y-diag_,pos.z);
glColor4d(rgbab.r,rgbab.g,rgbat.b,rgbab.a);
glVertex3d(pos.x-diag_,pos.y+diag_,minz);
glVertex3d(pos.x+diag_,pos.y+diag_,minz);
glColor4d(rgbat.r,rgbat.g,rgbat.b,rgbat.a);
glVertex3d(pos.x+diag_,pos.y+diag_,pos.z);
glVertex3d(pos.x-diag_,pos.y+diag_,pos.z);
glColor4d(rgbab.r,rgbab.g,rgbat.b,rgbab.a);
glVertex3d(pos.x-diag_,pos.y-diag_,minz);
glVertex3d(pos.x-diag_,pos.y+diag_,minz);
glColor4d(rgbat.r,rgbat.g,rgbat.b,rgbat.a);
glVertex3d(pos.x-diag_,pos.y+diag_,pos.z);
glVertex3d(pos.x-diag_,pos.y-diag_,pos.z);
glColor4d(rgbab.r,rgbab.g,rgbat.b,rgbab.a);
glVertex3d(pos.x+diag_,pos.y-diag_,minz);
glVertex3d(pos.x+diag_,pos.y+diag_,minz);
glColor4d(rgbat.r,rgbat.g,rgbat.b,rgbat.a);
glVertex3d(pos.x+diag_,pos.y+diag_,pos.z);
glVertex3d(pos.x+diag_,pos.y-diag_,pos.z);
glEnd();
glColor3d(0,0,0);
glBegin(GL_LINES);
glVertex3d(pos.x-diag_,pos.y-diag_,minz); glVertex3d(pos.x+diag_,pos.y-diag_,minz);
glVertex3d(pos.x-diag_,pos.y-diag_,pos.z); glVertex3d(pos.x+diag_,pos.y-diag_,pos.z);
glVertex3d(pos.x-diag_,pos.y+diag_,pos.z); glVertex3d(pos.x+diag_,pos.y+diag_,pos.z);
glVertex3d(pos.x-diag_,pos.y+diag_,minz); glVertex3d(pos.x+diag_,pos.y+diag_,minz);
glVertex3d(pos.x-diag_,pos.y-diag_,minz); glVertex3d(pos.x-diag_,pos.y+diag_,minz);
glVertex3d(pos.x+diag_,pos.y-diag_,minz); glVertex3d(pos.x+diag_,pos.y+diag_,minz);
glVertex3d(pos.x+diag_,pos.y-diag_,pos.z); glVertex3d(pos.x+diag_,pos.y+diag_,pos.z);
glVertex3d(pos.x-diag_,pos.y-diag_,pos.z); glVertex3d(pos.x-diag_,pos.y+diag_,pos.z);
glVertex3d(pos.x-diag_,pos.y-diag_,minz); glVertex3d(pos.x-diag_,pos.y-diag_,pos.z);
glVertex3d(pos.x+diag_,pos.y-diag_,minz); glVertex3d(pos.x+diag_,pos.y-diag_,pos.z);
glVertex3d(pos.x+diag_,pos.y+diag_,minz); glVertex3d(pos.x+diag_,pos.y+diag_,pos.z);
glVertex3d(pos.x-diag_,pos.y+diag_,minz); glVertex3d(pos.x-diag_,pos.y+diag_,pos.z);
glEnd();
}
void Label3D::draw(Qwt3D::Triple const& pos, double w, double h)
{
double gap = 0.3;
glColor3d(1,1,1);
glBegin(GL_QUADS);
glVertex3d(pos.x-w,pos.y,pos.z + gap);
glVertex3d(pos.x+w,pos.y,pos.z + gap);
glVertex3d(pos.x+w,pos.y,pos.z + gap + h);
glVertex3d(pos.x-w,pos.y,pos.z + gap + h);
glEnd();
glColor3d(0.4,0,0);
glBegin(GL_LINE_LOOP);
glVertex3d(pos.x-w,pos.y,pos.z + gap);
glVertex3d(pos.x+w,pos.y,pos.z + gap);
glVertex3d(pos.x+w,pos.y,pos.z + gap + h);
glVertex3d(pos.x-w,pos.y,pos.z + gap + h);
glEnd();
glBegin(GL_LINES);
glVertex3d(pos.x,pos.y,pos.z);
glVertex3d(pos.x,pos.y,pos.z + gap);
glEnd();
}
|