36 files changed, 332 insertions, 176 deletions
diff --git a/src/controller/actions/selection_from_db.sqc b/src/controller/actions/selection_from_db.sqc new file mode 100644 index 0000000..442f7c2 --- a/dev/null +++ b/src/controller/actions/selection_from_db.sqc | |||
@@ -0,0 +1,84 @@ | |||
1 | #define GL_GLEXT_PROTOTYPES | ||
2 | #include "selection_from_db.h" | ||
3 | #include "../../model/geometry/map_geometry.h" | ||
4 | #include "../../view/exp004state0.h" | ||
5 | #include "../../util/check_error.h" | ||
6 | #include <GL/glut.h> | ||
7 | #include "sqlca.h" | ||
8 | extern struct sqlca sqlca; | ||
9 | |||
10 | /* | ||
11 | * A simple alias to make the code more readable. | ||
12 | */ | ||
13 | #define S exp004state0 | ||
14 | |||
15 | void | ||
16 | selection_from_db (void) | ||
17 | { | ||
18 | /* | ||
19 | * db2dclgn -d exp004 -t vis_sel_set | ||
20 | */ | ||
21 | EXEC SQL BEGIN DECLARE SECTION; | ||
22 | EXEC SQL INCLUDE 'controller/actions/vis_sel_set.h'; | ||
23 | EXEC SQL END DECLARE SECTION; | ||
24 | |||
25 | EXEC SQL DECLARE c3 CURSOR FOR | ||
26 | SELECT * FROM vis_sel_set ORDER BY title, id DESC; | ||
27 | |||
28 | EXEC SQL OPEN c3; | ||
29 | check_error (__FILE__, __LINE__); | ||
30 | |||
31 | /* | ||
32 | * This loop currently assumes only one set in the table and does | ||
33 | * not use the title assigned to that set. This should be improved | ||
34 | * to allow the user to manage multiple sets by name. | ||
35 | */ | ||
36 | EXEC SQL FETCH c3 INTO:vis_sel_set; | ||
37 | while (sqlca.sqlcode != 100) | ||
38 | { | ||
39 | int i = vis_sel_set.id - 1; | ||
40 | |||
41 | /* | ||
42 | * Loaded sets do not automatically become part of the current | ||
43 | * selection, however they could be added to it. This is an | ||
44 | * issue to work out in the interaction. | ||
45 | */ | ||
46 | // S.selection.set[i] = true; | ||
47 | |||
48 | float *c = S.base_colors_data + (i * 4); | ||
49 | *c = vis_sel_set.r; | ||
50 | c++; | ||
51 | *c = vis_sel_set.g; | ||
52 | c++; | ||
53 | *c = vis_sel_set.b; | ||
54 | c++; | ||
55 | *c = 0.6; | ||
56 | |||
57 | EXEC SQL FETCH c3 INTO:vis_sel_set; | ||
58 | } | ||
59 | |||
60 | EXEC SQL CLOSE c3; | ||
61 | check_error (__FILE__, __LINE__); | ||
62 | |||
63 | EXEC SQL COMMIT; | ||
64 | check_error (__FILE__, __LINE__); | ||
65 | |||
66 | /* | ||
67 | * Update the graphics memory. | ||
68 | */ | ||
69 | |||
70 | glBindBuffer (GL_ARRAY_BUFFER, S.buffers[BASE_COLORS]); | ||
71 | glColorPointer (4, GL_FLOAT, 0, 0); | ||
72 | glBufferData (GL_ARRAY_BUFFER, | ||
73 | sizeof (S.base_colors_data), S.base_colors_data, | ||
74 | GL_STATIC_DRAW); | ||
75 | |||
76 | /* | ||
77 | * Rebuild the display list. | ||
78 | */ | ||
79 | map_geometry (); | ||
80 | |||
81 | glutPostRedisplay (); | ||
82 | |||
83 | return; | ||
84 | } | ||