예제 #1
0
int main(int argc, char **argv) {
    ac = argc;
    avp = argv;
    
    reset_element_information();
    
    if (argc < 2) {
        moldyn_usage();
    }
    
    moldyn_init_graphics(&argc, argv, argv[1]);

    
    read_dat();
    
    if (autoscale) {
        analyze();
    }
    
    read_cycle();
    
    range = fabs(zmax) + fabs(zmin);
    if (range < fabs(xmax) + fabs(xmin))
        range = fabs(xmax) + fabs(xmin);
    
    if (range < fabs(ymax) + fabs(ymin))
        range = fabs(ymax) + fabs(ymin);
    
    magnification = pow(1.2, (double) magstep);
    zeye = -2.0 * range * magnification;
    
    moldyn_update_graphics();

    if (povray <= 0) {
        start_mainloop();
    } else {
        makePov(MOLDYN_EXPORT_TO_PNG);
    }
    return 0;
}
예제 #2
0
static void keyboard(unsigned char key, int x, int y) {
    
    switch (key) {
        case 'a':
            povray = pix = -9999;
            makePov(MOLDYN_EXPORT_TO_PNG);
            break;
            
        case 'r':
            if (magstep <= 10) {
                magstep++;
                magnification = pow(1.2, (double) magstep);
                zeye = -2 * range * magnification;
                glutPostRedisplay();
            }
            break;
            
        case 'm':
            if (magstep >= -10) {
                magstep--;
                magnification = pow(1.2, (double) magstep);
                zeye = -2 * range * magnification;                
                glutPostRedisplay();
            }
            break;
            
        case 's':
            if (move_stat == ROTATE) {
                move_stat = TRANSLATE;
            } else if (move_stat == TRANSLATE) {
                move_stat = ROTATE;
            }
            break;
            
        case 'n':
            if (file_done && last_init_done) {
                break;
            } else {
                show_stat = SHOW_NEXT;
                read_cycle();
                moldyn_update_graphics();
                glutPostRedisplay();
                break;
            }
            
        case 'b':
            if (current_cycle == 1) {
                break;
            }
            show_stat = SHOW_PREV;
            current_cycle -= 2;
            file_done = 0;
            if (feof(fptr))
                rewind(fptr);
            
            if (fsetpos(fptr, &cycle_position[current_cycle]))
                moldyn_error("can't position file");
            
            read_cycle();
            moldyn_update_graphics();
            glutPostRedisplay();
            break;
            
        case 'h':
        case 'j':
            if (show_stat == HOLD && !file_done)
            {
                if (key == 'j')
                {
                    jpeg = True;
                    moldyn_export_(MOLDYN_EXPORT_TO_JPEG, window_width, window_height);
                }
                
                glutIdleFunc(animate);
                show_stat = SHOW_ALL;
            }
            else if (show_stat == SHOW_ALL)
            {
                jpeg = False;
                show_stat = HOLD;
                moldyn_update_graphics();
                glutPostRedisplay();
            }
            break;
            
        case 'c':
        case 'C':
            moldyn_export_(MOLDYN_EXPORT_TO_JPEG, 800, 800);
            break;
            
        case 'J':
            moldyn_export_(MOLDYN_EXPORT_TO_JPEG, window_width, window_height);
            break;
            
        case 'p':
        {
            char *argv[] = {"jpeg2ps", "-o", "moldyn.eps", path};
            moldyn_export_(MOLDYN_EXPORT_TO_JPEG, 2000, 2000);
            jpeg2ps_main(sizeof(argv)/sizeof(char *),argv);
        }
#ifdef _WIN32
            system("copy moldyn.eps %PRINTER%");
#else
            system("lpr -h moldyn.eps");
#endif
            break;
            
        case '0':
            xeye = 0.0;
            yeye = 0.0;
            zeye = -2.0 * range;
            glutPostRedisplay();
            break;
            
        case '?':
            hint = (hint) ? False : True;
            glutPostRedisplay();
            break;
            
        case 'T':
        case 't':
            numbers = (numbers) ? False : True;
            glutPostRedisplay();
            break;
            
        case 'q':
        case 'Q':
        case GLUT_KEY_ESCAPE:
            moldyn_exit(0);
            break;
            
    }
}