summaryrefslogtreecommitdiffstats
Side-by-side diff
-rw-r--r--src/controller/clear_selection.h6
-rw-r--r--src/controller/clear_selection.sqc45
-rw-r--r--src/controller/keyboard.c28
-rw-r--r--src/controller/keyboard.h6
-rw-r--r--src/controller/selection_from_db.h9
-rw-r--r--src/controller/selection_from_db.sqc21
-rw-r--r--src/controller/selection_to_db.h9
-rw-r--r--src/controller/selection_to_db.sqc38
-rw-r--r--src/model/exp004base.sqc144
-rw-r--r--src/util/pick_convert.c50
-rw-r--r--src/util/pick_convert.h29
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;
+}

Valid XHTML 1.0 Strict

Copyright © 2009 Don Pellegrino All Rights Reserved.