static void draw_isolines_4_psf(int ist, int ied, struct psf_data *psf_s, struct psf_menu_val *psf_m, struct buffer_for_gl *gl_buf){ int inum = 0; int j, nd; double v_line; double f_color[4]; if (psf_m->isoline_color == BLACK_LINE){ for(nd=0;nd<4;nd++) {f_color[nd] = black[nd];} } else if(psf_m->isoline_color == WHITE_LINE){ for(nd=0;nd<4;nd++) {f_color[nd] = white[nd];} }; for (j = (ist-1); j < ied; j++){ v_line = cal_isoline_value(j, psf_m); if (psf_m->isoline_color == RAINBOW_LINE){ set_rainbow_color_code(psf_m->cmap_psf, v_line, f_color); }; inum = draw_isoline_on_triangle(inum, v_line, psf_m->icomp_draw_psf, f_color, psf_s, gl_buf); }; if(inum > 0) glDrawArrays(GL_LINES, IZERO, (ITWO*inum)); return; }
static void set_color_code_for_psf(struct psf_data *psf_s, struct psf_menu_val *psf_m){ int inod, nd; double d_patch; if ( psf_m->psf_patch_color == WHITE_SURFACE) { for (inod=0; inod< psf_s->nnod_viz; inod++){ for(nd=0;nd<3;nd++){psf_s->color_nod[inod][nd] = white[nd];}; set_opacity_from_value_s(psf_m->cmap_psf, d_patch, &psf_s->color_nod[inod][3]); }; } if (psf_m->psf_patch_color == TEXTURED_SURFACE) { for (inod=0; inod< psf_s->nnod_viz; inod++){ for(nd=0;nd<3;nd++){psf_s->color_nod[inod][nd] = gray[nd];}; set_opacity_from_value_s(psf_m->cmap_psf, d_patch, &psf_s->color_nod[inod][3]); }; } if ( psf_m->psf_patch_color == SINGLE_COLOR) { for (inod=0; inod< psf_s->nnod_viz; inod++){ for(nd=0;nd<3;nd++){psf_s->color_nod[inod][nd] = psf_m->cmap_psf->single_color[nd];}; set_opacity_from_value_s(psf_m->cmap_psf, d_patch, &psf_s->color_nod[inod][3]); }; } /* else if (psf_m->psf_patch_color == BLACK_LINE) { for (inod=0; inod< psf_s->nnod_viz; inod++){ for(nd=0;nd<4;nd++){psf_s->color_nod[inod][nd] = black[nd];}; }; } */ else if (psf_m->psf_patch_color == RAINBOW_SURFACE) { for (inod=0; inod< psf_s->nnod_viz; inod++){ d_patch = psf_s->d_nod[inod][psf_m->icomp_draw_psf]; set_rainbow_color_code(psf_m->cmap_psf, d_patch, &psf_s->color_nod[inod][0]); }; }; /* else if (psf_m->psf_patch_color == TWO_COLOR_LINE) { for (inod=0; inod< psf_s->nnod_viz; inod++){ d_patch = psf_s->d_nod[inod][psf_m->icomp_draw_fline]; set_two_color_scale_c(d_patch, psf_s->color_nod[inod]); set_opacity_from_value_s(psf_m->cmap_psf, d_patch, &psf_s->color_nod[inod][3]); }; } else if (psf_m->psf_patch_color == TWO_GRAY_LINE) { for (inod=0; inod< psf_s->nnod_viz; inod++){ d_patch = psf_s->d_nod[inod][psf_m->icomp_draw_fline]; set_two_color_scale_g(d_patch, psf_s->color_nod[inod]); set_opacity_from_value_s(psf_m->cmap_psf, d_patch, &psf_s->color_nod[inod][3]); }; }; */ return; }
void set_color_code_for_fieldlines(struct psf_data *fline_s, struct fline_menu_val *fline_m){ int inod, nd; double d_edge; if (fline_m->fieldline_color == WHITE_LINE) { for (inod=0; inod< fline_s->nnod_viz; inod++){ for(nd=0;nd<4;nd++){fline_s->color_nod[inod][nd] = white[nd];}; }; } else if (fline_m->fieldline_color == BLACK_LINE) { for (inod=0; inod< fline_s->nnod_viz; inod++){ for(nd=0;nd<4;nd++){fline_s->color_nod[inod][nd] = black[nd];}; }; } else if (fline_m->fieldline_color == RAINBOW_LINE) { for (inod=0; inod< fline_s->nnod_viz; inod++){ d_edge = fline_s->d_nod[inod][fline_m->icomp_draw_fline]; set_rainbow_color_code(fline_m->cmap_fline, d_edge, &fline_s->color_nod[inod][0]); }; } else if (fline_m->fieldline_color == TWO_COLOR_LINE) { for (inod=0; inod< fline_s->nnod_viz; inod++){ d_edge = fline_s->d_nod[inod][fline_m->icomp_draw_fline]; set_two_color_scale_c(d_edge, fline_s->color_nod[inod]); set_opacity_from_value_s(fline_m->cmap_fline, d_edge, &fline_s->color_nod[inod][3]); }; } else if (fline_m->fieldline_color == TWO_GRAY_LINE) { for (inod=0; inod< fline_s->nnod_viz; inod++){ d_edge = fline_s->d_nod[inod][fline_m->icomp_draw_fline]; set_two_color_scale_g(d_edge, fline_s->color_nod[inod]); set_opacity_from_value_s(fline_m->cmap_fline, d_edge, &fline_s->color_nod[inod][3]); }; }; return; }
void draw_colorbar_gl(int iflag_retina, GLint nx_win, GLint ny_win, GLfloat text_color[4], GLfloat bg_color[4], struct colormap_params *cmap_s){ int i, inum, nd; GLfloat xwin, ywin; GLfloat xbar_min, xbar_max, xbar_mid; GLfloat ybar_min, ybar_max, ydelta, y1, yline_zero; GLfloat xy_buf[384][2]; GLfloat rgba_buf[384][4]; int iflag_zero; double psf_min, psf_max; double psf_value, f_color[4], l_color[4]; char minlabel[20], maxlabel[20], zerolabel[20]; xwin = (GLfloat)nx_win; ywin = (GLfloat)ny_win; if( xwin >= 640*(iflag_retina+1) ){ xbar_max = xwin * 0.875; } else { xbar_max = xwin - (iflag_retina+1) * 80; } xbar_min = xbar_max - 0.025 * xwin; xbar_mid = (xbar_min + xbar_max) * 0.5; ybar_min = 0.05 * ywin; ybar_max = 0.25 * ywin; ydelta = (ybar_max - ybar_min) / ((GLfloat)64); iflag_zero = 0; psf_min = cmap_s->range_min->r_data; psf_max = cmap_s->range_max->r_data; if( (psf_min*psf_max) < ZERO ) iflag_zero = 1; yline_zero = ybar_min + (ybar_max-ybar_min) * (-psf_min) / (psf_max-psf_min); sprintf(minlabel, "% 3.2E",psf_min); sprintf(maxlabel, "% 3.2E",psf_max); sprintf(zerolabel,"% 3.2E",ZERO); sprintf(colorbar_text, "% 3.2E% 3.2E% 3.2E",psf_min, psf_max, ZERO); glMatrixMode(GL_PROJECTION); glPushMatrix(); glLoadIdentity(); gluOrtho2D(0.0, xwin, 0.0, ywin); glMatrixMode(GL_MODELVIEW); glPushMatrix(); glLoadIdentity(); glEnableClientState(GL_VERTEX_ARRAY); glEnableClientState(GL_COLOR_ARRAY); glVertexPointer(ITWO, GL_FLOAT, IZERO, xy_buf); glColorPointer(IFOUR, GL_FLOAT, IZERO, rgba_buf); if(cmap_s->min_opacity < 1.0) { glEnable(GL_MULTISAMPLE); glEnable(GL_SAMPLE_ALPHA_TO_COVERAGE); glDepthMask(GL_FALSE); glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); } glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); glColorMaterial(GL_FRONT_AND_BACK,GL_AMBIENT_AND_DIFFUSE); glColor4fv(black); glColorMaterial(GL_FRONT_AND_BACK,GL_EMISSION); set_rainbow_color_code(cmap_s, psf_min, l_color); for (nd=0; nd<3; nd++) { l_color[nd] = l_color[nd] * l_color[3] + bg_color[nd] * (ONE - l_color[3]); }; l_color[3] = ONE; for(i=0;i<64;i++){ y1 = ybar_min + ydelta * (GLfloat)i; psf_value = psf_min + (psf_max-psf_min) * (double)(i+1) / (double)64; set_rainbow_color_code(cmap_s, psf_value, f_color); f_color[3] = ONE; xy_buf[6*i ][0] = xbar_min; xy_buf[6*i+1][0] = xbar_mid; xy_buf[6*i+2][0] = xbar_mid; xy_buf[6*i ][1] = y1; xy_buf[6*i+1][1] = y1; xy_buf[6*i+2][1] = y1 + ydelta; xy_buf[6*i+3][0] = xbar_mid; xy_buf[6*i+4][0] = xbar_min; xy_buf[6*i+5][0] = xbar_min; xy_buf[6*i+3][1] = y1 + ydelta; xy_buf[6*i+4][1] = y1 + ydelta; xy_buf[6*i+5][1] = y1; for (nd=0; nd<4; nd++) { rgba_buf[6*i ][nd] = l_color[nd]; rgba_buf[6*i+1][nd] = l_color[nd]; rgba_buf[6*i+2][nd] = f_color[nd]; rgba_buf[6*i+3][nd] = f_color[nd]; rgba_buf[6*i+4][nd] = f_color[nd]; rgba_buf[6*i+5][nd] = l_color[nd]; } for (nd=0; nd<4; nd++) {l_color[nd] = f_color[nd];}; }; glDrawArrays(GL_TRIANGLES, IZERO, (ITHREE*128)); for(i=0;i<64;i++){ y1 = ybar_min + ydelta * (GLfloat)i; psf_value = psf_min + (psf_max-psf_min) * (double)(i+1) / (double)64; set_rainbow_color_code(cmap_s, psf_value, f_color); for (nd=0; nd<3; nd++) { f_color[nd] = f_color[nd] * f_color[3] + bg_color[nd] * (ONE - f_color[3]); }; f_color[3] = ONE; xy_buf[6*i ][0] = xbar_mid; xy_buf[6*i+1][0] = xbar_max; xy_buf[6*i+2][0] = xbar_max; xy_buf[6*i ][1] = y1; xy_buf[6*i+1][1] = y1; xy_buf[6*i+2][1] = y1 + ydelta; xy_buf[6*i+3][0] = xbar_max; xy_buf[6*i+4][0] = xbar_mid; xy_buf[6*i+5][0] = xbar_mid; xy_buf[6*i+3][1] = y1 + ydelta; xy_buf[6*i+4][1] = y1 + ydelta; xy_buf[6*i+5][1] = y1; for (nd=0; nd<4; nd++) { rgba_buf[6*i ][nd] = l_color[nd]; rgba_buf[6*i+1][nd] = l_color[nd]; rgba_buf[6*i+2][nd] = f_color[nd]; rgba_buf[6*i+3][nd] = f_color[nd]; rgba_buf[6*i+4][nd] = f_color[nd]; rgba_buf[6*i+5][nd] = l_color[nd]; } for (nd=0; nd<4; nd++) {l_color[nd] = f_color[nd];}; }; glDrawArrays(GL_TRIANGLES, IZERO, (ITHREE*128)); glColorMaterial(GL_FRONT_AND_BACK,GL_EMISSION); glColor4fv(black); if(cmap_s->min_opacity < 1.0) { glDisable(GL_BLEND); glDepthMask(GL_TRUE); glDisable(GL_SAMPLE_ALPHA_TO_COVERAGE); glDisable(GL_MULTISAMPLE); } glColorMaterial(GL_FRONT_AND_BACK,GL_AMBIENT_AND_DIFFUSE); glColor4fv(text_color); xy_buf[0][0] = xbar_min; xy_buf[1][0] = xbar_min; xy_buf[0][1] = ybar_min; xy_buf[1][1] = ybar_max; xy_buf[2][0] = xbar_max; xy_buf[3][0] = xbar_max; xy_buf[2][1] = ybar_min; xy_buf[3][1] = ybar_max; xy_buf[4][0] = xbar_min; xy_buf[5][0] = (xbar_max+3.0); xy_buf[4][1] = ybar_min; xy_buf[5][1] = ybar_min; xy_buf[6][0] = xbar_min; xy_buf[7][0] = (xbar_max+3.0); xy_buf[6][1] = ybar_max; xy_buf[7][1] = ybar_max; if(iflag_zero == 1){ xy_buf[6][0] = xbar_min; xy_buf[7][0] = (xbar_max+6.0); xy_buf[6][1] = yline_zero; xy_buf[7][1] = yline_zero; }; inum = iflag_zero + IFOUR; for (i=0;i<ITWO*inum; i++) { for (nd=0; nd<4; nd++) {rgba_buf[i][nd] = text_color[nd];} } glDrawArrays(GL_LINES, IZERO, (ITWO*inum)); glDisableClientState(GL_COLOR_ARRAY); glDisableClientState(GL_VERTEX_ARRAY); glDisable(GL_LIGHTING); glColor4fv(text_color); ysGlPlotBitmap2d_retina(iflag_retina, (xbar_max+3.0), (ybar_min-6.0), minlabel); ysGlPlotBitmap2d_retina(iflag_retina, (xbar_max+3.0), (ybar_max-6.0), maxlabel); if(iflag_zero == 1){ ysGlPlotBitmap2d_retina(iflag_retina, (xbar_max+3.0), (yline_zero-6.0), zerolabel); }; glColor4fv(black); glEnable(GL_LIGHTING); glPopMatrix(); glMatrixMode(GL_PROJECTION); glPopMatrix(); glMatrixMode(GL_MODELVIEW); return; }