glviewvol

annotate src/xfer_view.cc @ 6:f22be47a3572

moved to TransferFuncs completely
author John Tsiombikas <nuclear@member.fsf.org>
date Tue, 30 Dec 2014 06:22:54 +0200
parents 5417c25cb238
children 71b479ffb9f7
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 }