-rw-r--r-- | src/controller/clear_selection.h | 6 | ||||
-rw-r--r-- | src/controller/clear_selection.sqc | 45 | ||||
-rw-r--r-- | src/controller/keyboard.c | 28 | ||||
-rw-r--r-- | src/controller/keyboard.h | 6 | ||||
-rw-r--r-- | src/controller/selection_from_db.h | 9 | ||||
-rw-r--r-- | src/controller/selection_from_db.sqc | 21 | ||||
-rw-r--r-- | src/controller/selection_to_db.h | 9 | ||||
-rw-r--r-- | src/controller/selection_to_db.sqc | 38 | ||||
-rw-r--r-- | src/model/exp004base.sqc | 144 | ||||
-rw-r--r-- | src/util/pick_convert.c | 50 | ||||
-rw-r--r-- | src/util/pick_convert.h | 29 |
11 files changed, 385 insertions, 0 deletions
diff --git a/src/model/exp004base.sqc b/src/model/exp004base.sqc new file mode 100644 index 0000000..6189b72 --- a/dev/null +++ b/src/model/exp004base.sqc @@ -0,0 +1,144 @@ +/* I seem to need this for glGenBuffers as per + http://www.gamedev.net/community/forums/topic.asp?topic_id=422358 */ +#define GL_GLEXT_PROTOTYPES + +#include "exp004base.h" +#include "../view/exp004state0.h" +#include <GL/glut.h> +#include <stdio.h> +#include <string.h> + +EXEC SQL INCLUDE sqlca; + +/* + * A simple alias to make the code more readable. + */ +#define S exp004state0 + +void +exp004base (void) +{ + EXEC SQL CONNECT TO exp004; + + /* + * This implementation can be improved by mapping the video memory + * directly rather than loading into system memory and then copying + * into video memory. + */ + + /* + * db2dclgn -d exp004 -t coordinates + */ + EXEC SQL BEGIN DECLARE SECTION; + EXEC SQL INCLUDE 'model/coordinates.h'; + EXEC SQL END DECLARE SECTION; + + EXEC SQL DECLARE c2 CURSOR FOR + SELECT * FROM coordinates; + + EXEC SQL OPEN c2; + + /* + FILE* coords = + fopen ("/home/don/exp004/test/run20090514/run20090514.coords", "r"); + int i = 0; + */ + + /* + * Initialize the bounding box of the points. + */ + S.bb.min_x = 0.0; + S.bb.max_x = 0.0; + S.bb.min_y = 0.0; + S.bb.max_y = 0.0; + + // for (i = 0; i < ROWS; i++) + + EXEC SQL FETCH c2 INTO :coordinates; + while (sqlca.sqlcode != 100) + { + /* + fscanf (coords, "%s %f %f\n", + S.gi_data[i], + &S.base_vertices_data[i][0], + &S.base_vertices_data[i][1]); + */ + + int i = coordinates.coord_id; + + strncpy(S.gi_data[i], + coordinates.gi.data, + sizeof (S.gi_data[i])); + + S.base_vertices_data[i][0] = coordinates.x; + S.base_vertices_data[i][1] = coordinates.y; + + if (S.base_vertices_data[i][0] < S.bb.min_x) + S.bb.min_x = S.base_vertices_data[i][0]; + if (S.base_vertices_data[i][0] > S.bb.max_x) + S.bb.max_x = S.base_vertices_data[i][0]; + if (S.base_vertices_data[i][1] < S.bb.min_y) + S.bb.min_y = S.base_vertices_data[i][1]; + if (S.base_vertices_data[i][1] > S.bb.max_y) + S.bb.max_y = S.base_vertices_data[i][1]; + + /* + * Deselected by default. + */ + S.selection[i] = false; + + S.base_colors_data[i][0] = DEFAULT_COLOR_R; + S.base_colors_data[i][1] = DEFAULT_COLOR_G; + S.base_colors_data[i][2] = DEFAULT_COLOR_B; + + EXEC SQL FETCH c2 INTO :coordinates; + } + + EXEC SQL CLOSE c2; + + /* + fclose (coords); + */ + + /* + * Find the largest axis and use it to setup the projection. This + * is done to preserve the aspect ratio. The aspect ratio should be + * preserved since relative distance is a meaningful indicator in + * the map. + */ + + // Min of min x or min y. + if (S.bb.min_x <= S.bb.min_y) + S.ortho_min = S.bb.min_x; + else + S.ortho_min = S.bb.min_y; + S.ortho_min--; + + // Max of max x or max y. + if (S.bb.max_x >= S.bb.max_y) + S.ortho_max = S.bb.max_x; + else + S.ortho_max = S.bb.max_y; + S.ortho_max++; + + // Invert the y coordinate to match up with the LGL Java viewer. + for (int i = 0; i < ROWS; i++) + S.base_vertices_data[i][1] = + S.ortho_max - S.base_vertices_data[i][1]; + + glGenBuffers (2, S.buffers); + + glBindBuffer (GL_ARRAY_BUFFER, S.buffers[BASE_VERTICES]); + glVertexPointer (2, GL_FLOAT, 0, 0); + glBufferData (GL_ARRAY_BUFFER, + sizeof (S.base_vertices_data), S.base_vertices_data, + GL_STATIC_DRAW); + + glBindBuffer (GL_ARRAY_BUFFER, S.buffers[BASE_COLORS]); + glColorPointer (3, GL_FLOAT, 0, 0); + glBufferData (GL_ARRAY_BUFFER, + sizeof (S.base_colors_data), S.base_colors_data, + GL_STATIC_DRAW); + + return; +} |