1 #include "Gwater.h"
2 #include <unistd.h>
3 #include <grass/gis.h>
4 #include <grass/glocale.h>
5
close_array_seg(void)6 int close_array_seg(void)
7 {
8 struct Colors colors;
9 int incr, max, red, green, blue, rd, gr, bl, flag;
10 int c, r, map_fd;
11 CELL *cellrow;
12 CSEG *theseg;
13 ASP_FLAG af;
14
15 if (seg_flag || bas_flag || haf_flag) {
16 if (seg_flag)
17 theseg = &bas;
18 else if (bas_flag)
19 theseg = &bas;
20 else
21 theseg = &haf;
22 max = -9;
23 /*
24 for (r = 0; r < nrows; r++) {
25 for (c = 0; c < ncols; c++) {
26 cseg_get(theseg, &value, r, c);
27 if (value > max)
28 max = value;
29 }
30 }
31 */
32 max = n_basins;
33 G_debug(1, "%d basins created", max);
34 Rast_init_colors(&colors);
35 if (max > 0)
36 Rast_make_random_colors(&colors, 1, max);
37 else {
38 G_warning(_("No basins were created. Verify threshold and region settings."));
39 Rast_make_random_colors(&colors, 1, 2);
40 }
41
42 if (max < 1000 && max > 0) {
43 Rast_set_c_color((CELL) 0, 0, 0, 0, &colors);
44 r = 1;
45 incr = 0;
46 while (incr >= 0) {
47 G_percent(r, max, 3);
48 for (gr = 130 + incr; gr <= 255; gr += 20) {
49 for (rd = 90 + incr; rd <= 255; rd += 30) {
50 for (bl = 90 + incr; bl <= 255; bl += 40) {
51 flag = 1;
52 while (flag) {
53 Rast_get_c_color(&r, &red, &green, &blue,
54 &colors);
55 /* if existing rule is too dark then append a new
56 rule to override it */
57 if ((blue * .11 + red * .30 + green * .59) <
58 100) {
59 Rast_set_c_color(r, rd, gr, bl, &colors);
60 flag = 0;
61 }
62 if (++r > max) {
63 gr = rd = bl = 300;
64 flag = 0;
65 incr = -1;
66 }
67 }
68 }
69 }
70 }
71 if (incr >= 0) {
72 incr += 15;
73 if (incr > 120)
74 incr = 7;
75 }
76 }
77 G_percent(r - 1, max, 3); /* finish it */
78 }
79 else
80 G_debug(1,
81 "Too many subbasins to reasonably check for color brightness");
82 /* using the existing stack of while/for/for/for/while loops ... */
83 }
84
85 /* stream segments map */
86 if (seg_flag) {
87 G_message(_("Closing stream segments map"));
88 cellrow = (CELL *) G_malloc(ncols * sizeof(CELL));
89 map_fd = Rast_open_c_new(seg_name);
90 for (r = 0; r < nrows; r++) {
91 G_percent(r, nrows, 1);
92 Rast_set_c_null_value(cellrow, ncols); /* reset row to all NULL */
93 for (c = 0; c < ncols; c++) {
94 /* bseg_get(&swale, &cvalue, r, c); */
95 /* if (cvalue) */
96 seg_get(&aspflag, (char *)&af, r, c);
97 if (FLAG_GET(af.flag, SWALEFLAG))
98 cseg_get(&bas, &(cellrow[c]), r, c);
99 }
100 Rast_put_row(map_fd, cellrow, CELL_TYPE);
101 }
102 G_percent(nrows, nrows, 1); /* finish it */
103 G_free(cellrow);
104 Rast_close(map_fd);
105 Rast_write_colors(seg_name, this_mapset, &colors);
106 }
107
108 /* basins map */
109 if (bas_flag) {
110 G_message(_("Closing basins map"));
111 cseg_write_cellfile(&bas, bas_name);
112 Rast_write_colors(bas_name, this_mapset, &colors);
113 }
114
115 /* half.basins map */
116 if (haf_flag) {
117 G_message(_("Closing half basins map"));
118 cseg_write_cellfile(&haf, haf_name);
119 Rast_write_colors(haf_name, this_mapset, &colors);
120 }
121
122 if (seg_flag || bas_flag || haf_flag)
123 Rast_free_colors(&colors);
124 cseg_close(&haf);
125 cseg_close(&bas);
126 if (arm_flag)
127 fclose(fp);
128
129 close_maps();
130
131 return 0;
132 }
133