void act_muscles ( HEAD *face ) { int i ; /* * Loop all the muscles. */ for (i=0; i<face->nmuscles; i++) { /* * Check to see if the muscle is active. */ if (face->muscle[i]->active) { activate_muscle ( face, face->muscle[i]->head, face->muscle[i]->tail, face->muscle[i]->fs, face->muscle[i]->fe, face->muscle[i]->zone, face->muscle[i]->mval ) ; /* * Reset the muscle activity. */ face->muscle[i]->active = 1 ; } } }
void main_menu_select(int value) { char title[512]; switch(value) { case 1: face_reset ( face ) ; glutPostRedisplay(); break; case 2: print_mesg(); break; case 3: face->muscle[m]->mstat += 0.25 ; activate_muscle ( face, face->muscle[m]->head, face->muscle[m]->tail, face->muscle[m]->fs, face->muscle[m]->fe, face->muscle[m]->zone, +0.25 ) ; glutPostRedisplay(); break; case 4: face->muscle[m]->mstat -= 0.25 ; activate_muscle ( face, face->muscle[m]->head, face->muscle[m]->tail, face->muscle[m]->fs, face->muscle[m]->fe, face->muscle[m]->zone, -0.25 ) ; glutPostRedisplay(); break; case 5: m++ ; if ( m >= face->nmuscles ) m = 0 ; sprintf(title, "geoface (%s)", face->muscle[m]->name); glutSetWindowTitle(title); break; case 666: exit(0); break; } }
/* ARGSUSED1 */ void special(int key, int x, int y) { char title[512]; switch(key) { case GLUT_KEY_RIGHT: m++ ; if ( m >= face->nmuscles ) m = 0 ; sprintf(title, "geoface (%s)", face->muscle[m]->name); glutSetWindowTitle(title); break; case GLUT_KEY_LEFT: m-- ; if ( m < 0 ) m = face->nmuscles - 1 ; sprintf(title, "geoface (%s)", face->muscle[m]->name); glutSetWindowTitle(title); break; case GLUT_KEY_UP: face->muscle[m]->mstat += 0.1 ; activate_muscle ( face, face->muscle[m]->head, face->muscle[m]->tail, face->muscle[m]->fs, face->muscle[m]->fe, face->muscle[m]->zone, 0.1 ) ; glutPostRedisplay(); break; case GLUT_KEY_DOWN: face->muscle[m]->mstat -= 0.1 ; activate_muscle ( face, face->muscle[m]->head, face->muscle[m]->tail, face->muscle[m]->fs, face->muscle[m]->fe, face->muscle[m]->zone, -0.1 ) ; glutPostRedisplay(); break; } }
/* ARGSUSED1 */ static void Key ( unsigned char key, int x, int y ) { char title[512]; switch ( key ) { case 27 : case 'q' : case 'Q' : exit (0) ; case 'r' : case 'R' : printf ("Rereading expression file\n"); read_expressions(); e = 0; /* reset the expression count variable */ glutPostRedisplay(); break; case 'a' : printf ("increment muscle: %s\n", face->muscle[m]->name ) ; /* set the muscle activation */ face->muscle[m]->mstat += 0.1 ; activate_muscle ( face, face->muscle[m]->head, face->muscle[m]->tail, face->muscle[m]->fs, face->muscle[m]->fe, face->muscle[m]->zone, 0.1 ) ; glutPostRedisplay(); break; case 'A' : printf ("decrement muscle: %s\n", face->muscle[m]->name ) ; face->muscle[m]->mstat -= 0.1 ; activate_muscle ( face, face->muscle[m]->head, face->muscle[m]->tail, face->muscle[m]->fs, face->muscle[m]->fe, face->muscle[m]->zone, -0.1 ) ; glutPostRedisplay(); break; case 'b' : DRAW_MODE++ ; if ( DRAW_MODE >= 3 ) DRAW_MODE = 0 ; printf ("draw mode: %d\n", DRAW_MODE ) ; glutPostRedisplay(); break; case 'c' : face_reset ( face ) ; glutPostRedisplay(); break; case 'n' : m++ ; if ( m >= face->nmuscles ) m = 0 ; sprintf(title, "geoface (%s)", face->muscle[m]->name); glutSetWindowTitle(title); break; case 'e' : if (face->expression) { face_reset ( face ) ; expressions ( face, e ) ; e++ ; if ( e >= face->nexpressions ) e = 0 ; glutPostRedisplay(); } break; case 'h' : print_mesg(); } }