static COMMAND_FUNC( do_xp_space ) { sx1=(std_type)HOW_MUCH("minimum x coord"); sy1=(std_type)HOW_MUCH("minimum y coord"); sx2=(std_type)HOW_MUCH("maximum x coord"); sy2=(std_type)HOW_MUCH("maximum y coord"); /* There is no real reason to require this, except that * we assumed it must have been a mistake if the user did this... * But we often deal with situations where the y coordinate needs * to be turned upside down to make various conventions mesh... */ /* if( sx2 <= sx1 ){ WARN("do_xp_space: x max coord must be larger than x min coord"); return; } if( sy2 <= sy1 ){ WARN("do_xp_space: y max coord must be larger than y min coord"); return; } */ if( sx2 == sx1 ) { WARN("do_xp_space: x max coord must be different from x min coord"); return; } if( sy2 == sy1 ) { WARN("do_xp_space: y max coord must be different from y min coord"); return; } xp_fspace(sx1,sy1,sx2,sy2); }
static COMMAND_FUNC( do_xp_point ) { std_type x,y; x=(std_type)HOW_MUCH("x coord"); y=(std_type)HOW_MUCH("y coord"); xp_fpoint(x,y); }
static COMMAND_FUNC( do_xp_move ) { std_type x,y; x=(std_type)HOW_MUCH("x coord"); y=(std_type)HOW_MUCH("y coord"); xp_fmove(x,y); }
static COMMAND_FUNC( do_xp_line ) { std_type x1,x2,y1,y2; x1=(std_type)HOW_MUCH("first x coord"); y1=(std_type)HOW_MUCH("first y coord"); x2=(std_type)HOW_MUCH("second x coord"); y2=(std_type)HOW_MUCH("second y coord"); xp_fline(x1,y1,x2,y2); }
static COMMAND_FUNC( do_gl_tc ) { float s,t; s=(float)HOW_MUCH("s coordinate"); t=(float)HOW_MUCH("t coordinate"); if( debug & gl_debug ) advise("glTexCoord2f"); glTexCoord2f(s,t); }
static COMMAND_FUNC( do_xlate ) { float tx,ty,tz; tx=(float)HOW_MUCH("x translation"); ty=(float)HOW_MUCH("y translation"); tz=(float)HOW_MUCH("z translation"); if( debug & gl_debug ) advise("glTranslatef"); glTranslatef(tx,ty,tz); }
static COMMAND_FUNC( do_scale ) { float fx,fy,fz; fx=(float)HOW_MUCH("x scale factor"); fy=(float)HOW_MUCH("y scale factor"); fz=(float)HOW_MUCH("z scale factor"); if( debug & gl_debug ) advise("glScalef"); glScalef(fx,fy,fz); }
static COMMAND_FUNC( set_global_ambient ) { float v[4]; v[0]=(float)HOW_MUCH("red"); v[1]=(float)HOW_MUCH("green"); v[2]=(float)HOW_MUCH("blue"); v[3]=1.0; if( debug & gl_debug ) advise("glLightModelfv"); glLightModelfv(GL_LIGHT_MODEL_AMBIENT,v); }
static COMMAND_FUNC( do_rotate ) { float angle; float dx,dy,dz; angle = (float)HOW_MUCH("angle in degrees"); dx = (float)HOW_MUCH("rotation axis x"); dy = (float)HOW_MUCH("rotation axis y"); dz = (float)HOW_MUCH("rotation axis z"); if( debug & gl_debug ) advise("glRotatef"); glRotatef(angle,dx,dy,dz); }
static COMMAND_FUNC( set_spot_dir ) { float v[3]; v[0]=(float)HOW_MUCH("x component"); v[1]=(float)HOW_MUCH("y component"); v[2]=(float)HOW_MUCH("z component"); CHECK_LIGHT("spot direction") if( debug & gl_debug ) advise("glLightfv GL_POSITION"); glLightfv(which_light,GL_SPOT_DIRECTION,v); }
static COMMAND_FUNC( set_ambient ) { float v[4]; v[0] = (float)HOW_MUCH("red component"); v[1] = (float)HOW_MUCH("green component"); v[2] = (float)HOW_MUCH("blue component"); v[3] = 1.0; CHECK_LIGHT("ambient"); if( debug & gl_debug ) advise("glLightfv GL_AMBIENT"); glLightfv(which_light,GL_AMBIENT,v); }
static PF_COMMAND_FUNC( fill2 ) { Data_Obj *dp; int x,y; float fill_val, tol; dp = PICK_OBJ("image"); x=HOW_MANY("seed point x"); y=HOW_MANY("seed point y"); fill_val=HOW_MUCH("fill value"); tol = HOW_MUCH("tolerance"); h_sp_ifl2(dp,x,y,tol,fill_val); }
static COMMAND_FUNC( do_gl_normal ) { float x,y,z; x=(float)HOW_MUCH("x coordinate"); y=(float)HOW_MUCH("y coordinate"); z=(float)HOW_MUCH("z coordinate"); if( debug & gl_debug ){ sprintf(ERROR_STRING,"glNormal3f %g %g %g",x,y,z); advise(ERROR_STRING); } glNormal3f(x,y,z); }
static COMMAND_FUNC( do_persp ) { GLdouble fovy, aspect, near, far; fovy = HOW_MUCH("vertical field of view in degrees (0-180)"); aspect = HOW_MUCH("aspect ration (H/V)"); near = HOW_MUCH("distance to near clipping plane"); far = HOW_MUCH("distance to far clipping plane"); /* BUG check for errors */ if( debug & gl_debug ) advise("gluPerspective"); gluPerspective(fovy,aspect,near,far); }
static COMMAND_FUNC( do_gl_color ) { float r,g,b; r=(float)HOW_MUCH("red"); g=(float)HOW_MUCH("green"); b=(float)HOW_MUCH("blue"); if( debug & gl_debug ){ sprintf(ERROR_STRING,"glColor3f %g %g %g",r,g,b); advise(ERROR_STRING); } glColor3f(r,g,b); }
static COMMAND_FUNC( set_specular ) { float v[4]; v[0] = (float)HOW_MUCH("red component"); v[1] = (float)HOW_MUCH("green component"); v[2] = (float)HOW_MUCH("blue component"); v[3] = 1.0; CHECK_LIGHT("specular"); if( debug & gl_debug ) advise("glLightfv GL_SPECULAR"); glLightfv(which_light, GL_SPECULAR, v); }
static COMMAND_FUNC( set_light_position ) { float v[4]; v[0]=(float)HOW_MUCH("x position"); v[1]=(float)HOW_MUCH("y position"); v[2]=(float)HOW_MUCH("z position"); v[3]=(float)HOW_MUCH("w position"); CHECK_LIGHT("position") if( debug & gl_debug ) advise("glLightfv GL_POSITION"); glLightfv(which_light,GL_POSITION,v); }
static COMMAND_FUNC( set_diffuse ) { float v[4]; v[0]=(float)HOW_MUCH("red component"); v[1]=(float)HOW_MUCH("green component"); v[2]=(float)HOW_MUCH("blue component"); v[3]=1.0; CHECK_LIGHT("diffuse"); if( debug & gl_debug ) advise("glLightfv GL_DIFFUSE"); glLightfv(which_light,GL_DIFFUSE,v); }
static COMMAND_FUNC( do_xp_circ ) { std_type rad; rad = (std_type)HOW_MUCH("radius"); xp_circle(rad); }
static COMMAND_FUNC( seter ) { double er; er=HOW_MUCH("finger error rate"); w_set_error_rate(er); }
static COMMAND_FUNC( do_set_vzero ) { crt_vzero=(float)HOW_MUCH("voltage offset for linearization"); CHECK_DPYP("do_set_vzero") #ifdef HAVE_X11 lin_setup(QSP_ARG DPA_LINTBL_OBJ(current_dpyp),crt_gamma,crt_vzero); #endif /* HAVE_X11 */ }
static COMMAND_FUNC( do_set_gamma ) { crt_gamma=HOW_MUCH("exponent for linearization"); CHECK_DPYP("do_set_gamma") #ifdef HAVE_X11 lin_setup(QSP_ARG DPA_LINTBL_OBJ(current_dpyp),crt_gamma,crt_vzero); #endif /* HAVE_X11 */ }
static COMMAND_FUNC( do_gl_ptsize ) { float size; size = (float)HOW_MUCH("size"); if( debug & gl_debug ) advise("glPointSize"); glPointSize(size); }
static COMMAND_FUNC( set_pt_size ) { GLfloat s; s=(float)HOW_MUCH("width in pixels for rendered points"); if( s <= 0 ){ sprintf(ERROR_STRING,"Requested point size (%g) must be positive",s); WARN(ERROR_STRING); return; } if( debug & gl_debug ) advise("glPointSize"); glPointSize(s); }
static COMMAND_FUNC( set_line_width ) { GLfloat w; w=(float)HOW_MUCH("width in pixels for rendered lines"); if( w <= 0 ){ sprintf(ERROR_STRING,"Requested line width (%g) must be positive",w); WARN(ERROR_STRING); return; } if( debug & gl_debug ) advise("glLineWidth"); glLineWidth(w); }
static COMMAND_FUNC( do_look_at ) { float x,y,z; float cx,cy,cz; float ux,uy,uz; x = (float)HOW_MUCH("x camera position"); y = (float)HOW_MUCH("y camera position"); z = (float)HOW_MUCH("z camera position"); cx = (float)HOW_MUCH("x target position"); cy = (float)HOW_MUCH("y target position"); cz = (float)HOW_MUCH("z target position"); ux = (float)HOW_MUCH("x up direction"); uy = (float)HOW_MUCH("y up direction"); uz = (float)HOW_MUCH("z up direction"); if( debug & gl_debug ) advise("gluLookAt"); gluLookAt(x,y,z,cx,cy,cz,ux,uy,uz); }
static COMMAND_FUNC( do_xp_fill_polygon ) { float* x_vals=NULL, *y_vals = NULL; int num_points; int i; num_points = (int)HOW_MANY("number of polygon points"); x_vals = (float *) getbuf(sizeof(float) * num_points); y_vals = (float *) getbuf(sizeof(float) * num_points); for (i=0; i < num_points; i++) { char s[100]; sprintf(s, "point %d x value", i+1); x_vals[i] = (float)HOW_MUCH(s); sprintf(s, "point %d y value", i+1); y_vals[i] = (float)HOW_MUCH(s); } xp_fill_polygon(num_points, x_vals, y_vals); givbuf(x_vals); givbuf(y_vals); }
static COMMAND_FUNC( set_atten ) { int i; float f; i=WHICH_ONE("attenuation model",N_ATTENUATIONS,atten_names); f=(float)HOW_MUCH("attenuation constant"); if( i < 0 ) return; if( debug & gl_debug ) advise("glLightf"); switch(i){ case 0: glLightf(which_light,GL_CONSTANT_ATTENUATION,f); break; case 1: glLightf(which_light,GL_LINEAR_ATTENUATION,f); break; case 2: glLightf(which_light,GL_QUADRATIC_ATTENUATION,f); break; } }
static void getparm(QSP_ARG_DECL Param *p) { if( IS_ARRAY_PARAM(p) ) getarrp(QSP_ARG p); else if( IS_FLOAT_PARAM(p) ) *p->u.fp = fnum= (float)HOW_MUCH( p->p_comment ); else if( IS_SHORT_PARAM(p) ) *p->u.sp = (short)HOW_MANY( p->p_comment ); else if( IS_INT_PARAM(p) ) *p->u.ip = (int)HOW_MANY( p->p_comment ); else if( IS_STRING_PARAM(p) ) strcpy( p->u.strp, NAMEOF(p->p_comment) ); else ERROR1(badpstr); }
static COMMAND_FUNC( do_xp_fill_arc ) { std_type cx,cy,x1,y1,x2,y2; cx=(std_type)HOW_MUCH("center x"); cy=(std_type)HOW_MUCH("center y"); x1=(std_type)HOW_MUCH("arc start x"); y1=(std_type)HOW_MUCH("arc start y"); x2=(std_type)HOW_MUCH("arc end x"); y2=(std_type)HOW_MUCH("arc end y"); xp_ffill_arc(cx,cy,x1,y1,x2,y2); }