nuclear@4: #include nuclear@4: #include "opengl.h" nuclear@4: #include "xfer_view.h" nuclear@4: #include "dicomview.h" nuclear@4: nuclear@6: static TransferFunc *xfer; nuclear@4: nuclear@4: static int act_color = 3; nuclear@4: nuclear@6: bool xfview_init(TransferFunc *xferarg) nuclear@4: { nuclear@6: xfer = xferarg; nuclear@4: return true; nuclear@4: } nuclear@4: nuclear@4: void xfview_destroy() nuclear@4: { nuclear@4: } nuclear@4: nuclear@4: void xfview_draw() nuclear@4: { nuclear@4: float line_color[][3] = { nuclear@4: { 1, 0, 0 }, { 0, 1, 0 }, { 0, 0, 1 }, { 1, 1, 1 } nuclear@4: }; nuclear@4: nuclear@4: glMatrixMode(GL_PROJECTION); nuclear@4: glLoadIdentity(); nuclear@4: glMatrixMode(GL_MODELVIEW); nuclear@4: glLoadIdentity(); nuclear@4: nuclear@4: int xsz, ysz; nuclear@4: get_window_size(&xsz, &ysz); nuclear@4: int nsamples = xsz / 4; nuclear@4: nuclear@4: // paint the background a faint version of the selected color nuclear@4: glBegin(GL_QUADS); nuclear@4: glColor3f(line_color[act_color][0] * 0.1, line_color[act_color][1] * 0.1, line_color[act_color][2] * 0.1); nuclear@4: glVertex2f(-1, -1); nuclear@4: glVertex2f(1, -1); nuclear@4: glVertex2f(1, 1); nuclear@4: glVertex2f(-1, 1); nuclear@4: glEnd(); nuclear@4: nuclear@4: glEnable(GL_LINE_SMOOTH); nuclear@4: nuclear@4: glEnable(GL_BLEND); nuclear@4: glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); nuclear@4: nuclear@6: // draw curve nuclear@4: glLineWidth(2.0); nuclear@4: nuclear@4: for(int i=0; i<3; i++) { nuclear@4: int idx; nuclear@4: if(act_color < 3) { nuclear@4: idx = (i + act_color + 1) % 3; nuclear@4: } else { nuclear@4: idx = i; nuclear@4: } nuclear@4: nuclear@4: glColor3fv(line_color[idx]); nuclear@4: nuclear@4: glBegin(GL_LINE_STRIP); nuclear@4: for(int j=0; jmap(t, vval); nuclear@4: nuclear@6: glVertex2f(t * 2.0 - 1.0, vval[i] * 2.0 - 1.0); nuclear@4: } nuclear@4: glEnd(); nuclear@4: } nuclear@4: nuclear@4: glDisable(GL_BLEND); nuclear@4: } nuclear@4: nuclear@4: void xfview_button(int bn, int press, int x, int y) nuclear@4: { nuclear@6: if(bn == 2 && press) { nuclear@4: act_color = (act_color + 1) % 4; nuclear@4: redisplay(); nuclear@4: return; nuclear@4: } nuclear@4: nuclear@5: if(bn == 1) { nuclear@5: if(press) { nuclear@5: } else { nuclear@5: } nuclear@4: } nuclear@4: } nuclear@4: nuclear@4: void xfview_motion(int x, int y) nuclear@4: { nuclear@4: }