rev |
line source |
nuclear@4
|
1 #include <stdio.h>
|
nuclear@4
|
2 #include "opengl.h"
|
nuclear@4
|
3 #include "xfer_view.h"
|
nuclear@4
|
4 #include "dicomview.h"
|
nuclear@4
|
5
|
nuclear@6
|
6 static TransferFunc *xfer;
|
nuclear@4
|
7
|
nuclear@4
|
8 static int act_color = 3;
|
nuclear@4
|
9
|
nuclear@6
|
10 bool xfview_init(TransferFunc *xferarg)
|
nuclear@4
|
11 {
|
nuclear@6
|
12 xfer = xferarg;
|
nuclear@4
|
13 return true;
|
nuclear@4
|
14 }
|
nuclear@4
|
15
|
nuclear@4
|
16 void xfview_destroy()
|
nuclear@4
|
17 {
|
nuclear@4
|
18 }
|
nuclear@4
|
19
|
nuclear@4
|
20 void xfview_draw()
|
nuclear@4
|
21 {
|
nuclear@4
|
22 float line_color[][3] = {
|
nuclear@4
|
23 { 1, 0, 0 }, { 0, 1, 0 }, { 0, 0, 1 }, { 1, 1, 1 }
|
nuclear@4
|
24 };
|
nuclear@4
|
25
|
nuclear@4
|
26 glMatrixMode(GL_PROJECTION);
|
nuclear@4
|
27 glLoadIdentity();
|
nuclear@4
|
28 glMatrixMode(GL_MODELVIEW);
|
nuclear@4
|
29 glLoadIdentity();
|
nuclear@4
|
30
|
nuclear@4
|
31 int xsz, ysz;
|
nuclear@4
|
32 get_window_size(&xsz, &ysz);
|
nuclear@4
|
33 int nsamples = xsz / 4;
|
nuclear@4
|
34
|
nuclear@4
|
35 // paint the background a faint version of the selected color
|
nuclear@4
|
36 glBegin(GL_QUADS);
|
nuclear@4
|
37 glColor3f(line_color[act_color][0] * 0.1, line_color[act_color][1] * 0.1, line_color[act_color][2] * 0.1);
|
nuclear@4
|
38 glVertex2f(-1, -1);
|
nuclear@4
|
39 glVertex2f(1, -1);
|
nuclear@4
|
40 glVertex2f(1, 1);
|
nuclear@4
|
41 glVertex2f(-1, 1);
|
nuclear@4
|
42 glEnd();
|
nuclear@4
|
43
|
nuclear@4
|
44 glEnable(GL_LINE_SMOOTH);
|
nuclear@4
|
45
|
nuclear@4
|
46 glEnable(GL_BLEND);
|
nuclear@4
|
47 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
nuclear@4
|
48
|
nuclear@6
|
49 // draw curve
|
nuclear@4
|
50 glLineWidth(2.0);
|
nuclear@4
|
51
|
nuclear@4
|
52 for(int i=0; i<3; i++) {
|
nuclear@4
|
53 int idx;
|
nuclear@4
|
54 if(act_color < 3) {
|
nuclear@4
|
55 idx = (i + act_color + 1) % 3;
|
nuclear@4
|
56 } else {
|
nuclear@4
|
57 idx = i;
|
nuclear@4
|
58 }
|
nuclear@4
|
59
|
nuclear@4
|
60 glColor3fv(line_color[idx]);
|
nuclear@4
|
61
|
nuclear@4
|
62 glBegin(GL_LINE_STRIP);
|
nuclear@4
|
63 for(int j=0; j<nsamples; j++) {
|
nuclear@4
|
64 float t = (float)j / (float)(nsamples - 1);
|
nuclear@6
|
65 float vval[4];
|
nuclear@6
|
66 xfer->map(t, vval);
|
nuclear@4
|
67
|
nuclear@6
|
68 glVertex2f(t * 2.0 - 1.0, vval[i] * 2.0 - 1.0);
|
nuclear@4
|
69 }
|
nuclear@4
|
70 glEnd();
|
nuclear@4
|
71 }
|
nuclear@4
|
72
|
nuclear@4
|
73 glDisable(GL_BLEND);
|
nuclear@4
|
74 }
|
nuclear@4
|
75
|
nuclear@4
|
76 void xfview_button(int bn, int press, int x, int y)
|
nuclear@4
|
77 {
|
nuclear@6
|
78 if(bn == 2 && press) {
|
nuclear@4
|
79 act_color = (act_color + 1) % 4;
|
nuclear@4
|
80 redisplay();
|
nuclear@4
|
81 return;
|
nuclear@4
|
82 }
|
nuclear@4
|
83
|
nuclear@5
|
84 if(bn == 1) {
|
nuclear@5
|
85 if(press) {
|
nuclear@5
|
86 } else {
|
nuclear@5
|
87 }
|
nuclear@4
|
88 }
|
nuclear@4
|
89 }
|
nuclear@4
|
90
|
nuclear@4
|
91 void xfview_motion(int x, int y)
|
nuclear@4
|
92 {
|
nuclear@4
|
93 }
|