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 @@ +#define GL_GLEXT_PROTOTYPES +#include "selection_from_db.h" +#include "../../model/geometry/map_geometry.h" +#include "../../view/exp004state0.h" +#include "../../util/check_error.h" +#include <GL/glut.h> +#include "sqlca.h" +extern struct sqlca sqlca; + +/* + * A simple alias to make the code more readable. + */ +#define S exp004state0 + +void +selection_from_db (void) +{ + /* + * db2dclgn -d exp004 -t vis_sel_set + */ + EXEC SQL BEGIN DECLARE SECTION; + EXEC SQL INCLUDE 'controller/actions/vis_sel_set.h'; + EXEC SQL END DECLARE SECTION; + + EXEC SQL DECLARE c3 CURSOR FOR + SELECT * FROM vis_sel_set ORDER BY title, id DESC; + + EXEC SQL OPEN c3; + check_error (__FILE__, __LINE__); + + /* + * This loop currently assumes only one set in the table and does + * not use the title assigned to that set. This should be improved + * to allow the user to manage multiple sets by name. + */ + EXEC SQL FETCH c3 INTO:vis_sel_set; + while (sqlca.sqlcode != 100) + { + int i = vis_sel_set.id - 1; + + /* + * Loaded sets do not automatically become part of the current + * selection, however they could be added to it. This is an + * issue to work out in the interaction. + */ + // S.selection.set[i] = true; + + float *c = S.base_colors_data + (i * 4); + *c = vis_sel_set.r; + c++; + *c = vis_sel_set.g; + c++; + *c = vis_sel_set.b; + c++; + *c = 0.6; + + EXEC SQL FETCH c3 INTO:vis_sel_set; + } + + EXEC SQL CLOSE c3; + check_error (__FILE__, __LINE__); + + EXEC SQL COMMIT; + check_error (__FILE__, __LINE__); + + /* + * Update the graphics memory. + */ + + glBindBuffer (GL_ARRAY_BUFFER, S.buffers[BASE_COLORS]); + glColorPointer (4, GL_FLOAT, 0, 0); + glBufferData (GL_ARRAY_BUFFER, + sizeof (S.base_colors_data), S.base_colors_data, + GL_STATIC_DRAW); + + /* + * Rebuild the display list. + */ + map_geometry (); + + glutPostRedisplay (); + + return; +} |