00001
00020 #include "render.h"
00021 #include "blobs.h"
00022
00023 #ifdef __UNIX__
00024 #include <assert.h>
00025 #endif
00026 #include <math.h>
00027
00028 #include "vecfuncs.h"
00029 #include "debug.h"
00030
00031
00032
00033
00034 void *blob_window = NULL;
00035
00036 C_COL color_list[] = {
00037 Red, Cyan, Yellow, Blue, Green, White
00038 };
00039
00042 make_toggle_var (display_all_blobs, 0, make_disp_all_blobs,
00043 5, 1, toggle_blobs, "Display Blobs");
00044
00045 make_toggle_var (display_all_words, 0, make_disp_all_words,
00046 5, 2, toggle_wdisp, "Display Words");
00047
00048 make_toggle_var (blob_pause, 0, make_blob_pause,
00049 5, 6, toggle_pause, "Blob pause");
00052
00053
00054
00055
00059 void display_blob(TBLOB *blob, C_COL color) {
00060 void *window;
00061 TPOINT origin;
00062
00063 if (blob_window == NULL) {
00064 blob_window = c_create_window ("Blobs", 520, 10,
00065 500, 128, -1000.0, 1000.0, 0.0, 256.0);
00066 }
00067 else {
00068 c_clear_window(blob_window);
00069 }
00070
00071 window = blob_window;
00072
00073 blob_origin(blob, &origin);
00074
00075 render_blob(window, blob, origin, color);
00076
00077 c_make_current(window);
00078 }
00079
00080
00081
00085 void init_render_vars() {
00086 make_disp_all_blobs();
00087 make_disp_all_words();
00088 make_blob_pause();
00089 }
00090
00091
00092
00097 void render_blob(void *window, TBLOB *blob, TPOINT origin, C_COL color) {
00098
00099 if (!blob)
00100 return;
00101
00102 render_outline (window, blob->outlines, origin, color);
00103 }
00104
00105
00106
00111 void render_edgepts(void *window, EDGEPT *edgept, C_COL color) {
00112 float x = edgept->pos.x;
00113 float y = edgept->pos.y;
00114 EDGEPT *this_edge = edgept;
00115
00116 if (!edgept)
00117 return;
00118
00119 c_line_color_index(window, color);
00120 c_move(window, x, y);
00121 do {
00122 this_edge = this_edge->next;
00123 x = this_edge->pos.x;
00124 y = this_edge->pos.y;
00125 c_draw(window, x, y);
00126 }
00127 while (edgept != this_edge);
00128 }
00129
00130
00131
00136 void render_outline(void *window,
00137 TESSLINE *outline,
00138 TPOINT origin,
00139 C_COL color) {
00140
00141 if (!outline)
00142 return;
00143
00144 if (outline->loop)
00145 render_edgepts (window, outline->loop, color);
00146
00147 render_outline (window, outline->next, origin, color);
00148
00149
00150 render_outline (window, outline->child, origin, Grey);
00151 }