/* face-tcl.c acb 8-8-1995 * Tcl/Tk code for the facial expression system * Code based on fascia; file structure similar to the simp-gl tkGLX demo. */ #include #include #include #include #include "tk.h" #include "face.h" #include "face-gl.h" int face_render_cmd(dummy, interp, argc, argv) ClientData dummy; /* Not used. */ Tcl_Interp *interp; /* Current interpreter. */ int argc; /* Number of arguments. */ char **argv; /* Argument strings. */ { float chrom[CHROM_SIZE]; int i; for(i=1; iresult = "ortho: insufficient arguments"; return TCL_ERROR; }; face_ortho(atof(argv[1]), atof(argv[2]), atof(argv[3]), atof(argv[4]), atof(argv[5]), atof(argv[6])); return TCL_OK; }; int face_perspective_cmd(dummy, interp, argc, argv) ClientData dummy; /* Not used. */ Tcl_Interp *interp; /* Current interpreter. */ int argc; /* Number of arguments. */ char **argv; /* Argument strings. */ { if(argc<5) { interp->result = "perspective: insufficient arguments"; return TCL_ERROR; }; face_perspective(atof(argv[1]), atof(argv[2]), atof(argv[3]), atof(argv[4])); return TCL_OK; }; int face_polarview_cmd(dummy, interp, argc, argv) ClientData dummy; /* Not used. */ Tcl_Interp *interp; /* Current interpreter. */ int argc; /* Number of arguments. */ char **argv; /* Argument strings. */ { if(argc<5) { interp->result = "polarview: insufficient arguments"; return TCL_ERROR; }; face_polarview(atof(argv[1]), atof(argv[2]), atof(argv[3]), atof(argv[4])); return TCL_OK; }; int face_viewport_cmd(dummy, interp, argc, argv) ClientData dummy; /* Not used. */ Tcl_Interp *interp; /* Current interpreter. */ int argc; /* Number of arguments. */ char **argv; /* Argument strings. */ { if(argc<5) { interp->result = "viewport: insufficient arguments"; return TCL_ERROR; }; face_viewport(atoi(argv[1]), atoi(argv[2]), atoi(argv[3]), atoi(argv[4])); return TCL_OK; }; int face_window_cmd(dummy, interp, argc, argv) ClientData dummy; /* Not used. */ Tcl_Interp *interp; /* Current interpreter. */ int argc; /* Number of arguments. */ char **argv; /* Argument strings. */ { if(argc<7) { interp->result = "window: insufficient arguments"; return TCL_ERROR; }; face_window(atof(argv[1]), atof(argv[2]), atof(argv[3]), atof(argv[4]), atof(argv[5]), atof(argv[6])); return TCL_OK; }; int face_random_cmd(ClientData cd, Tcl_Interp *interp, int argc, char **argv) { static char *usage="random: usage is \"random between a b\", \"random between_extreme a b\" or \"random select a .. ."; if(argc<3) { interp->result = usage; return TCL_ERROR; } if((strcmp(argv[1],"between")==0)&&(argc==4)) { sprintf(interp->result, "%f", ((random()%1001)/1000.0)*(atof(argv[3])-atof(argv[2]))+atof(argv[2])); } else if((strcmp(argv[1],"between_extreme")==0)) { sprintf(interp->result, "%f", (cos(3.141592654*((random()%1001)/1000.0))+1.0)/2.0 *(atof(argv[3])-atof(argv[2]))+atof(argv[2])); } else if((strcmp(argv[1],"select")==0)) { sprintf(interp->result, "%s", argv[2+(random()%(argc-2))]); } else { interp->result = usage; return TCL_ERROR; } return TCL_OK; } face_tcl_init(interp, w) Tcl_Interp *interp; Tk_Window w; { srandom(time(NULL)); Tcl_CreateCommand(interp, "render_init", face_render_init_cmd, NULL, NULL); Tcl_CreateCommand(interp, "render", face_render_cmd, NULL, NULL); Tcl_CreateCommand(interp, "clear", face_clear_cmd, NULL, NULL); Tcl_CreateCommand(interp, "ortho", face_ortho_cmd, NULL, NULL); Tcl_CreateCommand(interp, "perspective", face_perspective_cmd, NULL, NULL); Tcl_CreateCommand(interp, "polarview", face_polarview_cmd, NULL, NULL); Tcl_CreateCommand(interp, "viewport", face_viewport_cmd, NULL, NULL); Tcl_CreateCommand(interp, "window", face_window_cmd, NULL, NULL); Tcl_CreateCommand(interp, "set_RGBcolor", face_set_RGBcolor_cmd, NULL, NULL); Tcl_CreateCommand(interp, "random", face_random_cmd, NULL, NULL); };