static void difcolumns(Lextok *n, char *tr, int v, int j, Queue *q) { extern int pno; if (j == 0) { Buf[0] = '\0'; channm(n); strcat(Buf, (strncmp(tr, "Sen", 3))?"?":"!"); } else strcat(Buf, ","); if (tr[0] == '[') strcat(Buf, "["); sr_buf(v, q->fld_width[j] == MTYPE); if (j == q->nflds - 1) { int cnr; if (s_trail) cnr = pno; else cnr = X?X->pid - Have_claim:0; if (tr[0] == '[') strcat(Buf, "]"); pstext(cnr, Buf); } }
void displist() { int x, y; double z; double x_min, x_max, y_min, y_max, z_min, z_max; double a_in, a_out, a; int xa_win, ya_win; #define SCRDATA(a,x,y) a[(x)+(y)* xa_win] struct Shade c, cs, cs_in, cs_out, cs_o; double xv, yv, zv; xa_win = ya_win = act; std::unique_ptr<float[]> sr_buf(new float[xa_win * ya_win]); std::unique_ptr<float[]> sg_buf(new float[xa_win * ya_win]); std::unique_ptr<float[]> sb_buf(new float[xa_win * ya_win]); /* Note, once rotation is possible, the following code is no longer alpha simple loop */ InterDepth(&x_min, &x_max, &y_min, &y_max, &z_min, &z_max); #if 0 glNewList(VOL_DATA,GL_COMPILE); { glBegin(GL_LINE_LOOP); { glColor3f(1.0,1.0,1.0); glVertex2d(x_min,y_min); glVertex2d(x_min,y_max); glVertex2d(x_max,y_max); glVertex2d(x_max,y_min); } glEnd(); } glEndList(); return; #endif x_min += xa; x_max += xa; y_min += ya; y_max += ya; if (x_min < 0 || x_max > xa_win || y_min < 0 || y_max > ya_win) { printf("ERROR!\n"); printf("x:%f,%f\n", x_min, x_max); printf("y:%f,%f\n", y_min, y_max); exit(-10); } for (y = y_min; y < y_max; y++) { for (x = x_min; x < x_max; x++) { cs_in.red = 0; cs_in.green = 0; cs_in.blue = 0; cs_in.alpha = 0; a_in = 0; #if 0 printf("(%f,%f)(%d,%d)\n",(double)(x-xa) * x_size/xa_win, (double)(y-ya) * vol_data.size_y()/ya_win,x,y); #endif for (z = z_min; z < z_max; z++) { xv = (double) (x - xa) * (vol_data.size_x() - 1) / x_win; yv = (double) (y - ya) * (vol_data.size_y() - 1) / y_win; zv = (double) (z) * (vol_data.size_z() - 1) / z_win; c = GetCR(xv, yv, zv); /* if (c.alpha > 0) { printf("(%d,%d,%d):(%1.1f,%1.1f,%1.1f,%1.1f)\n", x,y,z,c.red,c.green,c.blue,c.alpha); }*/ cs.red = c.red * c.alpha; cs.green = c.green * c.alpha; cs.blue = c.blue * c.alpha; a = c.alpha; cs_o.red = cs.red * (1 - a_in); cs_o.green = cs.green * (1 - a_in); cs_o.blue = cs.blue * (1 - a_in); cs_out = AddSh(cs_in, cs_o); a_out = a_in + a * (1 - a_in); a_in = a_out; cs_in = cs_out; if (a_out == 1) { break; } } cs.red = 0; cs.green = 0; cs.blue = 0; a = 1; cs_o.red = cs.red * (1 - a_in); cs_o.green = cs.green * (1 - a_in); cs_o.blue = cs.blue * (1 - a_in); cs_out = AddSh(cs_in, cs_o); a_out = a_in + a * (1 - a_in); if (a_out > 0) { c.red = cs_out.red / a_out; c.green = cs_out.green / a_out; c.blue = cs_out.blue / a_out; } else { c.red = 0; c.green = 0; c.blue = 0; } /* printf("(%d,%d):(%1.1f,%1.1f,%1.1f)\n",x,y,c.red,c.green,c.blue);*/ SCRDATA(sr_buf,x,y)=c.red; SCRDATA(sg_buf,x,y)=c.green; SCRDATA(sb_buf,x,y)=c.blue; } } printf("Data complete \n"); glNewList(VOL_DATA, GL_COMPILE); { int xx, yy; for (y = ((int) y_min) + 1; y < y_max; y++) { yy = y - ya; glBegin(GL_QUAD_STRIP); { for (x = x_min; x < x_max; x++) { xx = x - xa; glColor3f(SCRDATA(sr_buf,x,y-1), SCRDATA(sg_buf,x,y-1), SCRDATA(sb_buf,x,y-1)); glVertex2d(xx, yy - 1); #if 0 printf("(%d,%d)(%d,%d)\n",xx,yy-1,x,y-1); #endif glColor3f(SCRDATA(sr_buf,x,y), SCRDATA(sg_buf,x,y), SCRDATA(sb_buf,x,y)); glVertex2d(xx, yy); } } glEnd(); } } glEndList(); }
void sr_mesg(FILE *fd, int v, int j) { Buf[0] ='\0'; sr_buf(v, j); fprintf(fd, Buf); }