36 files changed, 332 insertions, 176 deletions
diff --git a/src/controller/actions/clear_selection.sqc b/src/controller/actions/clear_selection.sqc new file mode 100644 index 0000000..e527c30 --- a/dev/null +++ b/src/controller/actions/clear_selection.sqc | |||
@@ -0,0 +1,53 @@ | |||
1 | #define GL_GLEXT_PROTOTYPES | ||
2 | #include "clear_selection.h" | ||
3 | #include "../../model/geometry/map_geometry.h" | ||
4 | #include "../../view/exp004state0.h" | ||
5 | #include <GL/glut.h> | ||
6 | #include "sqlca.h" | ||
7 | extern struct sqlca sqlca; | ||
8 | |||
9 | /* | ||
10 | * A simple alias to make the code more readable. | ||
11 | */ | ||
12 | #define S exp004state0 | ||
13 | |||
14 | void | ||
15 | clear_selection (void) | ||
16 | { | ||
17 | /* | ||
18 | * WHERE gi IS NOT NULL is added to prevent the PRECOMPILE command | ||
19 | * from throwing a warning about modifying an entire table. Since | ||
20 | * gi is defined as NOT NULL this will clear the entire table. | ||
21 | */ | ||
22 | EXEC SQL DELETE FROM vis_selection WHERE gi IS NOT NULL; | ||
23 | |||
24 | EXEC SQL COMMIT; | ||
25 | |||
26 | for (unsigned int i = 0; i < S.rows; i++) | ||
27 | { | ||
28 | S.selection.set[i] = false; | ||
29 | float *c = S.base_colors_data + (i * 4); | ||
30 | *c = DEFAULT_COLOR_R; | ||
31 | c++; | ||
32 | *c = DEFAULT_COLOR_G; | ||
33 | c++; | ||
34 | *c = DEFAULT_COLOR_B; | ||
35 | c++; | ||
36 | *c = DEFAULT_COLOR_A; | ||
37 | } | ||
38 | |||
39 | glBindBuffer (GL_ARRAY_BUFFER, S.buffers[BASE_COLORS]); | ||
40 | glColorPointer (4, GL_FLOAT, 0, 0); | ||
41 | glBufferData (GL_ARRAY_BUFFER, | ||
42 | sizeof (S.base_colors_data), S.base_colors_data, | ||
43 | GL_STATIC_DRAW); | ||
44 | |||
45 | /* | ||
46 | * Rebuild the display list for the map. | ||
47 | */ | ||
48 | map_geometry (); | ||
49 | |||
50 | glutPostRedisplay (); | ||
51 | |||
52 | return; | ||
53 | } | ||