#include "pan.h" #include "../../util/check_error.h" #include "../../view/state0.h" #include #define S state0 void pan (int x1, int y1, int x2, int y2) { int dx = x1 - x2; int dy = y1 - x2; if (dx == 0 && dy == 0) return; /* * Convert the selection boundary from window coordinates to * world coordinates. */ glMatrixMode (GL_MODELVIEW); glLoadIdentity (); GLdouble model[16]; glGetDoublev (GL_MODELVIEW_MATRIX, model); GLdouble projection[16]; glGetDoublev (GL_PROJECTION_MATRIX, projection); GLint viewport[4]; glGetIntegerv (GL_VIEWPORT, viewport); check_error (__FILE__, __LINE__); GLdouble start_position[3]; gluUnProject (x1, y1, 0, model, projection, viewport, &start_position[0], &start_position[1], &start_position[2]); check_error (__FILE__, __LINE__); GLdouble end_position[3]; gluUnProject (x2, y2, 0, model, projection, viewport, &end_position[0], &end_position[1], &end_position[2]); check_error (__FILE__, __LINE__); S.pan.trans[0] += end_position[0] - start_position[0]; S.pan.trans[1] -= end_position[1] - start_position[1]; glutPostRedisplay (); return; }