Ejemplo n.º 1
0
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;
}
Ejemplo n.º 2
0
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;
}
Ejemplo n.º 3
0
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;
}
Ejemplo n.º 4
0
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;
}